From 1a820ad9b7d2564d836f3044f770aec56c0b04a1 Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Tue, 12 Dec 2017 22:06:25 -0800 Subject: [PATCH 001/333] Initial removal of item IDs. We do not rely on Bukkit's item ids anymore, though we still support them in commands via a mapping built off of the items.csv. --- .../essentials/EssentialsPlayerListener.java | 6 +- .../com/earth2me/essentials/ISettings.java | 5 +- .../src/com/earth2me/essentials/IUser.java | 3 +- .../src/com/earth2me/essentials/ItemDb.java | 83 ++++++++++++++----- .../src/com/earth2me/essentials/Settings.java | 17 ++-- .../src/com/earth2me/essentials/User.java | 5 +- .../src/com/earth2me/essentials/UserData.java | 38 +++++---- .../src/com/earth2me/essentials/Worth.java | 46 +++++++--- .../com/earth2me/essentials/api/IItemDb.java | 5 ++ .../essentials/commands/Commandgive.java | 3 +- .../essentials/commands/Commanditem.java | 5 +- .../essentials/commands/Commanditemdb.java | 8 +- .../essentials/commands/Commandmore.java | 7 +- .../essentials/commands/Commandrepair.java | 15 ++-- .../essentials/commands/Commandsell.java | 2 +- .../essentials/commands/Commandsetworth.java | 4 +- .../essentials/commands/Commandunlimited.java | 12 +-- .../essentials/commands/Commandworth.java | 2 +- .../essentials/storage/BukkitConstructor.java | 30 ++----- .../antibuild/EssentialsAntiBuild.java | 13 +-- .../EssentialsAntiBuildListener.java | 40 ++++----- .../essentials/antibuild/IAntiBuild.java | 5 +- .../essentials/protect/EssentialsProtect.java | 9 +- .../earth2me/essentials/protect/IProtect.java | 3 +- 24 files changed, 225 insertions(+), 141 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 275b05cf6..e2a5df9c0 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -596,7 +596,7 @@ public class EssentialsPlayerListener implements Listener { case LEFT_CLICK_BLOCK: if (event.getItem() != null && event.getItem().getType() != Material.AIR) { final User user = ess.getUser(event.getPlayer()); - if (user.hasPowerTools() && user.arePowerToolsEnabled() && usePowertools(user, event.getItem().getTypeId())) { + if (user.hasPowerTools() && user.arePowerToolsEnabled() && usePowertools(user, event.getItem().getType())) { event.setCancelled(true); } } @@ -630,8 +630,8 @@ public class EssentialsPlayerListener implements Listener { } } - private boolean usePowertools(final User user, final int id) { - final List commandList = user.getPowertool(id); + private boolean usePowertools(final User user, final Material material) { + final List commandList = user.getPowertool(material); if (commandList == null || commandList.isEmpty()) { return false; } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 8f6a3eaae..a0385d787 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -5,6 +5,7 @@ import com.earth2me.essentials.signs.EssentialsSign; import com.earth2me.essentials.textreader.IText; import org.bukkit.ChatColor; +import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.event.EventPriority; @@ -80,7 +81,7 @@ public interface ISettings extends IConf { int getProtectCreeperMaxHeight(); - List getProtectList(final String configName); + List getProtectList(final String configName); boolean getProtectPreventSpawn(final String creatureName); @@ -120,7 +121,7 @@ public interface ISettings extends IConf { boolean isTradeInStacks(int id); - List itemSpawnBlacklist(); + List itemSpawnBlacklist(); List enabledSigns(); diff --git a/Essentials/src/com/earth2me/essentials/IUser.java b/Essentials/src/com/earth2me/essentials/IUser.java index 6a9c98230..66945addc 100644 --- a/Essentials/src/com/earth2me/essentials/IUser.java +++ b/Essentials/src/com/earth2me/essentials/IUser.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.commands.IEssentialsCommand; import net.ess3.api.ITeleport; import net.ess3.api.MaxMoneyException; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Player; import java.math.BigDecimal; @@ -35,7 +36,7 @@ public interface IUser { boolean canAfford(BigDecimal value); - Boolean canSpawnItem(final int itemId); + Boolean canSpawnItem(final Material material); void setLastLocation(); diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 73d4e1024..2e169409f 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -20,6 +20,7 @@ import org.bukkit.potion.Potion; import org.bukkit.potion.PotionEffect; import java.util.*; +import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -27,10 +28,12 @@ import static com.earth2me.essentials.I18n.tl; public class ItemDb implements IConf, net.ess3.api.IItemDb { + protected static final Logger LOGGER = Logger.getLogger("Essentials"); private final transient IEssentials ess; private final transient Map items = new HashMap<>(); private final transient Map> names = new HashMap<>(); private final transient Map primaryName = new HashMap<>(); + private final transient Map legacyIds = new HashMap<>(); private final transient Map durabilities = new HashMap<>(); private final transient Map nbtData = new HashMap<>(); private final transient ManagedFile file; @@ -95,13 +98,19 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { if (itemName == null || numeric < 0) { continue; } + + Material material = Material.matchMaterial(itemName); + if (material == null) { + LOGGER.warning(String.format("Failed to find material for %s", itemName)); + continue; + } durabilities.put(itemName, data); items.put(itemName, numeric); if (nbt != null) { nbtData.put(itemName, nbt); } - ItemData itemData = new ItemData(numeric, data); + ItemData itemData = new ItemData(material, numeric, data); if (names.containsKey(itemData)) { List nameList = names.get(itemData); nameList.add(itemName); @@ -111,6 +120,8 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { names.put(itemData, nameList); primaryName.put(itemData, itemName); } + + legacyIds.put(numeric, itemData); } for (List nameList : names.values()) { @@ -152,16 +163,6 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { if (durabilities.containsKey(itemname) && metaData == 0) { metaData = durabilities.get(itemname); } - } else if (Material.getMaterial(itemname.toUpperCase(Locale.ENGLISH)) != null) { - Material bMaterial = Material.getMaterial(itemname.toUpperCase(Locale.ENGLISH)); - itemid = bMaterial.getId(); - } else { - try { - Material bMaterial = Bukkit.getUnsafe().getMaterialFromInternalName(itemname.toLowerCase(Locale.ENGLISH)); - itemid = bMaterial.getId(); - } catch (Throwable throwable) { - throw new Exception(tl("unknownItemName", itemname), throwable); - } } } @@ -169,10 +170,12 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { throw new Exception(tl("unknownItemName", itemname)); } - final Material mat = Material.getMaterial(itemid); - if (mat == null) { + ItemData data = legacyIds.get(itemid); + if (data == null) { throw new Exception(tl("unknownItemId", itemid)); } + + Material mat = data.getMaterial(); ItemStack retval = new ItemStack(mat); if (nbtData.containsKey(itemname)) { String nbt = nbtData.get(itemname); @@ -241,10 +244,10 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { @Override public String names(ItemStack item) { - ItemData itemData = new ItemData(item.getTypeId(), item.getDurability()); + ItemData itemData = new ItemData(item.getType(), item.getDurability()); List nameList = names.get(itemData); if (nameList == null) { - itemData = new ItemData(item.getTypeId(), (short) 0); + itemData = new ItemData(item.getType(), (short) 0); nameList = names.get(itemData); if (nameList == null) { return null; @@ -259,10 +262,10 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { @Override public String name(ItemStack item) { - ItemData itemData = new ItemData(item.getTypeId(), item.getDurability()); + ItemData itemData = new ItemData(item.getType(), item.getDurability()); String name = primaryName.get(itemData); if (name == null) { - itemData = new ItemData(item.getTypeId(), (short) 0); + itemData = new ItemData(item.getType(), (short) 0); name = primaryName.get(itemData); if (name == null) { return null; @@ -415,22 +418,56 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { return sb.toString().trim().replaceAll("ยง", "&"); } + @Override + public Material getFromLegacyId(int id) { + ItemData data = this.legacyIds.get(id); + if(data == null) { + return null; + } + + return data.getMaterial(); + } + + @Override + public int getLegacyId(Material material) throws Exception { + for(Map.Entry entry : items.entrySet()) { + if(material.name().toLowerCase(Locale.ENGLISH).equalsIgnoreCase(entry.getKey())) { + return entry.getValue(); + } + } + + throw new Exception("Itemid not found for material: " + material.name()); + } + @Override public Collection listNames() { return primaryName.values(); } static class ItemData { - final private int itemNo; + final private Material material; + private int legacyId; final private short itemData; - ItemData(final int itemNo, final short itemData) { - this.itemNo = itemNo; + ItemData(Material material, short itemData) { + this.material = material; this.itemData = itemData; } + @Deprecated + ItemData(Material material, final int legacyId, final short itemData) { + this.material = material; + this.legacyId = legacyId; + this.itemData = itemData; + } + + public Material getMaterial() { + return material; + } + + @Deprecated public int getItemNo() { - return itemNo; + return legacyId; } public short getItemData() { @@ -439,7 +476,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { @Override public int hashCode() { - return (31 * itemNo) ^ itemData; + return (31 * material.hashCode()) ^ itemData; } @Override @@ -451,7 +488,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { return false; } ItemData pairo = (ItemData) o; - return this.itemNo == pairo.getItemNo() && this.itemData == pairo.getItemData(); + return this.material == pairo.getMaterial() && this.itemData == pairo.getItemData(); } } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index d924653d6..61bd9ada6 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -10,6 +10,7 @@ import com.earth2me.essentials.utils.NumberUtil; import net.ess3.api.IEssentials; import org.bukkit.ChatColor; +import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.MemoryConfiguration; import org.bukkit.event.EventPriority; @@ -555,15 +556,15 @@ public class Settings implements net.ess3.api.ISettings { unprotectedSigns = _getUnprotectedSign(); } - private List itemSpawnBl = new ArrayList(); + private List itemSpawnBl = new ArrayList(); @Override - public List itemSpawnBlacklist() { + public List itemSpawnBlacklist() { return itemSpawnBl; } - private List _getItemSpawnBlacklist() { - final List epItemSpwn = new ArrayList(); + private List _getItemSpawnBlacklist() { + final List epItemSpwn = new ArrayList<>(); if (ess.getItemDb() == null) { logger.log(Level.FINE, "Aborting ItemSpawnBL read, itemDB not yet loaded."); return epItemSpwn; @@ -575,7 +576,7 @@ public class Settings implements net.ess3.api.ISettings { } try { final ItemStack iStack = ess.getItemDb().get(itemName); - epItemSpwn.add(iStack.getTypeId()); + epItemSpwn.add(iStack.getType()); } catch (Exception ex) { logger.log(Level.SEVERE, tl("unknownItemInList", itemName, "item-spawn-blacklist")); } @@ -685,8 +686,8 @@ public class Settings implements net.ess3.api.ISettings { } @Override - public List getProtectList(final String configName) { - final List list = new ArrayList(); + public List getProtectList(final String configName) { + final List list = new ArrayList<>(); for (String itemName : config.getString(configName, "").split(",")) { itemName = itemName.trim(); if (itemName.isEmpty()) { @@ -695,7 +696,7 @@ public class Settings implements net.ess3.api.ISettings { ItemStack itemStack; try { itemStack = ess.getItemDb().get(itemName); - list.add(itemStack.getTypeId()); + list.add(itemStack.getType()); } catch (Exception ex) { logger.log(Level.SEVERE, tl("unknownItemInList", itemName, configName)); } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index a3213b595..c644eea5e 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -18,6 +18,7 @@ import net.ess3.nms.refl.ReflUtil; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; @@ -222,8 +223,8 @@ public class User extends UserData implements Comparable, IMessageRecipien } @Override - public Boolean canSpawnItem(final int itemId) { - return !ess.getSettings().itemSpawnBlacklist().contains(itemId); + public Boolean canSpawnItem(final Material material) { + return !ess.getSettings().itemSpawnBlacklist().contains(material); } @Override diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 7ea09b3e9..3c7a13bbf 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -7,6 +7,7 @@ import net.ess3.api.IEssentials; import net.ess3.api.InvalidWorldException; import net.ess3.api.MaxMoneyException; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -231,26 +232,35 @@ public abstract class UserData extends PlayerExtension implements IConf { config.save(); } - private List unlimited; + private List unlimited; - private List _getUnlimited() { - return config.getIntegerList("unlimited"); + private List _getUnlimited() { + List retlist = new ArrayList<>(); + List configList = config.getStringList("unlimited"); + for(String s : configList) { + Material mat = Material.matchMaterial(s); + if(mat != null) { + retlist.add(mat); + } + } + + return retlist; } - public List getUnlimited() { + public List getUnlimited() { return unlimited; } public boolean hasUnlimited(ItemStack stack) { - return unlimited.contains(stack.getTypeId()); + return unlimited.contains(stack.getType()); } public void setUnlimited(ItemStack stack, boolean state) { - if (unlimited.contains(stack.getTypeId())) { - unlimited.remove(Integer.valueOf(stack.getTypeId())); + if (unlimited.contains(stack.getType())) { + unlimited.remove(stack.getType()); } if (state) { - unlimited.add(stack.getTypeId()); + unlimited.add(stack.getType()); } config.setProperty("unlimited", unlimited); config.save(); @@ -262,7 +272,7 @@ public abstract class UserData extends PlayerExtension implements IConf { if (config.isConfigurationSection("powertools")) { return config.getConfigurationSection("powertools").getValues(false); } - return new HashMap(); + return new HashMap<>(); } public void clearAllPowertools() { @@ -273,19 +283,19 @@ public abstract class UserData extends PlayerExtension implements IConf { @SuppressWarnings("unchecked") public List getPowertool(ItemStack stack) { - return (List) powertools.get("" + stack.getTypeId()); + return (List) powertools.get(stack.getType().name().toLowerCase(Locale.ENGLISH)); } @SuppressWarnings("unchecked") - public List getPowertool(int id) { - return (List) powertools.get("" + id); + public List getPowertool(Material material) { + return (List) powertools.get(material.name().toLowerCase(Locale.ENGLISH)); } public void setPowertool(ItemStack stack, List commandList) { if (commandList == null || commandList.isEmpty()) { - powertools.remove("" + stack.getTypeId()); + powertools.remove(stack.getType().name().toLowerCase(Locale.ENGLISH)); } else { - powertools.put("" + stack.getTypeId(), commandList); + powertools.put(stack.getType().name().toLowerCase(Locale.ENGLISH), commandList); } config.setProperty("powertools", powertools); config.save(); diff --git a/Essentials/src/com/earth2me/essentials/Worth.java b/Essentials/src/com/earth2me/essentials/Worth.java index d029f3f59..ef3c4c034 100644 --- a/Essentials/src/com/earth2me/essentials/Worth.java +++ b/Essentials/src/com/earth2me/essentials/Worth.java @@ -21,9 +21,17 @@ public class Worth implements IConf { config.load(); } - public BigDecimal getPrice(ItemStack itemStack) { - String itemname = itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); + public BigDecimal getPrice(IEssentials essentials, ItemStack itemStack) { BigDecimal result; + int itemId; + + try { + itemId = essentials.getItemDb().getLegacyId(itemStack.getType()); + } catch (Exception e) { + return null; + } + + String itemname = itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); //First check for matches with item name result = config.getBigDecimal("worth." + itemname + "." + itemStack.getDurability(), BigDecimal.ONE.negate()); @@ -42,24 +50,24 @@ public class Worth implements IConf { //Now we should check for item ID if (result.signum() < 0) { - result = config.getBigDecimal("worth." + itemStack.getTypeId() + "." + itemStack.getDurability(), BigDecimal.ONE.negate()); + result = config.getBigDecimal("worth." + itemId + "." + itemStack.getDurability(), BigDecimal.ONE.negate()); } if (result.signum() < 0) { - final ConfigurationSection itemNumberMatch = config.getConfigurationSection("worth." + itemStack.getTypeId()); + final ConfigurationSection itemNumberMatch = config.getConfigurationSection("worth." + itemId); if (itemNumberMatch != null && itemNumberMatch.getKeys(false).size() == 1) { - result = config.getBigDecimal("worth." + itemStack.getTypeId() + ".0", BigDecimal.ONE.negate()); + result = config.getBigDecimal("worth." + itemId + ".0", BigDecimal.ONE.negate()); } } if (result.signum() < 0) { - result = config.getBigDecimal("worth." + itemStack.getTypeId() + ".*", BigDecimal.ONE.negate()); + result = config.getBigDecimal("worth." + itemId + ".*", BigDecimal.ONE.negate()); } if (result.signum() < 0) { - result = config.getBigDecimal("worth." + itemStack.getTypeId(), BigDecimal.ONE.negate()); + result = config.getBigDecimal("worth." + itemId, BigDecimal.ONE.negate()); } //This is to match the old worth syntax if (result.signum() < 0) { - result = config.getBigDecimal("worth-" + itemStack.getTypeId(), BigDecimal.ONE.negate()); + result = config.getBigDecimal("worth-" + itemId, BigDecimal.ONE.negate()); } if (result.signum() < 0) { return null; @@ -71,7 +79,15 @@ public class Worth implements IConf { if (is == null || is.getType() == Material.AIR) { throw new Exception(tl("itemSellAir")); } - int id = is.getTypeId(); + + int id; + + try { + id = ess.getItemDb().getLegacyId(is.getType()); + } catch (Exception e) { + return 0; + } + int amount = 0; if (args.length > 1) { @@ -123,14 +139,22 @@ public class Worth implements IConf { return amount; } - public void setPrice(ItemStack itemStack, double price) { + public void setPrice(IEssentials ess, ItemStack itemStack, double price) { if (itemStack.getType().getData() == null) { config.setProperty("worth." + itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""), price); } else { // Bukkit-bug: getDurability still contains the correct value, while getData().getData() is 0. config.setProperty("worth." + itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "") + "." + itemStack.getDurability(), price); } - config.removeProperty("worth-" + itemStack.getTypeId()); + + int itemId; + try { + itemId = ess.getItemDb().getLegacyId(itemStack.getType()); + } catch (Exception e) { + return; + } + + config.removeProperty("worth-" + itemId); config.save(); } diff --git a/Essentials/src/com/earth2me/essentials/api/IItemDb.java b/Essentials/src/com/earth2me/essentials/api/IItemDb.java index cae937710..00f073d5f 100644 --- a/Essentials/src/com/earth2me/essentials/api/IItemDb.java +++ b/Essentials/src/com/earth2me/essentials/api/IItemDb.java @@ -1,6 +1,7 @@ package com.earth2me.essentials.api; import com.earth2me.essentials.User; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import java.util.Collection; @@ -21,4 +22,8 @@ public interface IItemDb { String serialize(ItemStack is); Collection listNames(); + + Material getFromLegacyId(int id); + + int getLegacyId(Material material) throws Exception; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java index 47f81e7c3..0dfda9505 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java @@ -31,9 +31,10 @@ public class Commandgive extends EssentialsCommand { } ItemStack stack = ess.getItemDb().get(args[1]); + int itemId = ess.getItemDb().getLegacyId(stack.getType()); final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); - if (sender.isPlayer() && (ess.getSettings().permissionBasedItemSpawn() ? (!ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-all") && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-" + itemname) && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-" + stack.getTypeId())) : (!ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.exempt") && !ess.getUser(sender.getPlayer()).canSpawnItem(stack.getTypeId())))) { + if (sender.isPlayer() && (ess.getSettings().permissionBasedItemSpawn() ? (!ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-all") && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-" + itemname) && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-" + itemId)) : (!ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.exempt") && !ess.getUser(sender.getPlayer()).canSpawnItem(stack.getType())))) { throw new Exception(tl("cantSpawnItem", itemname)); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java index 2bae7df6a..8e054a84b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java @@ -25,10 +25,13 @@ public class Commanditem extends EssentialsCommand { if (args.length < 1) { throw new NotEnoughArgumentsException(); } + ItemStack stack = ess.getItemDb().get(args[0]); + int itemId = ess.getItemDb().getLegacyId(stack.getType()); + final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); - if (ess.getSettings().permissionBasedItemSpawn() ? (!user.isAuthorized("essentials.itemspawn.item-all") && !user.isAuthorized("essentials.itemspawn.item-" + itemname) && !user.isAuthorized("essentials.itemspawn.item-" + stack.getTypeId())) : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getTypeId()))) { + if (ess.getSettings().permissionBasedItemSpawn() ? (!user.isAuthorized("essentials.itemspawn.item-all") && !user.isAuthorized("essentials.itemspawn.item-" + itemname) && !user.isAuthorized("essentials.itemspawn.item-" + itemId)) : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getType()))) { throw new Exception(tl("cantSpawnItem", itemname)); } try { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java b/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java index b4015558c..43f29e49a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java @@ -21,9 +21,9 @@ public class Commanditemdb extends EssentialsCommand { ItemStack itemStack = null; boolean itemHeld = false; if (args.length < 1) { - if (sender.isPlayer()) { + if (sender.isPlayer() && sender.getPlayer() != null) { itemHeld = true; - itemStack = sender.getPlayer().getItemInHand(); + itemStack = sender.getPlayer().getInventory().getItemInMainHand(); } if (itemStack == null) { throw new NotEnoughArgumentsException(); @@ -31,7 +31,9 @@ public class Commanditemdb extends EssentialsCommand { } else { itemStack = ess.getItemDb().get(args[0]); } - sender.sendMessage(tl("itemType", itemStack.getType().toString(), itemStack.getTypeId() + ":" + Integer.toString(itemStack.getDurability()))); + + int itemId = ess.getItemDb().getLegacyId(itemStack.getType()); + sender.sendMessage(tl("itemType", itemStack.getType().toString(), itemId + ":" + Integer.toString(itemStack.getDurability()))); if (itemHeld && itemStack.getType() != Material.AIR) { int maxuses = itemStack.getType().getMaxDurability(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmore.java b/Essentials/src/com/earth2me/essentials/commands/Commandmore.java index 3a08a4966..efdb1125f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmore.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmore.java @@ -16,15 +16,18 @@ public class Commandmore extends EssentialsCommand { @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - final ItemStack stack = user.getBase().getItemInHand(); + final ItemStack stack = user.getBase().getInventory().getItemInMainHand(); if (stack == null) { throw new Exception(tl("cantSpawnItem", "Air")); } + + int itemId = ess.getItemDb().getLegacyId(stack.getType()); + if (stack.getAmount() >= ((user.isAuthorized("essentials.oversizedstacks")) ? ess.getSettings().getOversizedStackSize() : stack.getMaxStackSize())) { throw new Exception(tl("fullStack")); } final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); - if (ess.getSettings().permissionBasedItemSpawn() ? (!user.isAuthorized("essentials.itemspawn.item-all") && !user.isAuthorized("essentials.itemspawn.item-" + itemname) && !user.isAuthorized("essentials.itemspawn.item-" + stack.getTypeId())) : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getTypeId()))) { + if (ess.getSettings().permissionBasedItemSpawn() ? (!user.isAuthorized("essentials.itemspawn.item-all") && !user.isAuthorized("essentials.itemspawn.item-" + itemname) && !user.isAuthorized("essentials.itemspawn.item-" + itemId)) : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getType()))) { throw new Exception(tl("cantSpawnItem", itemname)); } if (user.isAuthorized("essentials.oversizedstacks")) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index 0d4cfbe41..b60ec05df 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -38,7 +38,7 @@ public class Commandrepair extends EssentialsCommand { } public void repairHand(User user) throws Exception { - final ItemStack item = user.getBase().getItemInHand(); + final ItemStack item = user.getBase().getInventory().getItemInMainHand(); if (item == null || item.getType().isBlock() || item.getDurability() == 0) { throw new Exception(tl("repairInvalidType")); } @@ -47,8 +47,10 @@ public class Commandrepair extends EssentialsCommand { throw new Exception(tl("repairEnchanted")); } + int itemId = ess.getItemDb().getLegacyId(item.getType()); + final String itemName = item.getType().toString().toLowerCase(Locale.ENGLISH); - final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-" + item.getTypeId(), new Trade("repair-item", ess), ess), ess); + final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-" + itemId, new Trade("repair-item", ess), ess), ess); charge.isAffordableFor(user); @@ -76,7 +78,7 @@ public class Commandrepair extends EssentialsCommand { } private void repairItem(final ItemStack item) throws Exception { - final Material material = Material.getMaterial(item.getTypeId()); + final Material material = item.getType(); if (material.isBlock() || material.getMaxDurability() < 1) { throw new Exception(tl("repairInvalidType")); } @@ -88,13 +90,16 @@ public class Commandrepair extends EssentialsCommand { item.setDurability((short) 0); } - private void repairItems(final ItemStack[] items, final IUser user, final List repaired) { + private void repairItems(final ItemStack[] items, final IUser user, final List repaired) throws Exception { for (ItemStack item : items) { if (item == null || item.getType().isBlock() || item.getDurability() == 0) { continue; } + + int itemId = ess.getItemDb().getLegacyId(item.getType()); + final String itemName = item.getType().toString().toLowerCase(Locale.ENGLISH); - final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-" + item.getTypeId(), new Trade("repair-item", ess), ess), ess); + final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-" + itemId, new Trade("repair-item", ess), ess), ess); try { charge.isAffordableFor(user); } catch (ChargeException ex) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java index 8c775bcd3..e6c41a98b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java @@ -69,7 +69,7 @@ public class Commandsell extends EssentialsCommand { private BigDecimal sellItem(User user, ItemStack is, String[] args, boolean isBulkSell) throws Exception { int amount = ess.getWorth().getAmount(ess, user, is, args, isBulkSell); - BigDecimal worth = ess.getWorth().getPrice(is); + BigDecimal worth = ess.getWorth().getPrice(ess, is); if (worth == null) { throw new Exception(tl("itemCannotBeSold")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java index efde7ee97..d3e61c528 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java @@ -31,7 +31,7 @@ public class Commandsetworth extends EssentialsCommand { price = args[1]; } - ess.getWorth().setPrice(stack, FloatUtil.parseDouble(price)); + ess.getWorth().setPrice(ess, stack, FloatUtil.parseDouble(price)); user.sendMessage(tl("worthSet")); } @@ -42,7 +42,7 @@ public class Commandsetworth extends EssentialsCommand { } ItemStack stack = ess.getItemDb().get(args[0]); - ess.getWorth().setPrice(stack, FloatUtil.parseDouble(args[1])); + ess.getWorth().setPrice(ess, stack, FloatUtil.parseDouble(args[1])); sender.sendMessage(tl("worthSet")); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java index 158da4bc1..67d676af0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java @@ -32,12 +32,12 @@ public class Commandunlimited extends EssentialsCommand { final String list = getList(target); user.sendMessage(list); } else if (args[0].equalsIgnoreCase("clear")) { - final List itemList = target.getUnlimited(); + final List itemList = target.getUnlimited(); int index = 0; while (itemList.size() > index) { - final Integer item = itemList.get(index); - if (toggleUnlimited(user, target, item.toString()) == false) { + final Material item = itemList.get(index); + if (!toggleUnlimited(user, target, item.toString())) { index++; } } @@ -50,16 +50,16 @@ public class Commandunlimited extends EssentialsCommand { final StringBuilder output = new StringBuilder(); output.append(tl("unlimitedItems")).append(" "); boolean first = true; - final List items = target.getUnlimited(); + final List items = target.getUnlimited(); if (items.isEmpty()) { output.append(tl("none")); } - for (Integer integer : items) { + for (Material material : items) { if (!first) { output.append(", "); } first = false; - final String matname = Material.getMaterial(integer).toString().toLowerCase(Locale.ENGLISH).replace("_", ""); + final String matname = material.toString().toLowerCase(Locale.ENGLISH).replace("_", ""); output.append(matname); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java index ec7bd8928..31b55be55 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java @@ -84,7 +84,7 @@ public class Commandworth extends EssentialsCommand { amount = ess.getWorth().getAmount(ess, user, is, args, true); } - BigDecimal worth = ess.getWorth().getPrice(is); + BigDecimal worth = ess.getWorth().getPrice(ess, is); if (worth == null) { throw new Exception(tl("itemCannotBeSold")); diff --git a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java index 54f780e52..959d5e3d6 100644 --- a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java +++ b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java @@ -36,15 +36,9 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { public Object construct(final Node node) { if (node.getType().equals(Material.class)) { final String val = (String) constructScalar((ScalarNode) node); - Material mat; - if (NumberUtil.isInt(val)) { - final int typeId = Integer.parseInt(val); - mat = Material.getMaterial(typeId); - } else { - mat = Material.matchMaterial(val); - } - return mat; + return Material.matchMaterial(val); } + if (node.getType().equals(MaterialData.class)) { final String val = (String) constructScalar((ScalarNode) node); if (val.isEmpty()) { @@ -54,13 +48,9 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { if (split.length == 0) { return null; } - Material mat; - if (NumberUtil.isInt(split[0])) { - final int typeId = Integer.parseInt(split[0]); - mat = Material.getMaterial(typeId); - } else { - mat = Material.matchMaterial(split[0]); - } + + Material mat = Material.matchMaterial(split[0]); + if (mat == null) { return null; } @@ -83,13 +73,9 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { if (split2.length == 0) { return null; } - Material mat; - if (NumberUtil.isInt(split2[0])) { - final int typeId = Integer.parseInt(split2[0]); - mat = Material.getMaterial(typeId); - } else { - mat = Material.matchMaterial(split2[0]); - } + + Material mat = Material.matchMaterial(split2[0]); + if (mat == null) { return null; } diff --git a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuild.java b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuild.java index 41378ad3a..e19078f99 100644 --- a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuild.java +++ b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuild.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.antibuild; +import org.bukkit.Material; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -10,8 +11,8 @@ import java.util.Map; public class EssentialsAntiBuild extends JavaPlugin implements IAntiBuild { - private final transient Map settingsBoolean = new EnumMap(AntiBuildConfig.class); - private final transient Map> settingsList = new EnumMap>(AntiBuildConfig.class); + private final transient Map settingsBoolean = new EnumMap<>(AntiBuildConfig.class); + private final transient Map> settingsList = new EnumMap<>(AntiBuildConfig.class); private transient EssentialsConnect ess = null; @Override @@ -28,9 +29,9 @@ public class EssentialsAntiBuild extends JavaPlugin implements IAntiBuild { } @Override - public boolean checkProtectionItems(final AntiBuildConfig list, final int id) { - final List itemList = settingsList.get(list); - return itemList != null && !itemList.isEmpty() && itemList.contains(id); + public boolean checkProtectionItems(final AntiBuildConfig list, final Material mat) { + final List itemList = settingsList.get(list); + return itemList != null && !itemList.isEmpty() && itemList.contains(mat); } @Override @@ -44,7 +45,7 @@ public class EssentialsAntiBuild extends JavaPlugin implements IAntiBuild { } @Override - public Map> getSettingsList() { + public Map> getSettingsList() { return settingsList; } diff --git a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java index f60ec5854..1fe6840ce 100644 --- a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java +++ b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java @@ -40,16 +40,16 @@ public class EssentialsAntiBuildListener implements Listener { } return false; } - return metaPermCheck(user, action, block.getTypeId(), block.getData()); + return metaPermCheck(user, action, block.getType(), block.getData()); } - private boolean metaPermCheck(final User user, final String action, final int blockId) { - final String blockPerm = "essentials.build." + action + "." + blockId; + private boolean metaPermCheck(final User user, final String action, final Material material) { + final String blockPerm = "essentials.build." + action + "." + material; return user.isAuthorized(blockPerm); } - private boolean metaPermCheck(final User user, final String action, final int blockId, final short data) { - final String blockPerm = "essentials.build." + action + "." + blockId; + private boolean metaPermCheck(final User user, final String action, final Material material, final short data) { + final String blockPerm = "essentials.build." + action + "." + material; final String dataPerm = blockPerm + ":" + data; if (user.getBase().isPermissionSet(dataPerm)) { @@ -78,7 +78,7 @@ public class EssentialsAntiBuildListener implements Listener { return; } - if (prot.checkProtectionItems(AntiBuildConfig.blacklist_placement, typeId) && !user.isAuthorized("essentials.protect.exemptplacement")) { + if (prot.checkProtectionItems(AntiBuildConfig.blacklist_placement, type) && !user.isAuthorized("essentials.protect.exemptplacement")) { if (ess.getSettings().warnOnBuildDisallow()) { user.sendMessage(tl("antiBuildPlace", type.toString())); } @@ -86,7 +86,7 @@ public class EssentialsAntiBuildListener implements Listener { return; } - if (prot.checkProtectionItems(AntiBuildConfig.alert_on_placement, typeId) && !user.isAuthorized("essentials.protect.alerts.notrigger")) { + if (prot.checkProtectionItems(AntiBuildConfig.alert_on_placement, type) && !user.isAuthorized("essentials.protect.alerts.notrigger")) { prot.getEssentialsConnect().alert(user, type.toString(), tl("alertPlaced")); } } @@ -106,7 +106,7 @@ public class EssentialsAntiBuildListener implements Listener { return; } - if (prot.checkProtectionItems(AntiBuildConfig.blacklist_break, typeId) && !user.isAuthorized("essentials.protect.exemptbreak")) { + if (prot.checkProtectionItems(AntiBuildConfig.blacklist_break, type) && !user.isAuthorized("essentials.protect.exemptbreak")) { if (ess.getSettings().warnOnBuildDisallow()) { user.sendMessage(tl("antiBuildBreak", type.toString())); } @@ -114,7 +114,7 @@ public class EssentialsAntiBuildListener implements Listener { return; } - if (prot.checkProtectionItems(AntiBuildConfig.alert_on_break, typeId) && !user.isAuthorized("essentials.protect.alerts.notrigger")) { + if (prot.checkProtectionItems(AntiBuildConfig.alert_on_break, type) && !user.isAuthorized("essentials.protect.alerts.notrigger")) { prot.getEssentialsConnect().alert(user, type.toString(), tl("alertBroke")); } } @@ -127,12 +127,12 @@ public class EssentialsAntiBuildListener implements Listener { final EntityType type = event.getEntity().getType(); final boolean warn = ess.getSettings().warnOnBuildDisallow(); if (prot.getSettingBool(AntiBuildConfig.disable_build) && !user.canBuild() && !user.isAuthorized("essentials.build")) { - if (type == EntityType.PAINTING && !metaPermCheck(user, "break", Material.PAINTING.getId())) { + if (type == EntityType.PAINTING && !metaPermCheck(user, "break", Material.PAINTING)) { if (warn) { user.sendMessage(tl("antiBuildBreak", Material.PAINTING.toString())); } event.setCancelled(true); - } else if (type == EntityType.ITEM_FRAME && !metaPermCheck(user, "break", Material.ITEM_FRAME.getId())) { + } else if (type == EntityType.ITEM_FRAME && !metaPermCheck(user, "break", Material.ITEM_FRAME)) { if (warn) { user.sendMessage(tl("antiBuildBreak", Material.ITEM_FRAME.toString())); } @@ -145,7 +145,7 @@ public class EssentialsAntiBuildListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPistonExtend(final BlockPistonExtendEvent event) { for (Block block : event.getBlocks()) { - if (prot.checkProtectionItems(AntiBuildConfig.blacklist_piston, block.getTypeId())) { + if (prot.checkProtectionItems(AntiBuildConfig.blacklist_piston, block.getType())) { event.setCancelled(true); return; } @@ -158,7 +158,7 @@ public class EssentialsAntiBuildListener implements Listener { return; } final Block block = event.getBlock(); - if (prot.checkProtectionItems(AntiBuildConfig.blacklist_piston, block.getTypeId())) { + if (prot.checkProtectionItems(AntiBuildConfig.blacklist_piston, block.getType())) { event.setCancelled(true); } } @@ -169,7 +169,7 @@ public class EssentialsAntiBuildListener implements Listener { final User user = ess.getUser(event.getPlayer()); final ItemStack item = event.getItem(); - if (item != null && prot.checkProtectionItems(AntiBuildConfig.blacklist_usage, item.getTypeId()) && !user.isAuthorized("essentials.protect.exemptusage")) { + if (item != null && prot.checkProtectionItems(AntiBuildConfig.blacklist_usage, item.getType()) && !user.isAuthorized("essentials.protect.exemptusage")) { if (ess.getSettings().warnOnBuildDisallow()) { user.sendMessage(tl("antiBuildUse", item.getType().toString())); } @@ -177,12 +177,12 @@ public class EssentialsAntiBuildListener implements Listener { return; } - if (item != null && prot.checkProtectionItems(AntiBuildConfig.alert_on_use, item.getTypeId()) && !user.isAuthorized("essentials.protect.alerts.notrigger")) { + if (item != null && prot.checkProtectionItems(AntiBuildConfig.alert_on_use, item.getType()) && !user.isAuthorized("essentials.protect.alerts.notrigger")) { prot.getEssentialsConnect().alert(user, item.getType().toString(), tl("alertUsed")); } if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) { - if (event.hasItem() && !metaPermCheck(user, "interact", item.getTypeId(), item.getDurability())) { + if (event.hasItem() && !metaPermCheck(user, "interact", item.getType(), item.getDurability())) { event.setCancelled(true); if (ess.getSettings().warnOnBuildDisallow()) { user.sendMessage(tl("antiBuildUse", item.getType().toString())); @@ -207,7 +207,7 @@ public class EssentialsAntiBuildListener implements Listener { final ItemStack item = event.getRecipe().getResult(); if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) { - if (!metaPermCheck(user, "craft", item.getTypeId(), item.getDurability())) { + if (!metaPermCheck(user, "craft", item.getType(), item.getDurability())) { event.setCancelled(true); if (ess.getSettings().warnOnBuildDisallow()) { user.sendMessage(tl("antiBuildCraft", item.getType().toString())); @@ -224,7 +224,7 @@ public class EssentialsAntiBuildListener implements Listener { final ItemStack item = event.getItem().getItemStack(); if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) { - if (!metaPermCheck(user, "pickup", item.getTypeId(), item.getDurability())) { + if (!metaPermCheck(user, "pickup", item.getType(), item.getDurability())) { event.setCancelled(true); event.getItem().setPickupDelay(50); } @@ -238,7 +238,7 @@ public class EssentialsAntiBuildListener implements Listener { final ItemStack item = event.getItemDrop().getItemStack(); if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) { - if (!metaPermCheck(user, "drop", item.getTypeId(), item.getDurability())) { + if (!metaPermCheck(user, "drop", item.getType(), item.getDurability())) { event.setCancelled(true); user.getBase().updateInventory(); if (ess.getSettings().warnOnBuildDisallow()) { @@ -251,7 +251,7 @@ public class EssentialsAntiBuildListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockDispense(final BlockDispenseEvent event) { final ItemStack item = event.getItem(); - if (prot.checkProtectionItems(AntiBuildConfig.blacklist_dispenser, item.getTypeId())) { + if (prot.checkProtectionItems(AntiBuildConfig.blacklist_dispenser, item.getType())) { event.setCancelled(true); } } diff --git a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/IAntiBuild.java b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/IAntiBuild.java index bfb8facd3..cb19d75de 100644 --- a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/IAntiBuild.java +++ b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/IAntiBuild.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.antibuild; +import org.bukkit.Material; import org.bukkit.plugin.Plugin; import java.util.List; @@ -7,7 +8,7 @@ import java.util.Map; public interface IAntiBuild extends Plugin { - boolean checkProtectionItems(final AntiBuildConfig list, final int id); + boolean checkProtectionItems(final AntiBuildConfig list, final Material mat); boolean getSettingBool(final AntiBuildConfig protectConfig); @@ -15,5 +16,5 @@ public interface IAntiBuild extends Plugin { Map getSettingsBoolean(); - Map> getSettingsList(); + Map> getSettingsList(); } diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java index be3679365..964c9972c 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.protect; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; @@ -14,9 +15,9 @@ import java.util.logging.Logger; public class EssentialsProtect extends JavaPlugin implements IProtect { private static final Logger LOGGER = Logger.getLogger("Minecraft"); - private final Map settingsBoolean = new EnumMap(ProtectConfig.class); - private final Map settingsString = new EnumMap(ProtectConfig.class); - private final Map> settingsList = new EnumMap>(ProtectConfig.class); + private final Map settingsBoolean = new EnumMap<>(ProtectConfig.class); + private final Map settingsString = new EnumMap<>(ProtectConfig.class); + private final Map> settingsList = new EnumMap<>(ProtectConfig.class); private EssentialsConnect ess = null; @Override @@ -65,7 +66,7 @@ public class EssentialsProtect extends JavaPlugin implements IProtect { } @Override - public Map> getSettingsList() { + public Map> getSettingsList() { return settingsList; } diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/IProtect.java b/EssentialsProtect/src/com/earth2me/essentials/protect/IProtect.java index 23ba0cebb..7d12107ad 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/IProtect.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/IProtect.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.protect; +import org.bukkit.Material; import org.bukkit.plugin.Plugin; import java.util.List; @@ -17,5 +18,5 @@ public interface IProtect extends Plugin { Map getSettingsString(); - Map> getSettingsList(); + Map> getSettingsList(); } From f0bf359df366f8e26d63f3c015fa5b7614778df6 Mon Sep 17 00:00:00 2001 From: Ali Moghnieh Date: Sun, 7 Jan 2018 01:21:19 +0000 Subject: [PATCH 002/333] Allow KeywordReplacer to input replacements with underscore spacers. Resolves #1725 and provides a less breaking fix for #1722. ---- Revert "Consume everything after lore as lore in MetaItemStack. Fixes #1722." This reverts commit 5fa2ce7d9e2a51e760055298901bebb1f8c1e0ee. --- .../src/com/earth2me/essentials/Kit.java | 2 +- .../earth2me/essentials/MetaItemStack.java | 22 ------------------- .../textreader/KeywordReplacer.java | 17 ++++++++++++++ 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Kit.java b/Essentials/src/com/earth2me/essentials/Kit.java index 3bc9d2d44..aac3323e5 100644 --- a/Essentials/src/com/earth2me/essentials/Kit.java +++ b/Essentials/src/com/earth2me/essentials/Kit.java @@ -185,7 +185,7 @@ public class Kit { public void expandItems(final User user, final List items) throws Exception { try { IText input = new SimpleTextInput(items); - IText output = new KeywordReplacer(input, user.getSource(), ess); + IText output = new KeywordReplacer(input, user.getSource(), ess, true, true); boolean spew = false; final boolean allowUnsafe = ess.getSettings().allowUnsafeEnchantments(); diff --git a/Essentials/src/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/com/earth2me/essentials/MetaItemStack.java index 26e5a4d1a..dbe30cfde 100644 --- a/Essentials/src/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/com/earth2me/essentials/MetaItemStack.java @@ -7,8 +7,6 @@ import com.earth2me.essentials.utils.FormatUtil; import com.earth2me.essentials.utils.NumberUtil; import com.google.common.base.Joiner; import net.ess3.api.IEssentials; - -import org.apache.commons.lang.ArrayUtils; import org.bukkit.Color; import org.bukkit.DyeColor; import org.bukkit.FireworkEffect; @@ -119,26 +117,6 @@ public class MetaItemStack { } public void parseStringMeta(final CommandSource sender, final boolean allowUnsafe, String[] string, int fromArg, final IEssentials ess) throws Exception { - // Make any entries after lore definition become the lore and not parsed. - { - int loreIndex = -1; - boolean dirty = false; - for (int i = 0; i < string.length; i++) { - String _str = string[i]; - if (loreIndex == -1) { - if (_str.matches("^lore" + splitPattern.pattern() + ".*")) { - loreIndex = i; - } - } else { - string[loreIndex] += " " + string[i]; - string[i] = null; - dirty = true; - } - } - if (dirty) { - string = (String[]) ArrayUtils.subarray(string, 0, loreIndex + 1); - } - } if (string[fromArg].startsWith("{") && hasMetaPermission(sender, "vanilla", false, true, ess)) { try { stack = ess.getServer().getUnsafe().modifyItemStack(stack, Joiner.on(' ').join(Arrays.asList(string).subList(fromArg, string.length))); diff --git a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java index 8c304c2c9..2a1ed4cae 100644 --- a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java +++ b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java @@ -32,6 +32,7 @@ public class KeywordReplacer implements IText { private final transient IEssentials ess; private final transient boolean includePrivate; private transient ExecuteTimer execTimer; + private final transient boolean replaceSpacesWithUnderscores; private final EnumMap keywordCache = new EnumMap(KeywordType.class); public KeywordReplacer(final IText input, final CommandSource sender, final IEssentials ess) { @@ -39,6 +40,7 @@ public class KeywordReplacer implements IText { this.replaced = new ArrayList(this.input.getLines().size()); this.ess = ess; this.includePrivate = true; + this.replaceSpacesWithUnderscores = false; replaceKeywords(sender); } @@ -47,6 +49,17 @@ public class KeywordReplacer implements IText { this.replaced = new ArrayList(this.input.getLines().size()); this.ess = ess; this.includePrivate = showPrivate; + this.replaceSpacesWithUnderscores = false; + replaceKeywords(sender); + } + + public KeywordReplacer(final IText input, final CommandSource sender, final IEssentials ess, final boolean showPrivate, + boolean replaceSpacesWithUnderscores) { + this.input = input; + this.replaced = new ArrayList(this.input.getLines().size()); + this.ess = ess; + this.includePrivate = showPrivate; + this.replaceSpacesWithUnderscores = replaceSpacesWithUnderscores; replaceKeywords(sender); } @@ -266,6 +279,10 @@ public class KeywordReplacer implements IText { break; } + if (this.replaceSpacesWithUnderscores) { + replacer = replacer.replaceAll("\\s", "_"); + } + //If this is just a regular keyword, lets throw it into the cache if (validKeyword.getType().equals(KeywordCachable.CACHEABLE)) { keywordCache.put(validKeyword, replacer); From cd43355d4c18e12f743092c31a765aaa8451cb1b Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Thu, 18 Jan 2018 00:25:00 -0800 Subject: [PATCH 003/333] Move kits to kits.yml (#1774) * Move kits to kits.yml We will now use a separate kits.yml file. Any kits that were defined in the config.yml will be migrated over to the kits.yml file automatically on startup. --- Essentials/kits.yml | 39 ++++++ .../com/earth2me/essentials/Essentials.java | 11 ++ .../essentials/EssentialsUpgrade.java | 29 +++++ .../com/earth2me/essentials/IEssentials.java | 3 +- .../com/earth2me/essentials/ISettings.java | 33 +++-- .../src/com/earth2me/essentials/Kit.java | 39 +----- .../src/com/earth2me/essentials/Kits.java | 114 ++++++++++++++++++ .../src/com/earth2me/essentials/Settings.java | 49 ++------ .../essentials/commands/Commandcreatekit.java | 2 +- .../essentials/commands/Commandkit.java | 8 +- .../essentials/commands/Commandshowkit.java | 3 +- .../earth2me/essentials/signs/SignKit.java | 2 +- Essentials/src/config.yml | 50 ++------ Essentials/src/kits.yml | 39 ++++++ 14 files changed, 286 insertions(+), 135 deletions(-) create mode 100644 Essentials/kits.yml create mode 100644 Essentials/src/com/earth2me/essentials/Kits.java create mode 100644 Essentials/src/kits.yml diff --git a/Essentials/kits.yml b/Essentials/kits.yml new file mode 100644 index 000000000..47c44cb3f --- /dev/null +++ b/Essentials/kits.yml @@ -0,0 +1,39 @@ +# EssentialsX new Kit configuration. +# If you don't have any kits defined in this file, the plugin will try to copy them from the config.yml + +# Note: All items MUST be followed by a quantity! +# All kit names should be lower case, and will be treated as lower in permissions/costs. +# Syntax: - itemID[:DataValue/Durability] Amount [Enchantment:Level].. [itemmeta:value]... +# For Item Meta information visit http://wiki.ess3.net/wiki/Item_Meta +# 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. +# Set delay to -1 for a one time kit. +# For more information, visit http://wiki.ess3.net/wiki/Kits +kits: + tools: + delay: 10 + items: + - 272 1 + - 273 1 + - 274 1 + - 275 1 + dtools: + delay: 600 + items: + - 278 1 efficiency:1 durability:1 fortune:1 name:&4Gigadrill lore:The_drill_that_&npierces|the_heavens + - 277 1 digspeed:3 name:Dwarf lore:Diggy|Diggy|Hole + - 298 1 color:255,255,255 name:Top_Hat lore:Good_day,_Good_day + - 279:780 1 + notch: + delay: 6000 + items: + - 397:3 1 player:Notch + color: + delay: 6000 + items: + - 387 1 title:&4Book_&9o_&6Colors author:KHobbits lore:Ingame_color_codes book:Colors + firework: + delay: 6000 + items: + - 401 1 name:Angry_Creeper color:red fade:green type:creeper power:1 + - 401 1 name:Starry_Night color:yellow,orange fade:blue type:star effect:trail,twinkle power:1 + - 401 2 name:Solar_Wind color:yellow,orange fade:red shape:large effect:twinkle color:yellow,orange fade:red shape:ball effect:trail color:red,purple fade:pink shape:star effect:trail power:1 diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 3e7209fa1..69c9fafed 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -106,6 +106,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient SpawnerProvider spawnerProvider; private transient SpawnEggProvider spawnEggProvider; private transient PotionMetaProvider potionMetaProvider; + private transient Kits kits; public Essentials() { } @@ -150,6 +151,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { confList = new ArrayList<>(); jails = new Jails(this); registerListeners(server.getPluginManager()); + kits = new Kits(this); } @Override @@ -193,6 +195,10 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { userMap = new UserMap(this); confList.add(userMap); execTimer.mark("Init(Usermap)"); + kits = new Kits(this); + confList.add(kits); + upgrade.convertKits(); + execTimer.mark("Kits"); upgrade.afterSettings(); execTimer.mark("Upgrade2"); warps = new Warps(getServer(), this.getDataFolder()); @@ -585,6 +591,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { return backup; } + @Override + public Kits getKits() { + return kits; + } + @Override public Metrics getMetrics() { return metrics; diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java index d645a35b7..8a6b8201b 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -12,6 +12,7 @@ import org.bukkit.BanList; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.configuration.ConfigurationSection; import java.io.*; import java.math.BigInteger; @@ -41,6 +42,34 @@ public class EssentialsUpgrade { doneFile.load(); } + public void convertKits() { + Kits kits = ess.getKits(); + EssentialsConf config = kits.getConfig(); + if (doneFile.getBoolean("kitsyml", false)) { + return; + } + + LOGGER.info("Attempting to convert old kits in config.yml to new kits.yml"); + + ConfigurationSection section = ess.getSettings().getKitSection(); + if (section == null) { + LOGGER.info("No kits found to migrate."); + return; + } + + Map legacyKits = ess.getSettings().getKitSection().getValues(true); + + for (Map.Entry entry : legacyKits.entrySet()) { + LOGGER.info("Converting " + entry.getKey()); + config.set("kits." + entry.getKey(), entry.getValue()); + } + + config.save(); + doneFile.setProperty("kitsyml", true); + doneFile.save(); + LOGGER.info("Done converting kits."); + } + private void moveMotdRulesToFile(String name) { if (doneFile.getBoolean("move" + name + "ToFile", false)) { return; diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java index f1ea0ca3a..31a31808e 100644 --- a/Essentials/src/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/IEssentials.java @@ -19,7 +19,6 @@ import java.util.Collection; import java.util.List; import java.util.UUID; - public interface IEssentials extends Plugin { void addReloadListener(IConf listener); @@ -62,6 +61,8 @@ public interface IEssentials extends Plugin { Backup getBackup(); + Kits getKits(); + Methods getPaymentMethod(); BukkitTask runTaskAsynchronously(Runnable run); diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 8f6a3eaae..9557960e9 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -58,12 +58,27 @@ public interface ISettings extends IConf { Set getMuteCommands(); - Map getKit(String name); - + /** + * @Deprecated in favor of {@link Kits#getKits()} + */ + @Deprecated ConfigurationSection getKits(); + /** + * @Deprecated in favor of {@link Kits#getKit(String)} + */ + @Deprecated + Map getKit(String kit); + + /** + * @Deprecated in favor of {@link Kits#addKit(String, List, long)}} + */ + @Deprecated void addKit(String name, List lines, long delay); + @Deprecated + ConfigurationSection getKitSection(); + boolean isSkippingUsedOneTimeKitsFromKitList(); String getLocale(); @@ -243,7 +258,7 @@ public interface ISettings extends IConf { boolean isLastMessageReplyRecipient(); BigDecimal getMinimumPayAmount(); - + long getLastMessageReplyRecipientTimeout(); boolean isMilkBucketEasterEggEnabled(); @@ -255,13 +270,13 @@ public interface ISettings extends IConf { boolean isSpawnOnJoin(); List getSpawnOnJoinGroups(); - + boolean isUserInSpawnOnJoinGroup(IUser user); boolean isTeleportToCenterLocation(); boolean isCommandCooldownsEnabled(); - + long getCommandCooldownMs(String label); Entry getCommandCooldownEntry(String label); @@ -273,11 +288,11 @@ public interface ISettings extends IConf { NumberFormat getCurrencyFormat(); List getUnprotectedSignNames(); - + boolean isPastebinCreateKit(); - + boolean isAllowBulkBuySell(); - + boolean isAddingPrefixInPlayerlist(); boolean isAddingSuffixInPlayerlist(); @@ -287,4 +302,4 @@ public interface ISettings extends IConf { int getMotdDelay(); boolean isDirectHatAllowed(); -} +} \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/Kit.java b/Essentials/src/com/earth2me/essentials/Kit.java index aac3323e5..4d5a71493 100644 --- a/Essentials/src/com/earth2me/essentials/Kit.java +++ b/Essentials/src/com/earth2me/essentials/Kit.java @@ -7,18 +7,15 @@ import com.earth2me.essentials.textreader.IText; import com.earth2me.essentials.textreader.KeywordReplacer; import com.earth2me.essentials.textreader.SimpleTextInput; import com.earth2me.essentials.utils.DateUtil; -import com.earth2me.essentials.utils.NumberUtil; import net.ess3.api.IEssentials; import org.bukkit.Bukkit; import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import java.math.BigDecimal; import java.util.*; import java.util.logging.Level; -import static com.earth2me.essentials.I18n.capitalCase; import static com.earth2me.essentials.I18n.tl; @@ -31,7 +28,7 @@ public class Kit { public Kit(final String kitName, final IEssentials ess) throws Exception { this.kitName = kitName; this.ess = ess; - this.kit = ess.getSettings().getKit(kitName); + this.kit = ess.getKits().getKit(kitName); this.charge = new Trade("kit-" + kitName, new Trade("kit-kit", ess), ess); if (kit == null) { @@ -39,40 +36,6 @@ public class Kit { } } - //TODO: Convert this to use one of the new text classes? - public static String listKits(final IEssentials ess, final User user) throws Exception { - try { - final ConfigurationSection kits = ess.getSettings().getKits(); - final StringBuilder list = new StringBuilder(); - for (String kitItem : kits.getKeys(false)) { - if (user == null) { - list.append(" ").append(capitalCase(kitItem)); - } else if (user.isAuthorized("essentials.kits." + kitItem.toLowerCase(Locale.ENGLISH))) { - String cost = ""; - String name = capitalCase(kitItem); - BigDecimal costPrice = new Trade("kit-" + kitItem.toLowerCase(Locale.ENGLISH), ess).getCommandCost(user); - if (costPrice.signum() > 0) { - cost = tl("kitCost", NumberUtil.displayCurrency(costPrice, ess)); - } - - Kit kit = new Kit(kitItem, ess); - double nextUse = kit.getNextUse(user); - if (nextUse == -1 && ess.getSettings().isSkippingUsedOneTimeKitsFromKitList()) { - continue; - } else if (nextUse != 0) { - name = tl("kitDelay", name); - } - - list.append(" ").append(name).append(cost); - } - } - return list.toString().trim(); - } catch (Exception ex) { - throw new Exception(tl("kitError"), ex); - } - - } - public String getName() { return kitName; } diff --git a/Essentials/src/com/earth2me/essentials/Kits.java b/Essentials/src/com/earth2me/essentials/Kits.java new file mode 100644 index 000000000..de38fb4d5 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/Kits.java @@ -0,0 +1,114 @@ +package com.earth2me.essentials; + +import com.earth2me.essentials.utils.NumberUtil; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.MemoryConfiguration; + +import java.io.File; +import java.math.BigDecimal; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.earth2me.essentials.I18n.capitalCase; +import static com.earth2me.essentials.I18n.tl; + +public class Kits implements IConf { + + private final EssentialsConf config; + private ConfigurationSection kits; + + public Kits(final IEssentials essentials) { + config = new EssentialsConf(new File(essentials.getDataFolder(), "kits.yml")); + config.setTemplateName("/kits.yml"); + config.load(); + + kits = _getKits(); + } + + @Override + public void reloadConfig() { + kits = _getKits(); + } + + private ConfigurationSection _getKits() { + if (config.isConfigurationSection("kits")) { + final ConfigurationSection section = config.getConfigurationSection("kits"); + final ConfigurationSection newSection = new MemoryConfiguration(); + for (String kitItem : section.getKeys(false)) { + if (section.isConfigurationSection(kitItem)) { + newSection.set(kitItem.toLowerCase(Locale.ENGLISH), section.getConfigurationSection(kitItem)); + } + } + return newSection; + } + return null; + } + + public EssentialsConf getConfig() { + return config; + } + + public ConfigurationSection getKits() { + return kits; + } + + public Map getKit(String name) { + name = name.replace('.', '_').replace('/', '_'); + if (getKits() != null) { + final ConfigurationSection kits = getKits(); + // For some reason, YAML doesn't sees keys as always lowercase even if they aren't defined like that. + // Workaround is to toLowercase when getting from the config, but showing normally elsewhere. + // ODDLY ENOUGH when you get the configuration section for ALL kits, it will return the proper + // case of each kit. But when you check for each kit's configuration section, it won't return the kit + // you just found if you don't toLowercase it. + if (kits.isConfigurationSection(name.toLowerCase())) { + return kits.getConfigurationSection(name.toLowerCase()).getValues(true); + } else { + } + } + + return null; + } + + public void addKit(String name, List lines, long delay) { + // Will overwrite but w/e + config.set("kits." + name + ".delay", delay); + config.set("kits." + name + ".items", lines); + kits = _getKits(); + config.save(); + } + + public String listKits(final net.ess3.api.IEssentials ess, final User user) throws Exception { + try { + final ConfigurationSection kits = config.getConfigurationSection("kits"); + final StringBuilder list = new StringBuilder(); + for (String kitItem : kits.getKeys(false)) { + if (user == null) { + list.append(" ").append(capitalCase(kitItem)); + } else if (user.isAuthorized("essentials.kits." + kitItem.toLowerCase(Locale.ENGLISH))) { + String cost = ""; + String name = capitalCase(kitItem); + BigDecimal costPrice = new Trade("kit-" + kitItem.toLowerCase(Locale.ENGLISH), ess).getCommandCost(user); + if (costPrice.signum() > 0) { + cost = tl("kitCost", NumberUtil.displayCurrency(costPrice, ess)); + } + + Kit kit = new Kit(kitItem, ess); + double nextUse = kit.getNextUse(user); + if (nextUse == -1 && ess.getSettings().isSkippingUsedOneTimeKitsFromKitList()) { + continue; + } else if (nextUse != 0) { + name = tl("kitDelay", name); + } + + list.append(" ").append(name).append(cost); + } + } + return list.toString().trim(); + } catch (Exception ex) { + throw new Exception(tl("kitError"), ex); + } + + } +} diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index d924653d6..a91f88429 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -325,46 +325,24 @@ public class Settings implements net.ess3.api.ISettings { return config.getDouble("heal-cooldown", 0); } - private ConfigurationSection kits; - - private ConfigurationSection _getKits() { - if (config.isConfigurationSection("kits")) { - final ConfigurationSection section = config.getConfigurationSection("kits"); - final ConfigurationSection newSection = new MemoryConfiguration(); - for (String kitItem : section.getKeys(false)) { - if (section.isConfigurationSection(kitItem)) { - newSection.set(kitItem.toLowerCase(Locale.ENGLISH), section.getConfigurationSection(kitItem)); - } - } - return newSection; - } - return null; - } - @Override public ConfigurationSection getKits() { - return kits; + return ess.getKits().getKits(); } @Override public Map getKit(String name) { - name = name.replace('.', '_').replace('/', '_'); - if (getKits() != null) { - final ConfigurationSection kits = getKits(); - if (kits.isConfigurationSection(name)) { - return kits.getConfigurationSection(name).getValues(true); - } - } - return null; + return ess.getKits().getKit(name); } @Override public void addKit(String name, List lines, long delay) { - // Will overwrite but w/e - config.set("kits." + name + ".delay", delay); - config.set("kits." + name + ".items", lines); - kits = _getKits(); - config.save(); + ess.getKits().addKit(name, lines, delay); + } + + @Override + public ConfigurationSection getKitSection() { + return config.getConfigurationSection("kits"); } @Override @@ -516,7 +494,6 @@ public class Settings implements net.ess3.api.ISettings { itemSpawnBl = _getItemSpawnBlacklist(); loginAttackDelay = _getLoginAttackDelay(); signUsePerSecond = _getSignUsePerSecond(); - kits = _getKits(); chatFormats.clear(); changeDisplayName = _changeDisplayName(); disabledCommands = getDisabledCommands(); @@ -1202,7 +1179,7 @@ public class Settings implements net.ess3.api.ISettings { public boolean isSpawnOnJoin() { return !this.spawnOnJoinGroups.isEmpty(); } - + private List spawnOnJoinGroups; public List _getSpawnOnJoinGroups() { @@ -1241,7 +1218,7 @@ public class Settings implements net.ess3.api.ISettings { public boolean isTeleportToCenterLocation() { return config.getBoolean("teleport-to-center", true); } - + private Map commandCooldowns; private Map _getCommandCooldowns() { @@ -1268,10 +1245,10 @@ public class Settings implements net.ess3.api.ISettings { cmdEntry = cmdEntry.substring(1); } String cmd = cmdEntry - .replaceAll("\\*", ".*"); // Wildcards are accepted as asterisk * as known universally. + .replaceAll("\\*", ".*"); // Wildcards are accepted as asterisk * as known universally. pattern = Pattern.compile(cmd + "( .*)?"); // This matches arguments, if present, to "ignore" them from the feature. } - + /* ================================ * >> Process cooldown value * ================================ */ @@ -1439,4 +1416,4 @@ public class Settings implements net.ess3.api.ISettings { public boolean isDirectHatAllowed() { return config.getBoolean("allow-direct-hat", true); } -} +} \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java b/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java index 6318eb31f..c0b103ff2 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java @@ -72,7 +72,7 @@ public class Commandcreatekit extends EssentialsCommand { } // Some users might want to directly write to config knowing the consequences. *shrug* if (!ess.getSettings().isPastebinCreateKit()) { - ess.getSettings().addKit(kitname, list, delay); + ess.getKits().addKit(kitname, list, delay); user.sendMessage(tl("createdKit", kitname, list.size(), delay)); } else { ConfigurationSection config = new MemoryConfiguration(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java index a46518d21..5779deff7 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java @@ -23,7 +23,7 @@ public class Commandkit extends EssentialsCommand { @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { - final String kitList = Kit.listKits(ess, user); + final String kitList = ess.getKits().listKits(ess, user); user.sendMessage(kitList.length() > 0 ? tl("kits", kitList) : tl("noKits")); throw new NoChargeException(); } else if (args.length > 1 && user.isAuthorized("essentials.kit.others")) { @@ -39,7 +39,7 @@ public class Commandkit extends EssentialsCommand { @Override public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 2) { - final String kitList = Kit.listKits(ess, null); + final String kitList = ess.getKits().listKits(ess, null); sender.sendMessage(kitList.length() > 0 ? tl("kits", kitList) : tl("noKits")); throw new NoChargeException(); } else { @@ -106,7 +106,7 @@ public class Commandkit extends EssentialsCommand { if (args.length == 1) { List options = new ArrayList<>(); // TODO: Move all of this to its own method - for (String kitName : ess.getSettings().getKits().getKeys(false)) { + for (String kitName : ess.getKits().getKits().getKeys(false)) { if (!user.isAuthorized("essentials.kits." + kitName)) { // Only check perm, not time or money continue; } @@ -123,7 +123,7 @@ public class Commandkit extends EssentialsCommand { @Override protected List getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { if (args.length == 1) { - return new ArrayList<>(ess.getSettings().getKits().getKeys(false)); // TODO: Move this to its own method + return new ArrayList<>(ess.getKits().getKits().getKeys(false)); // TODO: Move this to its own method } else if (args.length == 2) { return getPlayers(server, sender); } else { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandshowkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandshowkit.java index 24e28ae68..b280b02df 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandshowkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandshowkit.java @@ -2,7 +2,6 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.Kit; import com.earth2me.essentials.User; -import com.earth2me.essentials.Settings; import org.bukkit.Server; import java.util.ArrayList; @@ -37,7 +36,7 @@ public class Commandshowkit extends EssentialsCommand { @Override protected List getTabCompleteOptions(final Server server, final User user, final String commandLabel, final String[] args) { if (args.length == 1) { - return new ArrayList<>(ess.getSettings().getKits().getKeys(false)); // TODO: Move this to its own method + return new ArrayList<>(ess.getKits().getKits().getKeys(false)); // TODO: Move this to its own method } else { return Collections.emptyList(); } diff --git a/Essentials/src/com/earth2me/essentials/signs/SignKit.java b/Essentials/src/com/earth2me/essentials/signs/SignKit.java index d47110d97..a9e569283 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignKit.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignKit.java @@ -28,7 +28,7 @@ public class SignKit extends EssentialsSign { return false; } else { try { - ess.getSettings().getKit(kitName); + ess.getKits().getKit(kitName); } catch (Exception ex) { throw new SignException(ex.getMessage(), ex); } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 860d364e8..c7223c195 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -15,6 +15,8 @@ # Version ${project.version}-b${build.number} +# KITS ARE NOW IN THE kits.yml FILE + ############################################################ # +------------------------------------------------------+ # # | Essentials (Global) | # @@ -279,42 +281,11 @@ player-commands: # removed from the /kit list when a player can no longer use it skip-used-one-time-kits-from-kit-list: false -# Note: All items MUST be followed by a quantity! -# All kit names should be lower case, and will be treated as lower in permissions/costs. -# Syntax: - itemID[:DataValue/Durability] Amount [Enchantment:Level].. [itemmeta:value]... -# For Item Meta information visit http://wiki.ess3.net/wiki/Item_Meta -# 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. -# Set delay to -1 for a one time kit. -# For more information, visit http://wiki.ess3.net/wiki/Kits -kits: - tools: - delay: 10 - items: - - 272 1 - - 273 1 - - 274 1 - - 275 1 - dtools: - delay: 600 - items: - - 278 1 efficiency:1 durability:1 fortune:1 name:&4Gigadrill lore:The_drill_that_&npierces|the_heavens - - 277 1 digspeed:3 name:Dwarf lore:Diggy|Diggy|Hole - - 298 1 color:255,255,255 name:Top_Hat lore:Good_day,_Good_day - - 279:780 1 - notch: - delay: 6000 - items: - - 397:3 1 player:Notch - color: - delay: 6000 - items: - - 387 1 title:&4Book_&9o_&6Colors author:KHobbits lore:Ingame_color_codes book:Colors - firework: - delay: 6000 - items: - - 401 1 name:Angry_Creeper color:red fade:green type:creeper power:1 - - 401 1 name:Starry_Night color:yellow,orange fade:blue type:star effect:trail,twinkle power:1 - - 401 2 name:Solar_Wind color:yellow,orange fade:red shape:large effect:twinkle color:yellow,orange fade:red shape:ball effect:trail color:red,purple fade:pink shape:star effect:trail power:1 +# Determines the functionality of the /createkit command. +# If this is true, /createkit will give the user a link with the kit code. +# If this is false, /createkit will add the kit to the kits.yml config file directly. +# +pastebin-createkit: false # Essentials Sign Control # See http://wiki.ess3.net/wiki/Sign_Tutorial for instructions on how to use these. @@ -537,13 +508,6 @@ command-cooldown-persistence: true # NPC balances can include features like factions from FactionsUUID plugin. npcs-in-balance-ranking: false -# Determines the functionality of the /createkit command. -# If this is true, /createkit will give the user a link with the kit code. -# If this is false, /createkit will add the kit to this config file directly. -# -# WARNING: If this is false, the config comments WILL be removed and it won't look the same as it does now. -pastebin-createkit: true - # Allow bulk buying and selling signs when the player is sneaking. # This is useful when a sign sells or buys one item at a time and the player wants to sell a bunch at once. allow-bulk-buy-sell: true diff --git a/Essentials/src/kits.yml b/Essentials/src/kits.yml new file mode 100644 index 000000000..47c44cb3f --- /dev/null +++ b/Essentials/src/kits.yml @@ -0,0 +1,39 @@ +# EssentialsX new Kit configuration. +# If you don't have any kits defined in this file, the plugin will try to copy them from the config.yml + +# Note: All items MUST be followed by a quantity! +# All kit names should be lower case, and will be treated as lower in permissions/costs. +# Syntax: - itemID[:DataValue/Durability] Amount [Enchantment:Level].. [itemmeta:value]... +# For Item Meta information visit http://wiki.ess3.net/wiki/Item_Meta +# 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. +# Set delay to -1 for a one time kit. +# For more information, visit http://wiki.ess3.net/wiki/Kits +kits: + tools: + delay: 10 + items: + - 272 1 + - 273 1 + - 274 1 + - 275 1 + dtools: + delay: 600 + items: + - 278 1 efficiency:1 durability:1 fortune:1 name:&4Gigadrill lore:The_drill_that_&npierces|the_heavens + - 277 1 digspeed:3 name:Dwarf lore:Diggy|Diggy|Hole + - 298 1 color:255,255,255 name:Top_Hat lore:Good_day,_Good_day + - 279:780 1 + notch: + delay: 6000 + items: + - 397:3 1 player:Notch + color: + delay: 6000 + items: + - 387 1 title:&4Book_&9o_&6Colors author:KHobbits lore:Ingame_color_codes book:Colors + firework: + delay: 6000 + items: + - 401 1 name:Angry_Creeper color:red fade:green type:creeper power:1 + - 401 1 name:Starry_Night color:yellow,orange fade:blue type:star effect:trail,twinkle power:1 + - 401 2 name:Solar_Wind color:yellow,orange fade:red shape:large effect:twinkle color:yellow,orange fade:red shape:ball effect:trail color:red,purple fade:pink shape:star effect:trail power:1 From 377c716d5231ab693f24b8c2ee72ec90f62eca4c Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Thu, 18 Jan 2018 00:25:19 -0800 Subject: [PATCH 004/333] Add itemflag support to kits. Resolves #795. Syntax is "itemflags:HIDE_ATTRIBUTES,HIDE_ENCHANTS" --- .../src/com/earth2me/essentials/ItemDb.java | 20 +++++++++++--- .../earth2me/essentials/MetaItemStack.java | 27 +++++++++++++++++++ Essentials/src/messages.properties | 1 + Essentials/src/messages_cs.properties | 1 + Essentials/src/messages_da.properties | 1 + Essentials/src/messages_de.properties | 1 + Essentials/src/messages_en.properties | 1 + Essentials/src/messages_es.properties | 1 + Essentials/src/messages_et.properties | 1 + Essentials/src/messages_fi.properties | 1 + Essentials/src/messages_fr.properties | 1 + Essentials/src/messages_hu.properties | 1 + Essentials/src/messages_it.properties | 1 + Essentials/src/messages_ko.properties | 1 + Essentials/src/messages_lt.properties | 1 + Essentials/src/messages_nl.properties | 1 + Essentials/src/messages_pl.properties | 1 + Essentials/src/messages_pt.properties | 1 + Essentials/src/messages_pt_BR.properties | 1 + Essentials/src/messages_ro.properties | 1 + Essentials/src/messages_ru.properties | 1 + Essentials/src/messages_sv.properties | 1 + Essentials/src/messages_tr.properties | 1 + Essentials/src/messages_zh.properties | 1 + Essentials/src/messages_zh_HK.properties | 1 + Essentials/src/messages_zh_TW.properties | 1 + 26 files changed, 67 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 73d4e1024..0ddaa4f8a 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -1,11 +1,9 @@ package com.earth2me.essentials; import com.earth2me.essentials.utils.NumberUtil; - -import net.ess3.nms.refl.ReflUtil; -import net.ess3.nms.updatedmeta.BasePotionDataProvider; import com.earth2me.essentials.utils.StringUtil; import net.ess3.api.IEssentials; +import net.ess3.nms.refl.ReflUtil; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.Color; @@ -14,6 +12,7 @@ import org.bukkit.Material; import org.bukkit.block.Banner; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.*; import org.bukkit.potion.Potion; @@ -197,7 +196,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { } retval = ess.getSpawnEggProvider().createEggItem(type); } else if (mat.name().endsWith("POTION") - && ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_11_R1)) { // Only apply this to pre-1.11 as items.csv might only work in 1.11 + && ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_11_R1)) { // Only apply this to pre-1.11 as items.csv might only work in 1.11 retval = ess.getPotionMetaProvider().createPotionItem(mat, metaData); } else { retval.setDurability(metaData); @@ -308,6 +307,19 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { sb.append(e.getName().toLowerCase()).append(":").append(meta.getEnchantLevel(e)).append(" "); } } + + Set flags = meta.getItemFlags(); + if (flags != null) { + sb.append("itemflags:"); + boolean first = true; + for (ItemFlag flag : flags) { + if (!first) { + sb.append(","); + } + sb.append(flag.name()); + first = false; + } + } } switch (is.getType()) { diff --git a/Essentials/src/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/com/earth2me/essentials/MetaItemStack.java index 7db019e7e..7daf11656 100644 --- a/Essentials/src/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/com/earth2me/essentials/MetaItemStack.java @@ -17,6 +17,7 @@ import org.bukkit.Material; import org.bukkit.block.Banner; import org.bukkit.block.banner.PatternType; import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.*; import org.bukkit.potion.Potion; @@ -216,6 +217,8 @@ public class MetaItemStack { final FireworkMeta meta = (FireworkMeta) stack.getItemMeta(); meta.setPower(power > 3 ? 4 : power); stack.setItemMeta(meta); + } else if (split.length > 1 && split[0].equalsIgnoreCase("itemflags") && hasMetaPermission(sender, "itemflags", false, true, ess)) { + addItemFlags(string); } else if (stack.getType() == Material.FIREWORK) {//WARNING - Meta for fireworks will be ignored after this point. addFireworkMeta(sender, false, string, ess); } else if (isPotion(stack.getType())) { //WARNING - Meta for potions will be ignored after this point. @@ -253,6 +256,30 @@ public class MetaItemStack { } } + public void addItemFlags(final String string) throws Exception { + String[] separate = splitPattern.split(string, 2); + if(separate.length != 2) { + throw new Exception(tl("invalidItemFlagMeta", string)); + } + + String[] split = separate[1].split(","); + ItemMeta meta = stack.getItemMeta(); + + for (String s : split) { + for (ItemFlag flag : ItemFlag.values()) { + if (s.equalsIgnoreCase(flag.name())) { + meta.addItemFlags(flag); + } + } + } + + if (meta.getItemFlags().isEmpty()) { + throw new Exception(tl("invalidItemFlagMeta", string)); + } + + stack.setItemMeta(meta); + } + public void addFireworkMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception { if (stack.getType() == Material.FIREWORK) { final String[] split = splitPattern.split(string, 2); diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 44cf4af57..a171a961a 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Invalid charge. invalidFireworkFormat=\u00a74The option \u00a7c{0} \u00a74is not a valid value for \u00a7c{1}\u00a74. invalidHome=\u00a74Home\u00a7c {0} \u00a74doesn''t exist\! invalidHomeName=\u00a74Invalid home name\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Invalid mob type. invalidNumber=Invalid Number. invalidPotion=\u00a74Invalid Potion. diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index d93f2e8db..69dd7d225 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Neplatny poplatek. invalidFireworkFormat=\u00a74Nastaveni \u00a7c{0} \u00a74neni platna hodnota pro \u00a7c{1}\u00a74. invalidHome=\u00a74Domov\u00a7c {0} \u00a74neexistuje\! invalidHomeName=\u00a74Spatny nazev domova\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Neplatny druh moba\! invalidNumber=Neplatne cislo. invalidPotion=\u00a74Spatny lektvar. diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 4c8087356..d6a375e5c 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Ugyldig ladning. invalidFireworkFormat=\u00a74Muligheden \u00a7c{0} \u00a74er ikke en gyldig v\u00e6rdi til \u00a7c{1}\u00a74. invalidHome=\u00a74Hjemmet\u00a7c {0} \u00a74eksisterer ikke\! invalidHomeName=\u00a74Ugyldigt navn til dit hjem. +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Ugyldig mob type. invalidNumber=Ugyldigt nummer. invalidPotion=\u00a74Ugyldig eliksir. diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index a217bd958..e90557330 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Ung\u00fcltige Kosten. invalidFireworkFormat=\u00a76Die Option \u00a74{0} \u00a76ist kein g\u00fcltiger Wert f\u00fcr \u00a74{1}\u00a76. invalidHome=\u00a74Zuhause\u00a7c {0} \u00a74existiert nicht\! invalidHomeName=\u00a74Ung\u00fcltiger Name\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Unbekannter Mob-Typ. invalidNumber=Ung\u00fcltige Nummer. invalidPotion=\u00a74Ung\u00fcltiger Trank. diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index ffe277d0b..c83bcb499 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Invalid charge. invalidFireworkFormat=\u00a74The option \u00a7c{0} \u00a74is not a valid value for \u00a7c{1}\u00a74. invalidHome=\u00a74Home\u00a7c {0} \u00a74doesn''t exist\! invalidHomeName=\u00a74Invalid home name\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Invalid mob type. invalidNumber=Invalid Number. invalidPotion=\u00a74Invalid Potion. diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index bbd04f55f..7c1b39623 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Carga no v\u00e1lida. invalidFireworkFormat=\u00a74La opci\u00f3n \u00a7c{0} \u00a74no es un valor v\u00e1lido para \u00a7c{1}\u00a74. invalidHome=\u00a74\u00a1El hogar\u00a7c {0} \u00a74no existe\! invalidHomeName=\u00a74\u00a1Nombre de hogar inv\u00e1lido\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Tipo de mob inv\u00e1lido. invalidNumber=N\u00famero inv\u00e1lido. invalidPotion=\u00a74Poci\u00f3n inv\u00e1lida. diff --git a/Essentials/src/messages_et.properties b/Essentials/src/messages_et.properties index ae8aecefd..a26fe15e6 100644 --- a/Essentials/src/messages_et.properties +++ b/Essentials/src/messages_et.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Vigane tasu. invalidFireworkFormat=\u00a74Valik \u00a7c{0} \u00a74ei ole sobiv v\u00e4\u00e4rtus \u00a7c{1}\u00a74 jaoks. invalidHome=\u00a74Kodu\u00a7c {0} \u00a74ei ole m\u00e4\u00e4ratud\! invalidHomeName=\u00a74Vigane kodu nimi\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Kehtetu eluka liik. invalidNumber=Vigane Number. invalidPotion=\u00a74Vigane n\u00f5iajook. diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index a67e8725d..bcded0d1b 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a7cMit\u00e4t\u00f6n m\u00e4\u00e4r\u00e4ys. invalidFireworkFormat=\u00a74The option \u00a7c{0} \u00a74is not a valid value for \u00a7c{1}\u00a74. invalidHome=Kotia {0} ei ole olemassa invalidHomeName=\u00a74Invalid home name\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Invalid mob type. invalidNumber=Virheellinen numero. invalidPotion=\u00a74Invalid Potion. diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index d614612fa..5fa44822f 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a7cCharge invalide. invalidFireworkFormat=\u00a74L''option \u00a7c{0} \u00a74n''est pas une valeur valide pour \u00a7c{1}\u00a74. invalidHome=La r\u00e9sidence {0} n''existe pas invalidHomeName=\u00a74Nom de r\u00e9sindence invalide. +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Type de mob invalide. invalidNumber=\u00a74Nombre invalide. invalidPotion=\u00a74Potion invalide. diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 319cbd961..8c6b497f8 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Invalid charge. invalidFireworkFormat=\u00a76Ez az opci\u00f3\: \u00a74{0} \u00a76nem \u00e9rv\u00e9nyes \u00a74{1}\u00a76-ra/re. invalidHome=\u00a74Home\u00a7c {0} \u00a74doesn''t exist\! invalidHomeName=\u00a74Invalid home name\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Hat\u00e1rozatlan mob t\u00edpus invalidNumber=Invalid Number. invalidPotion=\u00a74Invalid Potion. diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index 0efd5ac90..b5d823fc9 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a7cCosto non corretto. invalidFireworkFormat=\u00a74L''opzione \u00a7c{0} \u00a74non \u00e8 un valore valido per \u00a7c{1}\u00a74. invalidHome=La casa {0} non esiste\! invalidHomeName=\u00a74Nome casa non valido\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Tipo mob non valido. invalidNumber=Numero non valido. invalidPotion=\u00a74Pozione non valida. diff --git a/Essentials/src/messages_ko.properties b/Essentials/src/messages_ko.properties index c47dca5d5..a98afc1d7 100644 --- a/Essentials/src/messages_ko.properties +++ b/Essentials/src/messages_ko.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Invalid charge. invalidFireworkFormat=\u00a7c{0} \u00a74\uc635\uc158\uc740 \u00a7c{1} \u00a74\ub77c\ub294 \uac12\uc774 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. invalidHome=\u00a7c{0}\u00a74 \uc9d1\uc774 \uc874\uc7ac\ud558\uc9c0\uc54a\uc2b5\ub2c8\ub2e4\! invalidHomeName=\u00a74\uc9d1 \uc774\ub984\uc774 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74\uc798\ubabb\ub41c \ubab9 \ud0c0\uc785\uc785\ub2c8\ub2e4. invalidNumber=\uc798\ubabb\ub41c \uc22b\uc790\uc785\ub2c8\ub2e4. invalidPotion=\u00a74\uc798\ubabb\ub41c \ud3ec\uc158. diff --git a/Essentials/src/messages_lt.properties b/Essentials/src/messages_lt.properties index 34cc36c32..60e03aeea 100644 --- a/Essentials/src/messages_lt.properties +++ b/Essentials/src/messages_lt.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Invalid charge. invalidFireworkFormat=\u00a74Pasirinkimas \u00a7c{0} \u00a74n\u0117ra galimas \u00a7c{1}\u00a74. invalidHome=\u00a74Namas\u00a7c {0} \u00a74neegzistuoja\! invalidHomeName=\u00a74Neteisingas namo pavadinimas\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=Neteisingas tipas. invalidNumber=Invalid Number. invalidPotion=\u00a74Invalid Potion. diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index f07027cee..141398274 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a7cOngeldige prijs. invalidFireworkFormat=\u00a74De optie \u00a7c{0} \u00a74is geen geldige waarde \u00a7c{1}\u00a74.\n invalidHome=Home {0} Bestaat niet. invalidHomeName=\u00a74Ongeldige home naam. +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Ongeldig mob type. invalidNumber=Ongeldig Nummer. invalidPotion=\u00a74Ongeldige Toverdrank. diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index 0f36263dd..1c0ea41ef 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Nieprawid\u0142owa op\u0142ata. invalidFireworkFormat=\u00a76Opcja \u00a74{0} \u00a76nie jest prawid\u0142ow\u0105 warto\u015bci\u0105 dla \u00a74{1}\u00a76. invalidHome=\u00a74Dom\u00a7c {0} \u00a74nie istnieje. invalidHomeName=\u00a74Niepoprawna nazwa domu. +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74Niepoprawny typ moba. invalidNumber=Niepoprawna liczba. invalidPotion=\u00a74Niepoprawna mikstura. diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index c2c6ead7e..8f28df2fe 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -191,6 +191,7 @@ invalidCharge=\u00A74Argumento inv\u00E1lido. invalidFireworkFormat=\u00A74A op\u00E7\u00E3o \u00A7c{0} \u00A74n\u00E3o \u00E9 v\u00E1lida para \u00A7c{1}\u00A74. invalidHome=\u00A74A casa\u00A7c {0} \u00A74n\u00E3o existe! invalidHomeName=\u00A74Nome de casa inv\u00E1lido! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00A74Tipo de mob inv\u00E1lido. invalidNumber=Numero inv\u00E1lido. invalidPotion=\u00A74Po\u00E7\u00E3o inv\u00E1lida. diff --git a/Essentials/src/messages_pt_BR.properties b/Essentials/src/messages_pt_BR.properties index c6d52b17a..63bab3b7c 100644 --- a/Essentials/src/messages_pt_BR.properties +++ b/Essentials/src/messages_pt_BR.properties @@ -191,6 +191,7 @@ invalidCharge=\u00A74Argumento inv\u00E1lido. invalidFireworkFormat=\u00A74A op\u00E7\u00E3o \u00A7c{0} \u00A74n\u00E3o \u00E9 v\u00E1lida para \u00A7c{1}\u00A74. invalidHome=\u00A74Casa\u00A7c {0} \u00A74n\u00E3o existe\! invalidHomeName=\u00A74Nome de casa inv\u00E1lido\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00A74Tipo de mob inv\u00E1lido. invalidNumber=Numero inv\u00E1lido. invalidPotion=\u00A74Po\u00E7\u00E3o inv\u00E1lida. diff --git a/Essentials/src/messages_ro.properties b/Essentials/src/messages_ro.properties index 31bb44d49..f94096a7c 100644 --- a/Essentials/src/messages_ro.properties +++ b/Essentials/src/messages_ro.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74Incarcare invalida. invalidFireworkFormat=\u00a74The option \u00a7c{0} \u00a74is not a valid value for \u00a7c{1}\u00a74. invalidHome=\u00a74Casa\u00a7c {0} \u00a74nu exista\! invalidHomeName=\u00a74Numele casei este invalida\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=Tip de mob invalid. invalidNumber=Numar invalid. invalidPotion=\u00a74Potiune invalida. diff --git a/Essentials/src/messages_ru.properties b/Essentials/src/messages_ru.properties index 655de0172..69adb2cc1 100644 --- a/Essentials/src/messages_ru.properties +++ b/Essentials/src/messages_ru.properties @@ -192,6 +192,7 @@ invalidFireworkFormat=\u00a74\u041e\u043f\u0446\u0438\u044f \u00a7c{0} \u00a74\u invalidHome=\u00a74\u0414\u043e\u043c\u0430\u00a7c {0} \u00a74\u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\! invalidHomeName=\u00a74\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043c\u0430\! invalidMob=\u00a74\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u043c\u043e\u0431\u0430. +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidNumber=\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. invalidPotion=\u00a74\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0437\u0435\u043b\u044c\u0435. invalidPotionMeta=\u00a74\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0435\u043b\u044c\u044f\: \u00a7c{0}\u00a74. diff --git a/Essentials/src/messages_sv.properties b/Essentials/src/messages_sv.properties index 4453e791b..d9fe382cd 100644 --- a/Essentials/src/messages_sv.properties +++ b/Essentials/src/messages_sv.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a7cOgiltig laddning. invalidFireworkFormat=\u00a74V\u00e4rdet \u00a7c{0} \u00a74\u00e4r inte ett korrekt v\u00e4rde f\u00f6r \u00a7c{1}\u00a74. invalidHome=Hemmet {0} finns inte invalidHomeName=\u00a74Ogiltigt hemnamn +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=Ogiltigt mob invalidNumber=Felaktigt nummer. invalidPotion=\u00a74Ogiltig brygd. diff --git a/Essentials/src/messages_tr.properties b/Essentials/src/messages_tr.properties index cca488637..a63753c6d 100644 --- a/Essentials/src/messages_tr.properties +++ b/Essentials/src/messages_tr.properties @@ -192,6 +192,7 @@ invalidFireworkFormat=\u00a74Gecersiz Havaifisek Formati\! invalidHome=\u00a7c {0} \u00a76adli Bir Eviniz Yok\! invalidHomeName=\u00a7cUygun Olmayan Ev Ismi\! invalidMob=\u00a74Bilinmeyen Yaratik T\u00fcr\u00fc. +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidNumber=Gecersiz Numara. invalidPotion=\u00a74Gecersiz Iksir. invalidPotionMeta=\u00a74Gecersiz Iksir Turu \u00a7c{0}\u00a74.\n diff --git a/Essentials/src/messages_zh.properties b/Essentials/src/messages_zh.properties index 2f4c4e44a..8bf9cc77f 100644 --- a/Essentials/src/messages_zh.properties +++ b/Essentials/src/messages_zh.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74\u65e0\u6548\u7684\u4ef7\u683c invalidFireworkFormat=\u00a74\u8fd9\u4e2a\u9009\u9879 \u00a7c{0} \u00a74\u5bf9 \u00a7c{1}\u00a74 \u4e0d\u662f\u4e00\u4e2a\u6709\u6548\u7684\u503c\u00a74. invalidHome=\u00a74\u5bb6\u00a7c {0} \u00a74\u4e0d\u5b58\u5728\! invalidHomeName=\u00a74\u65e0\u6548\u7684\u5bb6\u540d\u79f0\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74\u65e0\u6548\u7684\u602a\u7269\u7c7b\u578b. invalidNumber=\u65e0\u6548\u7684\u6570\u5b57. invalidPotion=\u00a74\u65e0\u6548\u7684\u836f\u6c34. diff --git a/Essentials/src/messages_zh_HK.properties b/Essentials/src/messages_zh_HK.properties index 71bb46b2a..72bded31f 100644 --- a/Essentials/src/messages_zh_HK.properties +++ b/Essentials/src/messages_zh_HK.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74\u7121\u6548\u7684\u50f9\u683c invalidFireworkFormat=\u00a74The option \u00a7c{0} \u00a74is not a valid value for \u00a7c{1}\u00a74. invalidHome=\u00a74\u5bb6\u00a7c {0} \u00a74\u4e0d\u5b58\u5728\! invalidHomeName=\u00a74\u7121\u6548\u7684\u5bb6\u540d\u7a31\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74\u7121\u6548\u751f\u7269\u985e\u578b invalidNumber=\u7121\u6548\u7684\u6578\u5b57. invalidPotion=\u00a74\u7121\u6548\u7684\u85e5\u6c34. diff --git a/Essentials/src/messages_zh_TW.properties b/Essentials/src/messages_zh_TW.properties index 6f38c983c..20fb03273 100644 --- a/Essentials/src/messages_zh_TW.properties +++ b/Essentials/src/messages_zh_TW.properties @@ -191,6 +191,7 @@ invalidCharge=\u00a74\u7121\u6548\u7684\u50f9\u683c invalidFireworkFormat=\u00a74The option \u00a7c{0} \u00a74is not a valid value for \u00a7c{1}\u00a74. invalidHome=\u00a74\u5bb6\u00a7c {0} \u00a74\u4e0d\u5b58\u5728\! invalidHomeName=\u00a74\u7121\u6548\u7684\u5bb6\u540d\u7a31\! +invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. invalidMob=\u00a74\u7121\u6548\u751f\u7269\u985e\u578b invalidNumber=\u7121\u6548\u7684\u6578\u5b57. invalidPotion=\u00a74\u7121\u6548\u7684\u85e5\u6c34. From d4138ce8431877dc69ed1b534fd37d5768fbf953 Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Thu, 18 Jan 2018 10:34:02 -0800 Subject: [PATCH 005/333] Match default to what's in the config. Resolves #1775 --- Essentials/src/com/earth2me/essentials/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index a91f88429..67e6b0a8a 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1384,7 +1384,7 @@ public class Settings implements net.ess3.api.ISettings { @Override public boolean isPastebinCreateKit() { - return config.getBoolean("pastebin-createkit", true); + return config.getBoolean("pastebin-createkit", false); } @Override From ace361af60a6dc373d9850cec8f93ed56a2f8773 Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Thu, 18 Jan 2018 17:52:44 -0800 Subject: [PATCH 006/333] Compile against 1.13 preview. Still a lot of work to do. One thing to note is that I used LEGACY materials in a few spots where I didn't know what the new ones are as I'm not very familiar with the 1.13 update and what it changes. --- .../essentials/EssentialsPlayerListener.java | 2 +- .../src/com/earth2me/essentials/ItemDb.java | 27 ++- .../earth2me/essentials/MetaItemStack.java | 20 +- .../src/com/earth2me/essentials/MobData.java | 10 +- .../earth2me/essentials/OfflinePlayer.java | 24 +-- .../src/com/earth2me/essentials/Potions.java | 4 +- .../src/com/earth2me/essentials/SpawnMob.java | 16 +- .../com/earth2me/essentials/api/Economy.java | 4 +- .../essentials/commands/Commandbook.java | 4 +- .../commands/Commandclearinventory.java | 14 +- .../essentials/commands/Commandfirework.java | 4 +- .../essentials/commands/Commandhat.java | 4 +- .../essentials/commands/Commandrecipe.java | 6 +- .../essentials/commands/Commandskull.java | 6 +- .../essentials/commands/Commandunlimited.java | 2 +- .../essentials/commands/Commandwhois.java | 2 +- .../essentials/craftbukkit/FakeWorld.java | 31 +-- .../earth2me/essentials/settings/Spawns.java | 3 +- .../essentials/signs/EssentialsSign.java | 2 +- .../essentials/signs/SignBlockListener.java | 2 +- .../essentials/signs/SignEntityListener.java | 4 +- .../essentials/signs/SignPlayerListener.java | 2 +- .../essentials/signs/SignProtection.java | 7 +- .../essentials/utils/LocationUtil.java | 193 ++++-------------- .../com/earth2me/essentials/FakeServer.java | 11 + .../EssentialsAntiBuildListener.java | 2 - .../EssentialsProtectBlockListener.java | 4 +- .../src/net/ess3/nms/refl/SpawnEggRefl.java | 5 +- pom.xml | 2 +- 29 files changed, 159 insertions(+), 258 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index e2a5df9c0..1f17b8817 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -577,7 +577,7 @@ public class EssentialsPlayerListener implements Listener { public void onPlayerInteract(final PlayerInteractEvent event) { switch (event.getAction()) { case RIGHT_CLICK_BLOCK: - if (!event.isCancelled() && event.getClickedBlock().getType() == Material.BED_BLOCK && ess.getSettings().getUpdateBedAtDaytime()) { + if (!event.isCancelled() && event.getClickedBlock().getType() == Material.LEGACY_BED && ess.getSettings().getUpdateBedAtDaytime()) { User player = ess.getUser(event.getPlayer()); if (player.isAuthorized("essentials.sethome.bed")) { player.getBase().setBedSpawnLocation(event.getClickedBlock().getLocation()); diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 2e169409f..6f5ec31db0 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -191,7 +191,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { } catch (IllegalArgumentException e) { throw new Exception("Can't spawn entity ID " + metaData + " from mob spawners."); } - } else if (mat == Material.MONSTER_EGG) { + } else if (mat == Material.LEGACY_MONSTER_EGG) { EntityType type; try { type = EntityType.fromId(metaData); @@ -226,7 +226,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { } } else if (args[0].equalsIgnoreCase("blocks")) { for (ItemStack stack : user.getBase().getInventory().getContents()) { - if (stack == null || stack.getTypeId() > 255 || stack.getType() == Material.AIR) { + if (stack == null || stack.getType() == Material.AIR) { continue; } is.add(stack.clone()); @@ -332,7 +332,8 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { sb.append(e.getName().toLowerCase()).append(":").append(enchantmentStorageMeta.getStoredEnchantLevel(e)).append(" "); } break; - case FIREWORK: + case FIREWORK_ROCKET: + case FIREWORK_STAR: // Everything from http://wiki.ess3.net/wiki/Item_Meta#Fireworks in that order. FireworkMeta fireworkMeta = (FireworkMeta) is.getItemMeta(); if (fireworkMeta.hasEffects()) { @@ -374,7 +375,8 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { sb.append("splash:").append(potion.isSplash()).append(" ").append("effect:").append(e.getType().getName().toLowerCase()).append(" ").append("power:").append(e.getAmplifier()).append(" ").append("duration:").append(e.getDuration() / 20).append(" "); } break; - case SKULL_ITEM: + case SKELETON_SKULL: + case WITHER_SKELETON_SKULL: // item stack with meta SkullMeta skullMeta = (SkullMeta) is.getItemMeta(); if (skullMeta != null && skullMeta.hasOwner()) { @@ -389,7 +391,22 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { int rgb = leatherArmorMeta.getColor().asRGB(); sb.append("color:").append(rgb).append(" "); break; - case BANNER: + case BLACK_BANNER: + case BLUE_BANNER: + case BROWN_BANNER: + case CYAN_BANNER: + case GRAY_BANNER: + case GREEN_BANNER: + case LIGHT_BLUE_BANNER: + case LIGHT_GRAY_BANNER: + case LIME_BANNER: + case MAGENTA_BANNER: + case ORANGE_BANNER: + case PINK_BANNER: + case PURPLE_BANNER: + case RED_BANNER: + case WHITE_BANNER: + case YELLOW_BANNER: BannerMeta bannerMeta = (BannerMeta) is.getItemMeta(); if (bannerMeta != null) { int basecolor = bannerMeta.getBaseColor().getColor().asRGB(); diff --git a/Essentials/src/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/com/earth2me/essentials/MetaItemStack.java index dbe30cfde..f15297d5d 100644 --- a/Essentials/src/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/com/earth2me/essentials/MetaItemStack.java @@ -29,8 +29,9 @@ import static com.earth2me.essentials.I18n.tl; public class MetaItemStack { - private static final Map colorMap = new HashMap(); - private static final Map fireworkShape = new HashMap(); + private static final Map colorMap = new HashMap<>(); + private static final Map fireworkShape = new HashMap<>(); + private static final Set banners = new HashSet<>(); static { for (DyeColor color : DyeColor.values()) { @@ -39,6 +40,11 @@ public class MetaItemStack { for (FireworkEffect.Type type : FireworkEffect.Type.values()) { fireworkShape.put(type.name(), type); } + for (Material mat : Material.values()) { + if (mat.name().contains("BANNER")) { + banners.add(mat); + } + } } private final transient Pattern splitPattern = Pattern.compile("[:+',;.]"); @@ -181,7 +187,7 @@ public class MetaItemStack { } else if (split[0].equalsIgnoreCase("unbreakable") && hasMetaPermission(sender, "unbreakable", false, true, ess)) { boolean value = split.length > 1 ? Boolean.valueOf(split[1]) : true; setUnbreakable(stack, value); - } else if (split.length > 1 && (split[0].equalsIgnoreCase("player") || split[0].equalsIgnoreCase("owner")) && stack.getType() == Material.SKULL_ITEM && hasMetaPermission(sender, "head", false, true, ess)) { + } else if (split.length > 1 && (split[0].equalsIgnoreCase("player") || split[0].equalsIgnoreCase("owner")) && (stack.getType() == Material.SKELETON_SKULL || stack.getType() == Material.WITHER_SKELETON_SKULL) && hasMetaPermission(sender, "head", false, true, ess)) { if (stack.getDurability() == 3) { final String owner = split[1]; final SkullMeta meta = (SkullMeta) stack.getItemMeta(); @@ -208,12 +214,12 @@ public class MetaItemStack { final BookMeta meta = (BookMeta) stack.getItemMeta(); meta.setTitle(title); stack.setItemMeta(meta); - } else if (split.length > 1 && split[0].equalsIgnoreCase("power") && stack.getType() == Material.FIREWORK && hasMetaPermission(sender, "firework-power", false, true, ess)) { + } else if (split.length > 1 && split[0].equalsIgnoreCase("power") && (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR)&& hasMetaPermission(sender, "firework-power", false, true, ess)) { final int power = NumberUtil.isInt(split[1]) ? Integer.parseInt(split[1]) : 0; final FireworkMeta meta = (FireworkMeta) stack.getItemMeta(); meta.setPower(power > 3 ? 4 : power); stack.setItemMeta(meta); - } else if (stack.getType() == Material.FIREWORK) {//WARNING - Meta for fireworks will be ignored after this point. + } else if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) {//WARNING - Meta for fireworks will be ignored after this point. addFireworkMeta(sender, false, string, ess); } else if (isPotion(stack.getType())) { //WARNING - Meta for potions will be ignored after this point. addPotionMeta(sender, false, string, ess); @@ -251,7 +257,7 @@ public class MetaItemStack { } public void addFireworkMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception { - if (stack.getType() == Material.FIREWORK) { + if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) { final String[] split = splitPattern.split(string, 2); if (split.length < 2) { return; @@ -444,7 +450,7 @@ public class MetaItemStack { } public void addBannerMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception { - if (stack.getType() == Material.BANNER && string != null) { + if (banners.contains(stack.getType()) && string != null) { final String[] split = splitPattern.split(string, 2); if (split.length < 2) { diff --git a/Essentials/src/com/earth2me/essentials/MobData.java b/Essentials/src/com/earth2me/essentials/MobData.java index df56adc41..033123fa5 100644 --- a/Essentials/src/com/earth2me/essentials/MobData.java +++ b/Essentials/src/com/earth2me/essentials/MobData.java @@ -53,9 +53,9 @@ public enum MobData { BAY_HORSE("bay", EntityType.HORSE, Horse.Color.BROWN, true), BROWN_HORSE("brown", EntityType.HORSE, Horse.Color.BROWN, false), SADDLE_HORSE("saddle", EntityType.HORSE, Data.HORSESADDLE, true), - GOLD_ARMOR_HORSE("goldarmor", EntityType.HORSE, Material.GOLD_BARDING, true), - DIAMOND_ARMOR_HORSE("diamondarmor", EntityType.HORSE, Material.DIAMOND_BARDING, true), - ARMOR_HORSE("armor", EntityType.HORSE, Material.IRON_BARDING, true), + GOLD_ARMOR_HORSE("goldarmor", EntityType.HORSE, Material.GOLDEN_HORSE_ARMOR, true), + DIAMOND_ARMOR_HORSE("diamondarmor", EntityType.HORSE, Material.DIAMOND_HORSE_ARMOR, true), + ARMOR_HORSE("armor", EntityType.HORSE, Material.IRON_HORSE_ARMOR, true), SIAMESE_CAT("siamese", EntityType.OCELOT, Ocelot.Type.SIAMESE_CAT, true), WHITE_CAT("white", EntityType.OCELOT, Ocelot.Type.SIAMESE_CAT, false), RED_CAT("red", EntityType.OCELOT, Ocelot.Type.RED_CAT, true), @@ -66,12 +66,12 @@ public enum MobData { BABY_ZOMBIE("baby", EntityType.ZOMBIE.getEntityClass(), Data.BABYZOMBIE, true), ADULT_ZOMBIE("adult", EntityType.ZOMBIE.getEntityClass(), Data.ADULTZOMBIE, true), DIAMOND_SWORD_ZOMBIE("diamondsword", EntityType.ZOMBIE.getEntityClass(), Material.DIAMOND_SWORD, true), - GOLD_SWORD_ZOMBIE("goldsword", EntityType.ZOMBIE.getEntityClass(), Material.GOLD_SWORD, true), + GOLD_SWORD_ZOMBIE("goldsword", EntityType.ZOMBIE.getEntityClass(), Material.GOLDEN_SWORD, true), IRON_SWORD_ZOMBIE("ironsword", EntityType.ZOMBIE.getEntityClass(), Material.IRON_SWORD, true), STONE_SWORD_ZOMBIE("stonesword", EntityType.ZOMBIE.getEntityClass(), Material.STONE_SWORD, false), SWORD_ZOMBIE("sword", EntityType.ZOMBIE.getEntityClass(), Material.STONE_SWORD, true), DIAMOND_SWORD_SKELETON("diamondsword", EntityType.SKELETON, Material.DIAMOND_SWORD, true), - GOLD_SWORD_SKELETON("goldsword", EntityType.SKELETON, Material.GOLD_SWORD, true), + GOLD_SWORD_SKELETON("goldsword", EntityType.SKELETON, Material.GOLDEN_SWORD, true), IRON_SWORD_SKELETON("ironsword", EntityType.SKELETON, Material.IRON_SWORD, true), STONE_SWORD_SKELETON("stonesword", EntityType.SKELETON, Material.STONE_SWORD, false), SWORD_SKELETON("sword", EntityType.SKELETON, Material.STONE_SWORD, true), diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java index e1c3d3d4d..ecf44956e 100644 --- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java +++ b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java @@ -200,21 +200,11 @@ public class OfflinePlayer implements Player { return Collections.emptyList(); } - @Override - public Block getTargetBlock(HashSet hs, int i) { - return null; - } - @Override public Block getTargetBlock(Set mat, int i) { return null; } - @Override - public List getLastTwoTargetBlocks(HashSet hs, int i) { - return Collections.emptyList(); - } - @Override public List getLastTwoTargetBlocks(Set mat, int i) { return Collections.emptyList(); @@ -480,10 +470,6 @@ public class OfflinePlayer implements Player { public void sendBlockChange(Location lctn, Material mtrl, byte b) { } - @Override - public void sendBlockChange(Location lctn, int i, byte b) { - } - @Override public void setLastDamageCause(EntityDamageEvent ede) { } @@ -742,10 +728,20 @@ public class OfflinePlayer implements Player { public void hidePlayer(Player player) { } + @Override + public void hidePlayer(Plugin plugin, Player player) { + + } + @Override public void showPlayer(Player player) { } + @Override + public void showPlayer(Plugin plugin, Player player) { + + } + @Override public boolean canSee(Player player) { return false; diff --git a/Essentials/src/com/earth2me/essentials/Potions.java b/Essentials/src/com/earth2me/essentials/Potions.java index 075002430..e86842f87 100644 --- a/Essentials/src/com/earth2me/essentials/Potions.java +++ b/Essentials/src/com/earth2me/essentials/Potions.java @@ -11,8 +11,8 @@ import java.util.Set; public class Potions { - private static final Map POTIONS = new HashMap(); - private static final Map ALIASPOTIONS = new HashMap(); + private static final Map POTIONS = new HashMap<>(); + private static final Map ALIASPOTIONS = new HashMap<>(); static { diff --git a/Essentials/src/com/earth2me/essentials/SpawnMob.java b/Essentials/src/com/earth2me/essentials/SpawnMob.java index 9ae334290..85fa6d499 100644 --- a/Essentials/src/com/earth2me/essentials/SpawnMob.java +++ b/Essentials/src/com/earth2me/essentials/SpawnMob.java @@ -191,10 +191,10 @@ public class SpawnMob { invent.setChestplate(new ItemStack(Material.DIAMOND_CHESTPLATE, 1)); invent.setHelmet(new ItemStack(Material.DIAMOND_HELMET, 1)); } else if (inputData.contains("gold")) { - invent.setBoots(new ItemStack(Material.GOLD_BOOTS, 1)); - invent.setLeggings(new ItemStack(Material.GOLD_LEGGINGS, 1)); - invent.setChestplate(new ItemStack(Material.GOLD_CHESTPLATE, 1)); - invent.setHelmet(new ItemStack(Material.GOLD_HELMET, 1)); + invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1)); + invent.setLeggings(new ItemStack(Material.GOLDEN_LEGGINGS, 1)); + invent.setChestplate(new ItemStack(Material.GOLDEN_CHESTPLATE, 1)); + invent.setHelmet(new ItemStack(Material.GOLDEN_HELMET, 1)); } else if (inputData.contains("leather")) { invent.setBoots(new ItemStack(Material.LEATHER_BOOTS, 1)); invent.setLeggings(new ItemStack(Material.LEATHER_LEGGINGS, 1)); @@ -228,7 +228,7 @@ public class SpawnMob { InventoryWorkaround.setItemInMainHand(invent, new ItemStack(Material.BOW, 1)); InventoryWorkaround.setItemInMainHandDropChance(invent, 0.1f); - invent.setBoots(new ItemStack(Material.GOLD_BOOTS, 1)); + invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1)); invent.setBootsDropChance(0.0f); } @@ -237,10 +237,10 @@ public class SpawnMob { setVillager(zombie, false); final EntityEquipment invent = zombie.getEquipment(); - InventoryWorkaround.setItemInMainHand(invent, new ItemStack(Material.GOLD_SWORD, 1)); + InventoryWorkaround.setItemInMainHand(invent, new ItemStack(Material.GOLDEN_SWORD, 1)); InventoryWorkaround.setItemInMainHandDropChance(invent, 0.1f); - invent.setBoots(new ItemStack(Material.GOLD_BOOTS, 1)); + invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1)); invent.setBootsDropChance(0.0f); } @@ -249,7 +249,7 @@ public class SpawnMob { setVillager(zombie, false); final EntityEquipment invent = zombie.getEquipment(); - invent.setBoots(new ItemStack(Material.GOLD_BOOTS, 1)); + invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1)); invent.setBootsDropChance(0.0f); } diff --git a/Essentials/src/com/earth2me/essentials/api/Economy.java b/Essentials/src/com/earth2me/essentials/api/Economy.java index cbd6215b2..6a4275509 100644 --- a/Essentials/src/com/earth2me/essentials/api/Economy.java +++ b/Essentials/src/com/earth2me/essentials/api/Economy.java @@ -178,7 +178,7 @@ public class Economy { * Divides the balance of a user by a value * * @param name Name of the user - * @param value The balance is divided by this value + * @param amount The balance is divided by this value * * @throws UserDoesNotExistException If a user by that name does not exists * @throws NoLoanPermittedException If the user is not allowed to have a negative balance @@ -202,7 +202,7 @@ public class Economy { * Multiplies the balance of a user by a value * * @param name Name of the user - * @param value The balance is multiplied by this value + * @param amount The balance is multiplied by this value * * @throws UserDoesNotExistException If a user by that name does not exists * @throws NoLoanPermittedException If the user is not allowed to have a negative balance diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbook.java b/Essentials/src/com/earth2me/essentials/commands/Commandbook.java index 8883858c2..c3eba124c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbook.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbook.java @@ -45,7 +45,7 @@ public class Commandbook extends EssentialsCommand { } } else { if (isAuthor(bmeta, player) || user.isAuthorized("essentials.book.others")) { - ItemStack newItem = new ItemStack(Material.BOOK_AND_QUILL, item.getAmount()); + ItemStack newItem = new ItemStack(Material.WRITABLE_BOOK, item.getAmount()); newItem.setItemMeta(bmeta); InventoryWorkaround.setItemInMainHand(user.getBase(), newItem); user.sendMessage(tl("editBookContents")); @@ -53,7 +53,7 @@ public class Commandbook extends EssentialsCommand { throw new Exception(tl("denyBookEdit")); } } - } else if (item.getType() == Material.BOOK_AND_QUILL) { + } else if (item.getType() == Material.WRITABLE_BOOK) { BookMeta bmeta = (BookMeta) item.getItemMeta(); if (!user.isAuthorized("essentials.book.author")) { bmeta.setAuthor(player); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java index 6de51fe12..0de694577 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java @@ -3,11 +3,13 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n.tl; import com.earth2me.essentials.CommandSource; +import com.earth2me.essentials.ItemDb; import com.earth2me.essentials.User; import com.earth2me.essentials.craftbukkit.InventoryWorkaround; import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.StringUtil; +import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -85,6 +87,7 @@ public class Commandclearinventory extends EssentialsCommand { short data = -1; int type = -1; int amount = -1; + Material mat = null; if (args.length > (offset + 1) && NumberUtil.isInt(args[(offset + 1)])) { amount = Integer.parseInt(args[(offset + 1)]); @@ -95,7 +98,8 @@ public class Commandclearinventory extends EssentialsCommand { } else if (!args[offset].equalsIgnoreCase("*")) { final String[] split = args[offset].split(":"); final ItemStack item = ess.getItemDb().get(split[0]); - type = item.getTypeId(); + type = ess.getItemDb().getLegacyId(item.getType()); + mat = item.getType(); if (split.length > 1 && NumberUtil.isInt(split[1])) { data = Short.parseShort(split[1]); @@ -121,14 +125,14 @@ public class Commandclearinventory extends EssentialsCommand { } else { if (data == -1) // data -1 means that all subtypes will be cleared { - ItemStack stack = new ItemStack(type); + ItemStack stack = new ItemStack(mat); if (showExtended) { sender.sendMessage(tl("inventoryClearingAllStack", stack.getType().toString().toLowerCase(Locale.ENGLISH), player.getDisplayName())); } - player.getInventory().clear(type, data); + player.getInventory().remove(mat); } else if (amount == -1) // amount -1 means all items will be cleared { - ItemStack stack = new ItemStack(type, BASE_AMOUNT, data); + ItemStack stack = new ItemStack(mat, BASE_AMOUNT, data); ItemStack removedStack = player.getInventory().removeItem(stack).get(0); final int removedAmount = (BASE_AMOUNT - removedStack.getAmount()); if (removedAmount > 0 || showExtended) { @@ -138,7 +142,7 @@ public class Commandclearinventory extends EssentialsCommand { if (amount < 0) { amount = 1; } - ItemStack stack = new ItemStack(type, amount, data); + ItemStack stack = new ItemStack(mat, amount, data); if (player.getInventory().containsAtLeast(stack, amount)) { sender.sendMessage(tl("inventoryClearingStack", amount, stack.getType().toString().toLowerCase(Locale.ENGLISH), player.getDisplayName())); player.getInventory().removeItem(stack); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandfirework.java b/Essentials/src/com/earth2me/essentials/commands/Commandfirework.java index 2087d78d6..344c5db77 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandfirework.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandfirework.java @@ -43,8 +43,8 @@ public class Commandfirework extends EssentialsCommand { @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - final ItemStack stack = user.getBase().getItemInHand(); - if (stack.getType() == Material.FIREWORK) { + final ItemStack stack = user.getBase().getInventory().getItemInMainHand(); + if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) { if (args.length > 0) { if (args[0].equalsIgnoreCase("clear")) { FireworkMeta fmeta = (FireworkMeta) stack.getItemMeta(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhat.java b/Essentials/src/com/earth2me/essentials/commands/Commandhat.java index e77438208..662a57cd0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhat.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhat.java @@ -33,8 +33,8 @@ public class Commandhat extends EssentialsCommand { user.sendMessage(tl("hatRemoved")); } } else { - if (user.getBase().getItemInHand().getType() != Material.AIR) { - final ItemStack hand = user.getBase().getItemInHand(); + if (user.getBase().getInventory().getItemInMainHand().getType() != Material.AIR) { + final ItemStack hand = user.getBase().getInventory().getItemInMainHand(); if (hand.getType().getMaxDurability() == 0) { final PlayerInventory inv = user.getBase().getInventory(); final ItemStack head = inv.getHelmet(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java b/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java index dd957fe41..df21eb1e0 100755 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java @@ -64,11 +64,11 @@ public class Commandrecipe extends EssentialsCommand { } else if (selectedRecipe instanceof ShapedRecipe) { shapedRecipe(sender, (ShapedRecipe) selectedRecipe, sender.isPlayer()); } else if (selectedRecipe instanceof ShapelessRecipe) { - if (recipesOfType.size() == 1 && itemType.getType() == Material.FIREWORK) { + if (recipesOfType.size() == 1 && (itemType.getType() == Material.FIREWORK_ROCKET || itemType.getType() == Material.FIREWORK_STAR)) { ShapelessRecipe shapelessRecipe = new ShapelessRecipe(itemType); - shapelessRecipe.addIngredient(Material.SULPHUR); + shapelessRecipe.addIngredient(Material.LEGACY_SULPHUR); shapelessRecipe.addIngredient(Material.PAPER); - shapelessRecipe.addIngredient(Material.FIREWORK_CHARGE); + shapelessRecipe.addIngredient(Material.FIREWORK_ROCKET); shapelessRecipe(sender, shapelessRecipe, sender.isPlayer()); } else { shapelessRecipe(sender, (ShapelessRecipe) selectedRecipe, sender.isPlayer()); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandskull.java b/Essentials/src/com/earth2me/essentials/commands/Commandskull.java index d1082a7f8..e37e00468 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandskull.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandskull.java @@ -31,14 +31,14 @@ public class Commandskull extends EssentialsCommand { owner = user.getName(); } - ItemStack itemSkull = user.getBase().getItemInHand(); + ItemStack itemSkull = user.getBase().getInventory().getItemInMainHand(); SkullMeta metaSkull = null; boolean spawn = false; - if (itemSkull != null && itemSkull.getType() == Material.SKULL_ITEM && itemSkull.getDurability() == 3) { + if (itemSkull != null && itemSkull.getType() == Material.LEGACY_SKULL_ITEM && itemSkull.getDurability() == 3) { metaSkull = (SkullMeta) itemSkull.getItemMeta(); } else if (user.isAuthorized("essentials.skull.spawn")) { - itemSkull = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3); + itemSkull = new ItemStack(Material.LEGACY_SKULL_ITEM, 1, (byte) 3); metaSkull = (SkullMeta) itemSkull.getItemMeta(); spawn = true; } else { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java index 67d676af0..36b34ca27 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java @@ -71,7 +71,7 @@ public class Commandunlimited extends EssentialsCommand { stack.setAmount(Math.min(stack.getType().getMaxStackSize(), 2)); final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); - if (ess.getSettings().permissionBasedItemSpawn() && (!user.isAuthorized("essentials.unlimited.item-all") && !user.isAuthorized("essentials.unlimited.item-" + itemname) && !user.isAuthorized("essentials.unlimited.item-" + stack.getTypeId()) && !((stack.getType() == Material.WATER_BUCKET || stack.getType() == Material.LAVA_BUCKET) && user.isAuthorized("essentials.unlimited.item-bucket")))) { + if (ess.getSettings().permissionBasedItemSpawn() && (!user.isAuthorized("essentials.unlimited.item-all") && !user.isAuthorized("essentials.unlimited.item-" + itemname) && !((stack.getType() == Material.WATER_BUCKET || stack.getType() == Material.LAVA_BUCKET) && user.isAuthorized("essentials.unlimited.item-bucket")))) { throw new Exception(tl("unlimitedItemPermission", itemname)); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java index af002af5b..6cc33f6d7 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java @@ -36,7 +36,7 @@ public class Commandwhois extends EssentialsCommand { sender.sendMessage(tl("whoisHunger", user.getBase().getFoodLevel(), user.getBase().getSaturation())); sender.sendMessage(tl("whoisExp", SetExpFix.getTotalExperience(user.getBase()), user.getBase().getLevel())); sender.sendMessage(tl("whoisLocation", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ())); - long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(Statistic.PLAY_ONE_TICK) * 50); + long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(Statistic.PLAY_ONE_MINUTE) * 60); sender.sendMessage(tl("whoisPlaytime", DateUtil.formatDateDiff(playtimeMs))); if (!ess.getSettings().isEcoDisabled()) { sender.sendMessage(tl("whoisMoney", NumberUtil.displayCurrency(user.getMoney(), ess))); diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java index 1d346f951..d6810d023 100644 --- a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java +++ b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java @@ -3,6 +3,7 @@ package com.earth2me.essentials.craftbukkit; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.*; import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.ChunkGenerator; @@ -38,16 +39,6 @@ public class FakeWorld implements World { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public int getBlockTypeIdAt(int i, int i1, int i2) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getBlockTypeIdAt(Location lctn) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public int getHighestBlockYAt(int i, int i1) { throw new UnsupportedOperationException("Not supported yet."); @@ -163,11 +154,6 @@ public class FakeWorld implements World { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public boolean generateTree(Location lctn, TreeType tt, BlockChangeDelegate bcd) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public LightningStrike strikeLightning(Location lctn) { throw new UnsupportedOperationException("Not supported yet."); @@ -203,6 +189,11 @@ public class FakeWorld implements World { throw new UnsupportedOperationException("Not supported yet."); } + @Override + public boolean setSpawnLocation(Location location) { + throw new UnsupportedOperationException("Not supported yet."); + } + @Override public boolean setSpawnLocation(int i, int i1, int i2) { throw new UnsupportedOperationException("Not supported yet."); @@ -348,6 +339,11 @@ public class FakeWorld implements World { throw new UnsupportedOperationException("Not supported yet."); } + @Override + public FallingBlock spawnFallingBlock(Location location, BlockData blockData) throws IllegalArgumentException { + throw new UnsupportedOperationException("Not supported yet."); + } + @Override public ChunkSnapshot getEmptyChunkSnapshot(int i, int i1, boolean bln, boolean bln1) { throw new UnsupportedOperationException("Not supported yet."); @@ -583,11 +579,6 @@ public class FakeWorld implements World { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public FallingBlock spawnFallingBlock(Location location, int blockId, byte blockData) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public void playSound(Location arg0, Sound arg1, float arg2, float arg3) { throw new UnsupportedOperationException("Not supported yet."); diff --git a/Essentials/src/com/earth2me/essentials/settings/Spawns.java b/Essentials/src/com/earth2me/essentials/settings/Spawns.java index 0ece0f2bf..cac982c48 100644 --- a/Essentials/src/com/earth2me/essentials/settings/Spawns.java +++ b/Essentials/src/com/earth2me/essentials/settings/Spawns.java @@ -9,8 +9,7 @@ import org.bukkit.Location; import java.util.HashMap; import java.util.Map; - @Data @EqualsAndHashCode(callSuper = false) public class Spawns implements StorageObject { @MapValueType(Location.class) - private Map spawns = new HashMap(); + private Map spawns = new HashMap<>(); } diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java index 69a3585e9..19660446a 100644 --- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java +++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java @@ -213,7 +213,7 @@ public class EssentialsSign { protected static boolean checkIfBlockBreaksSigns(final Block block) { final Block sign = block.getRelative(BlockFace.UP); - if (sign.getType() == Material.SIGN_POST && isValidSign(new BlockSign(sign))) { + if (sign.getType() == Material.SIGN && isValidSign(new BlockSign(sign))) { return true; } final BlockFace[] directions = new BlockFace[]{BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java index bf6ce02f1..285834e38 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java @@ -22,7 +22,7 @@ import java.util.logging.Logger; public class SignBlockListener implements Listener { private static final Logger LOGGER = Logger.getLogger("Essentials"); private static final Material WALL_SIGN = Material.WALL_SIGN; - private static final Material SIGN_POST = Material.SIGN_POST; + private static final Material SIGN_POST = Material.SIGN; private final transient IEssentials ess; public SignBlockListener(IEssentials ess) { diff --git a/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java b/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java index 192470ed3..e8277ad55 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java @@ -25,7 +25,7 @@ public class SignEntityListener implements Listener { } for (Block block : event.blockList()) { - if (((block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { + if (((block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { event.setCancelled(true); return; } @@ -46,7 +46,7 @@ public class SignEntityListener implements Listener { } final Block block = event.getBlock(); - if (((block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { + if (((block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { event.setCancelled(true); return; } diff --git a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java index 6d6188b98..1e3fe81fb 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java @@ -54,7 +54,7 @@ public class SignPlayerListener implements Listener { } final Material mat = block.getType(); - if (mat == Material.SIGN_POST || mat == Material.WALL_SIGN) { + if (mat == Material.SIGN || mat == Material.WALL_SIGN) { final String csign = ((Sign) block.getState()).getLine(0); for (EssentialsSign sign : ess.getSettings().enabledSigns()) { if (csign.equalsIgnoreCase(sign.getSuccessName(ess))) { diff --git a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java index befbedbfe..aee948a24 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java @@ -26,7 +26,6 @@ public class SignProtection extends EssentialsSign { public SignProtection() { super("Protection"); protectedBlocks.add(Material.CHEST); - protectedBlocks.add(Material.BURNING_FURNACE); protectedBlocks.add(Material.FURNACE); protectedBlocks.add(Material.DISPENSER); } @@ -103,7 +102,7 @@ public class SignProtection extends EssentialsSign { } private SignProtectionState checkProtectionSign(final Block block, final User user, final String username) { - if (block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) { + if (block.getType() == Material.SIGN || block.getType() == Material.WALL_SIGN) { final BlockSign sign = new BlockSign(block); if (sign.getLine(0).equals(this.getSuccessName())) { // TODO call getSuccessName(IEssentials) return checkProtectionSign(sign, user, username); @@ -160,7 +159,7 @@ public class SignProtection extends EssentialsSign { public boolean isBlockProtected(final Block block) { final Block[] faces = getAdjacentBlocks(block); for (Block b : faces) { - if (b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN) { + if (b.getType() == Material.SIGN || b.getType() == Material.WALL_SIGN) { final Sign sign = (Sign) b.getState(); if (sign.getLine(0).equalsIgnoreCase("ยง1[Protection]")) { return true; @@ -170,7 +169,7 @@ public class SignProtection extends EssentialsSign { final Block[] faceChest = getAdjacentBlocks(b); for (Block a : faceChest) { - if (a.getType() == Material.SIGN_POST || a.getType() == Material.WALL_SIGN) { + if (a.getType() == Material.SIGN || a.getType() == Material.WALL_SIGN) { final Sign sign = (Sign) a.getState(); if (sign.getLine(0).equalsIgnoreCase("ยง1[Protection]")) { return true; diff --git a/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java index 64d5bb2c6..6fdfbe05d 100644 --- a/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.utils; +import com.earth2me.essentials.IEssentials; import net.ess3.api.IUser; import org.bukkit.GameMode; import org.bukkit.Location; @@ -13,9 +14,6 @@ import java.util.*; import static com.earth2me.essentials.I18n.tl; -import com.earth2me.essentials.Essentials; -import com.earth2me.essentials.IEssentials; - public class LocationUtil { // The player can stand inside these materials @@ -24,147 +22,22 @@ public class LocationUtil { static { // Materials from Material.isTransparent() - HOLLOW_MATERIALS.add(Material.AIR); - HOLLOW_MATERIALS.add(Material.SAPLING); - HOLLOW_MATERIALS.add(Material.POWERED_RAIL); - HOLLOW_MATERIALS.add(Material.DETECTOR_RAIL); - HOLLOW_MATERIALS.add(Material.LONG_GRASS); - HOLLOW_MATERIALS.add(Material.DEAD_BUSH); - HOLLOW_MATERIALS.add(Material.YELLOW_FLOWER); - HOLLOW_MATERIALS.add(Material.RED_ROSE); - HOLLOW_MATERIALS.add(Material.BROWN_MUSHROOM); - HOLLOW_MATERIALS.add(Material.RED_MUSHROOM); - HOLLOW_MATERIALS.add(Material.TORCH); - HOLLOW_MATERIALS.add(Material.FIRE); - HOLLOW_MATERIALS.add(Material.REDSTONE_WIRE); - HOLLOW_MATERIALS.add(Material.CROPS); - HOLLOW_MATERIALS.add(Material.LADDER); - HOLLOW_MATERIALS.add(Material.RAILS); - HOLLOW_MATERIALS.add(Material.LEVER); - HOLLOW_MATERIALS.add(Material.REDSTONE_TORCH_OFF); - HOLLOW_MATERIALS.add(Material.REDSTONE_TORCH_ON); - HOLLOW_MATERIALS.add(Material.STONE_BUTTON); - HOLLOW_MATERIALS.add(Material.SNOW); - HOLLOW_MATERIALS.add(Material.SUGAR_CANE_BLOCK); - HOLLOW_MATERIALS.add(Material.PORTAL); - HOLLOW_MATERIALS.add(Material.DIODE_BLOCK_OFF); - HOLLOW_MATERIALS.add(Material.DIODE_BLOCK_ON); - HOLLOW_MATERIALS.add(Material.PUMPKIN_STEM); - HOLLOW_MATERIALS.add(Material.MELON_STEM); - HOLLOW_MATERIALS.add(Material.VINE); - HOLLOW_MATERIALS.add(Material.WATER_LILY); - HOLLOW_MATERIALS.add(Material.NETHER_WARTS); - HOLLOW_MATERIALS.add(Material.ENDER_PORTAL); - HOLLOW_MATERIALS.add(Material.COCOA); - HOLLOW_MATERIALS.add(Material.TRIPWIRE_HOOK); - HOLLOW_MATERIALS.add(Material.TRIPWIRE); - HOLLOW_MATERIALS.add(Material.FLOWER_POT); - HOLLOW_MATERIALS.add(Material.CARROT); - HOLLOW_MATERIALS.add(Material.POTATO); - HOLLOW_MATERIALS.add(Material.WOOD_BUTTON); - HOLLOW_MATERIALS.add(Material.SKULL); - HOLLOW_MATERIALS.add(Material.REDSTONE_COMPARATOR_OFF); - HOLLOW_MATERIALS.add(Material.REDSTONE_COMPARATOR_ON); - HOLLOW_MATERIALS.add(Material.ACTIVATOR_RAIL); - HOLLOW_MATERIALS.add(Material.CARPET); - HOLLOW_MATERIALS.add(Material.DOUBLE_PLANT); - - // Additional Materials added in by Essentials - HOLLOW_MATERIALS.add(Material.SEEDS); - HOLLOW_MATERIALS.add(Material.SIGN_POST); - HOLLOW_MATERIALS.add(Material.WOODEN_DOOR); - HOLLOW_MATERIALS.add(Material.WALL_SIGN); - HOLLOW_MATERIALS.add(Material.STONE_PLATE); - HOLLOW_MATERIALS.add(Material.IRON_DOOR_BLOCK); - HOLLOW_MATERIALS.add(Material.WOOD_PLATE); - HOLLOW_MATERIALS.add(Material.FENCE_GATE); + for (Material mat : Material.values()) { + if (mat.isTransparent()) { + HOLLOW_MATERIALS.add(mat); + } + } TRANSPARENT_MATERIALS.addAll(HOLLOW_MATERIALS); TRANSPARENT_MATERIALS.add(Material.WATER); - TRANSPARENT_MATERIALS.add(Material.STATIONARY_WATER); + TRANSPARENT_MATERIALS.add(Material.FLOWING_WATER); } public static final int RADIUS = 3; public static final Vector3D[] VOLUME; public static ItemStack convertBlockToItem(final Block block) { - final ItemStack is = new ItemStack(block.getType(), 1, (short) 0, block.getData()); - switch (is.getType()) { - case WOODEN_DOOR: - is.setType(Material.WOOD_DOOR); - is.setDurability((short) 0); - break; - case IRON_DOOR_BLOCK: - is.setType(Material.IRON_DOOR); - is.setDurability((short) 0); - break; - case SIGN_POST: - case WALL_SIGN: - is.setType(Material.SIGN); - is.setDurability((short) 0); - break; - case CROPS: - is.setType(Material.SEEDS); - is.setDurability((short) 0); - break; - case CAKE_BLOCK: - is.setType(Material.CAKE); - is.setDurability((short) 0); - break; - case BED_BLOCK: - is.setType(Material.BED); - is.setDurability((short) 0); - break; - case REDSTONE_WIRE: - is.setType(Material.REDSTONE); - is.setDurability((short) 0); - break; - case REDSTONE_TORCH_OFF: - case REDSTONE_TORCH_ON: - is.setType(Material.REDSTONE_TORCH_ON); - is.setDurability((short) 0); - break; - case DIODE_BLOCK_OFF: - case DIODE_BLOCK_ON: - is.setType(Material.DIODE); - is.setDurability((short) 0); - break; - case DOUBLE_STEP: - is.setType(Material.STEP); - break; - case TORCH: - case RAILS: - case LADDER: - case WOOD_STAIRS: - case COBBLESTONE_STAIRS: - case LEVER: - case STONE_BUTTON: - case FURNACE: - case DISPENSER: - case PUMPKIN: - case JACK_O_LANTERN: - case WOOD_PLATE: - case STONE_PLATE: - case PISTON_STICKY_BASE: - case PISTON_BASE: - case IRON_FENCE: - case THIN_GLASS: - case TRAP_DOOR: - case FENCE: - case FENCE_GATE: - case NETHER_FENCE: - is.setDurability((short) 0); - break; - case FIRE: - return null; - case PUMPKIN_STEM: - is.setType(Material.PUMPKIN_SEEDS); - break; - case MELON_STEM: - is.setType(Material.MELON_SEEDS); - break; - } - return is; + return new ItemStack(block.getType(), 1); } @@ -200,15 +73,11 @@ public class LocationUtil { @SuppressWarnings("deprecation") public static Location getTarget(final LivingEntity entity) throws Exception { - Block block; + Block block = null; try { block = entity.getTargetBlock(TRANSPARENT_MATERIALS, 300); } catch (NoSuchMethodError e) { - HashSet legacyTransparent = new HashSet<>(); // Bukkit API prevents declaring as Set - for (Material m : TRANSPARENT_MATERIALS) { - legacyTransparent.add((byte) m.getId()); - } - block = entity.getTargetBlock(legacyTransparent, 300); + // failing now :( } if (block == null) { throw new Exception("Not targeting a block"); @@ -217,10 +86,7 @@ public class LocationUtil { } static boolean isBlockAboveAir(final World world, final int x, final int y, final int z) { - if (y > world.getMaxHeight()) { - return true; - } - return HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType()); + return y > world.getMaxHeight() || HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType()); } public static boolean isBlockUnsafeForUser(final IUser user, final World world, final int x, final int y, final int z) { @@ -235,26 +101,39 @@ public class LocationUtil { } public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z) { - if (isBlockDamaging(world, x, y, z)) { - return true; - } - return isBlockAboveAir(world, x, y, z); + return isBlockDamaging(world, x, y, z) || isBlockAboveAir(world, x, y, z); } public static boolean isBlockDamaging(final World world, final int x, final int y, final int z) { final Block below = world.getBlockAt(x, y - 1, z); - if (below.getType() == Material.LAVA || below.getType() == Material.STATIONARY_LAVA) { - return true; - } - if (below.getType() == Material.FIRE) { - return true; - } - if (below.getType() == Material.BED_BLOCK) { - return true; + + switch (below.getType()) { + case LAVA: + case FLOWING_LAVA: + case FIRE: + case BLACK_BED: + case BLUE_BED: + case BROWN_BED: + case CYAN_BED: + case GRAY_BED: + case GREEN_BED: + case LIGHT_BLUE_BED: + case LIGHT_GRAY_BED: + case LIME_BED: + case MAGENTA_BED: + case ORANGE_BED: + case PINK_BED: + case PURPLE_BED: + case RED_BED: + case WHITE_BED: + case YELLOW_BED: + return true; } + if (world.getBlockAt(x, y, z).getType() == Material.PORTAL) { return true; } + return (!HOLLOW_MATERIALS.contains(world.getBlockAt(x, y, z).getType())) || (!HOLLOW_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType())); } diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java index 41d50879d..20b0d0fad 100644 --- a/Essentials/test/com/earth2me/essentials/FakeServer.java +++ b/Essentials/test/com/earth2me/essentials/FakeServer.java @@ -5,6 +5,7 @@ import org.bukkit.*; import org.bukkit.Warning.WarningState; import org.bukkit.World.Environment; import org.bukkit.advancement.Advancement; +import org.bukkit.block.data.BlockData; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; @@ -969,6 +970,16 @@ public class FakeServer implements Server { throw new UnsupportedOperationException("Not supported yet."); } + @Override + public BlockData createData(Material material) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Tag getTag(String s, NamespacedKey namespacedKey, Class aClass) { + throw new UnsupportedOperationException("Not supported yet."); + } + class FakePluginManager implements PluginManager { ArrayList listeners = new ArrayList(); diff --git a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java index 1fe6840ce..854e47d56 100644 --- a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java +++ b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java @@ -67,7 +67,6 @@ public class EssentialsAntiBuildListener implements Listener { public void onBlockPlace(final BlockPlaceEvent event) { final User user = ess.getUser(event.getPlayer()); final Block block = event.getBlockPlaced(); - final int typeId = block.getTypeId(); final Material type = block.getType(); if (prot.getSettingBool(AntiBuildConfig.disable_build) && !user.canBuild() && !user.isAuthorized("essentials.build") && !metaPermCheck(user, "place", block)) { @@ -95,7 +94,6 @@ public class EssentialsAntiBuildListener implements Listener { public void onBlockBreak(final BlockBreakEvent event) { final User user = ess.getUser(event.getPlayer()); final Block block = event.getBlock(); - final int typeId = block.getTypeId(); final Material type = block.getType(); if (prot.getSettingBool(AntiBuildConfig.disable_build) && !user.canBuild() && !user.isAuthorized("essentials.build") && !metaPermCheck(user, "break", block)) { diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java index c052d5521..385899b72 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java @@ -57,12 +57,12 @@ public class EssentialsProtectBlockListener implements Listener { public void onBlockFromTo(final BlockFromToEvent event) { final Block block = event.getBlock(); - if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) { + if (block.getType() == Material.WATER || block.getType() == Material.WATER) { event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_water_flow)); return; } - if (block.getType() == Material.LAVA || block.getType() == Material.STATIONARY_LAVA) { + if (block.getType() == Material.LAVA || block.getType() == Material.LAVA) { event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_lava_flow)); return; } diff --git a/nms/ReflectionProvider/src/net/ess3/nms/refl/SpawnEggRefl.java b/nms/ReflectionProvider/src/net/ess3/nms/refl/SpawnEggRefl.java index 6f7f8617b..6838aae58 100644 --- a/nms/ReflectionProvider/src/net/ess3/nms/refl/SpawnEggRefl.java +++ b/nms/ReflectionProvider/src/net/ess3/nms/refl/SpawnEggRefl.java @@ -79,7 +79,8 @@ public class SpawnEggRefl { */ @SuppressWarnings("deprecation") public ItemStack toItemStack(int amount) throws Exception { - ItemStack item = new ItemStack(Material.MONSTER_EGG, amount); + // TODO: Get off of the deprecated LEGACY material. + ItemStack item = new ItemStack(Material.LEGACY_MONSTER_EGG, amount); Class craftItemStackClass = ReflUtil.getOBCClass("inventory.CraftItemStack"); Method asNMSCopyMethod = ReflUtil.getMethodCached(craftItemStackClass, "asNMSCopy", ItemStack.class); @@ -122,7 +123,7 @@ public class SpawnEggRefl { public static SpawnEggRefl fromItemStack(ItemStack item) throws Exception { if (item == null) throw new IllegalArgumentException("Item cannot be null"); - if (item.getType() != Material.MONSTER_EGG) + if (item.getType() != Material.LEGACY_MONSTER_EGG) throw new IllegalArgumentException("Item is not a monster egg"); Class NMSItemStackClass = ReflUtil.getNMSClass("ItemStack"); diff --git a/pom.xml b/pom.xml index e369c413c..8e557c94b 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ org.bukkit bukkit - 1.12-R0.1-SNAPSHOT + 18w02a-R0.1-SNAPSHOT provided From 938f94e130ef2b924351bcb9ed2a0c5712aafaf8 Mon Sep 17 00:00:00 2001 From: k-jiang Date: Sat, 20 Jan 2018 14:29:48 -0500 Subject: [PATCH 007/333] Upgrade to GeoIP2, add db update. (#1748) --- Essentials/src/messages.properties | 2 +- Essentials/src/messages_cs.properties | 2 +- Essentials/src/messages_da.properties | 2 +- Essentials/src/messages_de.properties | 2 +- Essentials/src/messages_en.properties | 2 +- Essentials/src/messages_es.properties | 2 +- Essentials/src/messages_et.properties | 2 +- Essentials/src/messages_fi.properties | 2 +- Essentials/src/messages_fr.properties | 2 +- Essentials/src/messages_hu.properties | 2 +- Essentials/src/messages_it.properties | 2 +- Essentials/src/messages_ko.properties | 2 +- Essentials/src/messages_lt.properties | 2 +- Essentials/src/messages_nl.properties | 2 +- Essentials/src/messages_pl.properties | 2 +- Essentials/src/messages_pt.properties | 2 +- Essentials/src/messages_pt_BR.properties | 2 +- Essentials/src/messages_ru.properties | 2 +- Essentials/src/messages_sv.properties | 2 +- Essentials/src/messages_zh.properties | 2 +- EssentialsGeoIP/pom.xml | 25 +++-- .../essentials/geoip/EssentialsGeoIP.java | 2 +- .../geoip/EssentialsGeoIPPlayerListener.java | 101 +++++++++++++----- EssentialsGeoIP/src/config.yml | 13 ++- EssentialsGeoIP/src/plugin.yml | 2 +- 25 files changed, 124 insertions(+), 59 deletions(-) diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index a171a961a..a15441d69 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Spawning this mob was disabled in the config file. disableUnlimited=\u00a76Disabled unlimited placing of\u00a7c {0} \u00a76for {1}. distance=\u00a76Distance\: {0} dontMoveMessage=\u00a76Teleportation will commence in\u00a7c {0}\u00a76. Don''t move. -downloadingGeoIp=Downloading GeoIP database... this might take a while (country\: 0.6 MB, city\: 20MB) +downloadingGeoIp=Downloading GeoIP database... this might take a while (country\: 1.7 MB, city\: 30MB) duplicatedUserdata=Duplicated userdata\: {0} and {1}. durability=\u00a76This tool has \u00a7c{0}\u00a76 uses left. editBookContents=\u00a7eYou may now edit the contents of this book. diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index 69dd7d225..d8c195dd5 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Spawnuti tohoto moba je zakazno v configuracnim soubor disableUnlimited=\u00a76Zablokovano neomezene pokladani\u00a7c {0} \u00a76hracem {1}. distance=\u00a76Vzdalenost\: {0} dontMoveMessage=\u00a76Teleport bude zahajen za\u00a7c {0}\u00a76. Nehybej se. -downloadingGeoIp=Stahuji GeoIP databazi ... muze to chvilku trvat (staty\: 0.6 MB, mesta\: 20MB) +downloadingGeoIp=Stahuji GeoIP databazi ... muze to chvilku trvat (staty\: 1.7 MB, mesta\: 30MB) duplicatedUserdata=Duplicitni uzivatelska data\: {0} a {1}. durability=\u00a76Tomuto nastroji zbyva \u00a7c{0}\u00a76 pouziti. editBookContents=\u00a7eNyni muzes upravovat obsah teto knihy. diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index d6a375e5c..dd4d1b289 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Spawning af dette mob er deaktiveret i konfigurationsf disableUnlimited=\u00a76Deaktiverede ubegr\u00e6nset placering af\u00a7c {0} \u00a76i {1}. distance=\u00a76Afstand\: {0} dontMoveMessage=\u00a76Teleportering vil begynde om\u00a7c {0}\u00a76. Bliv st\u00e5ende. -downloadingGeoIp=Downloader GeoIP database... dette tager m\u00e5ske noget tid (land\: 0.6 MB, by\: 20MB) +downloadingGeoIp=Downloader GeoIP database... dette tager m\u00e5ske noget tid (land\: 1.7 MB, by\: 30MB) duplicatedUserdata=Duplikerede brugerdata\: {0} og {1}. durability=\u00a76Dette v\u00e6rkt\u00f8j har \u00a7c{0}\u00a76 anvendelser tilbage. editBookContents=\u00a7eDu kan nu \u00e6ndre denne bogs indhold. diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index e90557330..3e291f8c6 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Das Spawnen dieses Mobs wurde in der Konfigurationsdat disableUnlimited=\u00a76Deaktiviere unbegrenztes Platzieren von\u00a7c {0} \u00a76f\u00fcr {1}. distance=\u00a76Entfernung\: {0} dontMoveMessage=\u00a76Teleportvorgang startet in {0}. Bewege dich nicht. -downloadingGeoIp=Lade GeoIP-Datenbank ... dies kann etwas dauern (country\: 0.6 MB, city\: 20MB) +downloadingGeoIp=Lade GeoIP-Datenbank ... dies kann etwas dauern (country\: 1.7 MB, city\: 30MB) duplicatedUserdata=Doppelte Datei in userdata\: {0} und {1}. durability=\u00a76Dieses Werkzeug kann noch \u00a7c{0}\u00a76 mal benutzt werden. editBookContents=\u00a7eDu darfst jetzt den Inhalt dieses Buches bearbeiten. diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index c83bcb499..8db35bd7a 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Spawning this mob was disabled in the config file. disableUnlimited=\u00a76Disabled unlimited placing of\u00a7c {0} \u00a76for {1}. distance=\u00a76Distance\: {0} dontMoveMessage=\u00a76Teleportation will commence in\u00a7c {0}\u00a76. Don''t move. -downloadingGeoIp=Downloading GeoIP database... this might take a while (country\: 0.6 MB, city\: 20MB) +downloadingGeoIp=Downloading GeoIP database... this might take a while (country\: 1.7 MB, city\: 30MB) duplicatedUserdata=Duplicated userdata\: {0} and {1}. durability=\u00a76This tool has \u00a7c{0}\u00a76 uses left. editBookContents=\u00a7eYou may now edit the contents of this book. diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index 7c1b39623..6a1e50c5f 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74El spawn de este mob est\u00e1 deshabilitado en la con disableUnlimited=\u00a76La colocaci\u00f3n ilimitada de \u00a7c{0} \u00a76ha sido desactivada para {1}\u00a76. distance=\u00a76Distancia\: {0} dontMoveMessage=\u00a76El teletransporte comenzar\u00e1 en\u00a7c {0}\u00a76. Por favor, no te muevas. -downloadingGeoIp=Descargando base de datos de GeoIP... Puede tardar unos minutos (pa\u00edses\: 0.6 MB, ciudades\: 20 MB) +downloadingGeoIp=Descargando base de datos de GeoIP... Puede tardar unos minutos (pa\u00edses\: 1.7 MB, ciudades\: 30 MB) duplicatedUserdata=Datos de usuario duplicados\: {0} y {1} durability=\u00a77Esta herramienta tiene \u00a7c{0}\u00a77 usos restantes. editBookContents=\u00a7eAhora puedes editar los contenidos de este libro. diff --git a/Essentials/src/messages_et.properties b/Essentials/src/messages_et.properties index a26fe15e6..e47e41d38 100644 --- a/Essentials/src/messages_et.properties +++ b/Essentials/src/messages_et.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Selle eluka tekitamine on konfiguratsioonis keelatud. disableUnlimited=\u00a76Peatatud l\u00f5pmatu plokki asetamine \u00a7c {0} \u00a76m\u00e4ngijale {1}. distance=\u00a76Kaugus\: {0} dontMoveMessage=\u00a76Teleportatsioon algab\u00a7c {0}\u00a76 p\u00e4rast. \u00c4ra liigu. -downloadingGeoIp=GeoIP andmebaasi allalaadimine... see v\u00f5ib v\u00f5tta aega (riik\: 0.6 MB, linn\: 20MB) +downloadingGeoIp=GeoIP andmebaasi allalaadimine... see v\u00f5ib v\u00f5tta aega (riik\: 1.7 MB, linn\: 30MB) duplicatedUserdata=Topelt kasutaja andmed\: {0} ja {1}. durability=\u00a76Sellel esemel on \u00a7c{0}\u00a76 kasutust j\u00e4rel editBookContents=\u00a7eSa v\u00f5id n\u00fc\u00fcd muuta selle raamatu sisu. diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index bcded0d1b..d55f908e4 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=T\u00e4m\u00e4n mobin luominen on poistettu k\u00e4yt\u00f6st disableUnlimited=\u00a77Poistettu k\u00e4yt\u00f6st\u00e4 loputon laittaminen tavaralta "{0}", pelaajalta {1}. distance=\u00a76Et\u00e4isyys\: {0} dontMoveMessage=\u00a77Teleportataan {0} kuluttua. \u00c4l\u00e4 liiku. -downloadingGeoIp=Ladataan GeoIP tietokantaa ... t\u00e4m\u00e4 voi vied\u00e4 hetken (maa\: 0.6 MB, kaupunki\: 20MB) +downloadingGeoIp=Ladataan GeoIP tietokantaa ... t\u00e4m\u00e4 voi vied\u00e4 hetken (maa\: 1.7 MB, kaupunki\: 30MB) duplicatedUserdata=Kopioitu k\u00e4ytt\u00e4j\u00e4n tiedot\: {0} ja {1} durability=\u00a77T\u00e4ll\u00e4 ty\u00f6kalulla on \u00a7c{0}\u00a77 k\u00e4ytt\u00f6kertaa j\u00e4ljell\u00e4 editBookContents=\u00a7eVoit nyt muokata t\u00e4m\u00e4n kirjan sis\u00e4lt\u00f6\u00e4. diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 5fa44822f..a9b5ef3df 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=L''invocation de ce monstre a \u00e9t\u00e9 d\u00e9sactiv\u00 disableUnlimited=\u00a77D\u00e9sactivation du placement illimit\u00e9 de {0} pour {1}. distance=\u00a76Distance \: {0} dontMoveMessage=\u00a77La t\u00e9l\u00e9portation commence dans {0}. Ne bougez pas. -downloadingGeoIp=T\u00e9l\u00e9chargement de la base de donn\u00e9es GeoIP... Cela peut prendre un moment (pays \: 0.6 Mo, villes \: 20 Mo) +downloadingGeoIp=T\u00e9l\u00e9chargement de la base de donn\u00e9es GeoIP... Cela peut prendre un moment (pays \: 1.7 Mo, villes \: 30 MB) duplicatedUserdata=Donn\u00e9es utilisateurs dupliqu\u00e9es \: {0} et {1} durability=\u00a77Cet outil a \u00a7c{0}\u00a77 usage(s) restant(s). editBookContents=\u00a7eVous pouvez maintenant \u00e9diter le contenu de ce livre. diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 8c6b497f8..9bd476376 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Ennek a l\u00e9nynek a leh\u00edv\u00e1sa jelenleg le disableUnlimited=\u00a76Disabled unlimited placing of\u00a7c {0} \u00a76for {1}. distance=\u00a76T\u00e1vols\u00e1g\: {0} dontMoveMessage=\u00a76A teleport\u00e1l\u00e1s elkezd\u00f5dik\u00a7c {0}\u00a76 bel\u00fcl. Ne mozogj\! -downloadingGeoIp=GeoIP adatb\u00e1zis let\u00f6lt\u00e9se folyamatban... eltarthat egy kis ideig (country\: 0.6 MB, city\: 20MB) +downloadingGeoIp=GeoIP adatb\u00e1zis let\u00f6lt\u00e9se folyamatban... eltarthat egy kis ideig (country\: 1.7 MB, city\: 30MB) duplicatedUserdata=Duplik\u00e1lt felhaszn\u00e1l\u00f3i adatok\: {0} \u00e9s {1}. durability=\u00a76This tool has \u00a7c{0}\u00a76 uses left editBookContents=\u00a76Mostant\u00f3l tudod szerkeszteni ezt a k\u00f6nyvet. diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index b5d823fc9..3df07a4fa 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74La creazione di questo mob \u00E8 stata disabilitata n disableUnlimited=\u00a76Piazzamento illimitato di\u00a7c {0} \u00a76disabilitato per {1}. distance=\u00a76Distanza\: {0} dontMoveMessage=\u00a77Il teletrasporto inizier\u00E0 tra {0}. Non muoverti. -downloadingGeoIp=Download del database GeoIP... potrebbe richiedere del tempo (nazione\: 0.6 MB, citt\u00E0\: 20MB) +downloadingGeoIp=Download del database GeoIP... potrebbe richiedere del tempo (nazione\: 1.7 MB, citt\u00E0\: 30MB) duplicatedUserdata=Dati dell''utente duplicati\: {0} e {1} durability=\u00a76Questo attrezzo ha \u00a7c{0}\u00a76 utilizzi rimasti editBookContents=\u00a7eOra puoi modificare i contenuti di questo libro. diff --git a/Essentials/src/messages_ko.properties b/Essentials/src/messages_ko.properties index a98afc1d7..4374548b2 100644 --- a/Essentials/src/messages_ko.properties +++ b/Essentials/src/messages_ko.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74\uc774 \ubaac\uc2a4\ud130\uc758 \uc2a4\ud3f0\uc740 \uc disableUnlimited=\u00a77{1}\ub85c {0}\uc758 \ubb34\ud55c\ubc30\uce58 \ube44\ud65c\uc131\ud654 distance=\u00a76\uac70\ub9ac\: {0} dontMoveMessage=\u00a76{0}\ucd08 \ub4a4\uc5d0 \uc774\ub3d9\ub429\ub2c8\ub2e4. \uc6c0\uc9c1\uc774\uba74 \uc774\ub3d9\uc774 \ucde8\uc18c\ub429\ub2c8\ub2e4. -downloadingGeoIp=GeoIP \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub2e4\uc6b4\ubc1b\ub294 \uc911\uc785\ub2c8\ub2e4.... \uc57d\uac04\uc758 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. (\uad6d\uac00\: 0.6 MB, \ub3c4\uc2dc\: 20MB) +downloadingGeoIp=GeoIP \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub2e4\uc6b4\ubc1b\ub294 \uc911\uc785\ub2c8\ub2e4.... \uc57d\uac04\uc758 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. (\uad6d\uac00\: 1.7 MB, \ub3c4\uc2dc\: 30MB) duplicatedUserdata=\uc911\ubcf5\ub41c \uc720\uc800\ub370\uc774\ud130 \: {0} \uc640/\uacfc {1} durability=\u00a76\uc774 \ub3c4\uad6c\ub294 \uc0ac\uc6a9 \uac00\ub2a5 \ud69f\uc218\uac00 s \u00a7c{0}\u00a76\ubc88 \ub0a8\uc558\uc2b5\ub2c8\ub2e4 editBookContents=\u00a7e\uc774\uc81c \uc774 \ucc45\uc758 \ub0b4\uc6a9\uc744 \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. diff --git a/Essentials/src/messages_lt.properties b/Essentials/src/messages_lt.properties index 60e03aeea..7c8bcd3d8 100644 --- a/Essentials/src/messages_lt.properties +++ b/Essentials/src/messages_lt.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Spawning this mob was disabled in the config file. disableUnlimited=\u00a76Disabled unlimited placing of\u00a7c {0} \u00a76for {1}. distance=\u00a76Distance\: {0} dontMoveMessage=\u00a76Teleportacija prasid\u0117s po\u00a7c {0}\u00a76. Nejud\u0117kite. -downloadingGeoIp=Siun\u010diama GeoIP databaze... tai gali \u0161iek tiek u\u017etrukti (Kaime\: 0.6 MB, Mieste\: 20MB) +downloadingGeoIp=Siun\u010diama GeoIP databaze... tai gali \u0161iek tiek u\u017etrukti (Kaime\: 1.7 MB, Mieste\: 30MB) duplicatedUserdata=Duplicated userdata\: {0} and {1}. durability=\u00a76This tool has \u00a7c{0}\u00a76 uses left editBookContents=\u00a7eTu dabar gali redaguoti \u0161ios knygos turin\u012f. diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index 141398274..638b9c18c 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=Het spawnen van mobs is uitgeschakeld in het configuratie bes disableUnlimited=\u00a77Oneindig plaatsen van {0} uitgeschakeld voor {1}. distance=\u00a76Afstand\: {0} dontMoveMessage=\u00a77Beginnen met teleporteren over {0}. Niet bewegen. -downloadingGeoIp=Bezig met downloaden van GeoIP database ... Dit kan een tijdje duren (country\: 0.6 MB, city\: 20MB) +downloadingGeoIp=Bezig met downloaden van GeoIP database ... Dit kan een tijdje duren (country\: 1.7 MB, city\: 30MB) duplicatedUserdata=Dubbele gebruikersdata\: {0} en {1}. durability=\u00a77Dit gereedschap kan nog \u00a7c{0}\u00a77 gebruikt worden. editBookContents=\u00a7eU kunt nu de inhoud van dit boek aanpassen. diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index 1c0ea41ef..279095b06 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74Tworzenie tego moba zosta\u0142o wy\u0142\u0105czone w disableUnlimited=\u00a77Wy\u0142\u0105czone nieograniczone tworzenia\u00a7c {0} \u00a77dla {1}. distance=\u00a77Odleg\u0142o\u015B\u0107\: {0} dontMoveMessage=\u00a77Teleportacja nast\u0105pi za\u00a7a {0}\u00a77. Prosz\u0119 si\u0119 nie rusza\u0107. -downloadingGeoIp=Pobieranie bazy danych GeoIP... To mo\u017Ce zaj\u0105\u0107 chwile (kraj\: 0.6 MB, miasto\: 20MB) +downloadingGeoIp=Pobieranie bazy danych GeoIP... To mo\u017Ce zaj\u0105\u0107 chwile (kraj\: 1.7 MB, miasto\: 30MB) duplicatedUserdata=Kopiowanie danych uzytkownika\: {0} i {1} durability=\u00a76Temu narz\u0119dziu pozosta\u0142o \u00a7c{0}\u00a76 u\u017cy\u0107 editBookContents=\u00a7eNie mo\u017Cesz teraz edytowac tej ksi\u0105\u017Cki. diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index 8f28df2fe..fada04973 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00A74Spawnar este mob foi desativado na configura\u00E7\u00 disableUnlimited=\u00A76Permiss\u00E3o para construir ilimitadamente {0} desativada por\u00A7c {1}. distance=\u00A76Dist\u00E2ncia: {0} dontMoveMessage=\u00A76Teletransporte vai come\u00E7ar em\u00A7c {0}\u00A76. n\u00E3o te mexas. -downloadingGeoIp=A baixar banco de dados GeoIP... pode demorar algum tempo (pa\u00EDs: 0.6 MB, cidade: 20MB) +downloadingGeoIp=A baixar banco de dados GeoIP... pode demorar algum tempo (pa\u00EDs: 1.7 MB, cidade: 30MB) duplicatedUserdata=Dados do usu\u00E1rio em duplicado: {0} e {1}. durability=\u00A76Esta ferramenta ainda pode ser usada mais \u00A7c{0}\u00A76 vezes editBookContents=\u00A7ePodes agora alterar o conte\u00FAdo deste livro. diff --git a/Essentials/src/messages_pt_BR.properties b/Essentials/src/messages_pt_BR.properties index 63bab3b7c..f314bf4a2 100644 --- a/Essentials/src/messages_pt_BR.properties +++ b/Essentials/src/messages_pt_BR.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00A74Spawnar este mob foi desativado na configura\u00E7\u00 disableUnlimited=\u00A76Permiss\u00E3o de colocar coisas ilimitadas desativada para\u00A7c {0} \u00A76por {1}. distance=\u00A76Dist\u00E2ncia\: {0} dontMoveMessage=\u00A76Teleporte vai come\u00E7ar em\u00A7c {0}\u00A76. n\u00E3o se mova. -downloadingGeoIp=Baixando o banco de dados GeoIP... isso pode levar um tempo (pa\u00EDs\: 0.6 MB, cidade\: 20MB) +downloadingGeoIp=Baixando o banco de dados GeoIP... isso pode levar um tempo (pa\u00EDs\: 1.7 MB, cidade\: 30MB) duplicatedUserdata=Dados do usu\u00E1rio duplicado\: {0} e {1}. durability=\u00A76Essa ferramenta ainda pode ser usada mais \u00A7c{0}\u00A76 vezes editBookContents=\u00A7eVoc\u00EA pode agora editar o conte\u00FAdo deste livro. diff --git a/Essentials/src/messages_ru.properties b/Essentials/src/messages_ru.properties index 69adb2cc1..776ce25dd 100644 --- a/Essentials/src/messages_ru.properties +++ b/Essentials/src/messages_ru.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74\u0421\u043f\u0430\u0443\u043d \u0434\u0430\u043d\u043 disableUnlimited=\u00a76\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u00a7c {0} \u00a76\u0434\u043b\u044f {1}. distance=\u00a76\u0414\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f\: {0} dontMoveMessage=\u00a76\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437\u00a7c {0}\u00a76. \u041d\u0435 \u0434\u0432\u0438\u0433\u0430\u0439\u0442\u0435\u0441\u044c. -downloadingGeoIp=\u0418\u0434\u0451\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 GeoIP... \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u0441\u0442\u0440\u0430\u043d\u0430\: 0,6 MB \u0433\u043e\u0440\u043e\u0434\: 20MB) +downloadingGeoIp=\u0418\u0434\u0451\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 GeoIP... \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u0441\u0442\u0440\u0430\u043d\u0430\: 1,7 MB \u0433\u043e\u0440\u043e\u0434\: 30MB) duplicatedUserdata=\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\: {0} and {1}. durability=\u00a76\u042d\u0442\u043e\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u00a7c{0}\u00a76 \u0440\u0430\u0437 editBookContents=\u00a7e\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0438. diff --git a/Essentials/src/messages_sv.properties b/Essentials/src/messages_sv.properties index d9fe382cd..ca30dca19 100644 --- a/Essentials/src/messages_sv.properties +++ b/Essentials/src/messages_sv.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=Att spawna fram den h\u00e4r moben \u00e4r inaktiverat i conf disableUnlimited=\u00a77Inaktiverade o\u00e4ndligt placerande av {0} f\u00f6r {1}. distance=\u00a76Avst\u00e5nd\: {0} dontMoveMessage=\u00a77Teleporteringen p\u00e5b\u00f6rjas om {0}. R\u00f6r dig inte. -downloadingGeoIp=Laddar ner GeoIP-databasen... det h\u00e4r kan ta en stund (land\: 0.6 MB, stad\: 20MB) +downloadingGeoIp=Laddar ner GeoIP-databasen... det h\u00e4r kan ta en stund (land\: 1.7 MB, stad\: 30MB) duplicatedUserdata=Dublicerad anv\u00e4ndardata\: {0} och {1} durability=\u00a77Det h\u00e4r verktyget har \u00a7c{0}\u00a77 anv\u00e4ndningar kvar editBookContents=\u00a7eDu kan nu \u00e4ndra inneh\u00e5llet i denna bok. diff --git a/Essentials/src/messages_zh.properties b/Essentials/src/messages_zh.properties index 8bf9cc77f..ae01b244e 100644 --- a/Essentials/src/messages_zh.properties +++ b/Essentials/src/messages_zh.properties @@ -103,7 +103,7 @@ disabledToSpawnMob=\u00a74\u914d\u7f6e\u6587\u4ef6\u4e2d\u5df2\u7981\u6b62\u6b64 disableUnlimited=\u00a76\u53d6\u6d88\u4e86 {1} \u7684\u65e0\u9650\u653e\u7f6e \u00a7c{0} \u00a76\u7684\u80fd\u529b distance=\u00a76\u8ddd\u79bb\: {0} dontMoveMessage=\u00a76\u4f20\u9001\u5c06\u5728\u00a7c{0}\u00a76\u5185\u5f00\u59cb.\u8bf7\u4e0d\u8981\u79fb\u52a8 -downloadingGeoIp=\u4e0b\u8f7d GeoIP \u6570\u636e\u5e93\u4e2d...\u8fd9\u53ef\u80fd\u9700\u8981\u82b1\u8d39\u4e00\u6bb5\u65f6\u95f4 (\u56fd\u5bb6\:0.6 MB, \u57ce\u5e02\: 20 MB) +downloadingGeoIp=\u4e0b\u8f7d GeoIP \u6570\u636e\u5e93\u4e2d...\u8fd9\u53ef\u80fd\u9700\u8981\u82b1\u8d39\u4e00\u6bb5\u65f6\u95f4 (\u56fd\u5bb6\:1.7 MB, \u57ce\u5e02\: 30 MB) duplicatedUserdata=\u590d\u5236\u4e86\u73a9\u5bb6\u5b58\u6863\:{0} \u548c {1} durability=\u00a76\u8fd9\u4e2a\u5de5\u5177\u8fd8\u6709 \u00a74{0}\u00a76 \u6301\u4e45 editBookContents=\u00a7e\u4f60\u73b0\u5728\u53ef\u4ee5\u7f16\u8f91\u8fd9\u672c\u4e66\u7684\u5185\u5bb9. diff --git a/EssentialsGeoIP/pom.xml b/EssentialsGeoIP/pom.xml index 1f69e5578..b73254602 100644 --- a/EssentialsGeoIP/pom.xml +++ b/EssentialsGeoIP/pom.xml @@ -25,15 +25,20 @@ - + net.ess3 - EssentialsX - ${project.version} + EssentialsX + ${project.version} - com.maxmind.geoip - geoip-api - 1.2.11 + com.maxmind.geoip2 + geoip2 + 0.7.2 + + + javatar + javatar + 2.5 @@ -42,7 +47,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.1 + 3.1.0 package @@ -52,9 +57,13 @@ + true - com.maxmind.geoip:geoip-api + javatar:javatar + com.maxmind.geoip2:geoip2 + com.maxmind.db:maxmind-db + com.fasterxml.jackson.core:* diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java index 8b3bdfb29..cfd0ff9c0 100644 --- a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java +++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java @@ -32,6 +32,6 @@ public class EssentialsGeoIP extends JavaPlugin { pm.registerEvents(playerListener, this); - getLogger().log(Level.INFO, "This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/."); + getLogger().log(Level.INFO, "This product includes GeoLite2 data created by MaxMind, available from http://www.maxmind.com/."); } } diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java index f38ff8c55..e905bd90b 100644 --- a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java +++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java @@ -3,9 +3,10 @@ package com.earth2me.essentials.geoip; import com.earth2me.essentials.EssentialsConf; import com.earth2me.essentials.IConf; import com.earth2me.essentials.User; -import com.maxmind.geoip.Location; -import com.maxmind.geoip.LookupService; -import com.maxmind.geoip.regionName; +import com.maxmind.geoip2.DatabaseReader; +import com.maxmind.geoip2.model.CityResponse; +import com.maxmind.geoip2.model.CountryResponse; +import com.maxmind.geoip2.exception.*; import net.ess3.api.IEssentials; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -20,13 +21,16 @@ import java.net.URL; import java.net.URLConnection; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.Date; import java.util.zip.GZIPInputStream; +import com.ice.tar.TarInputStream; +import com.ice.tar.TarEntry; import static com.earth2me.essentials.I18n.tl; public class EssentialsGeoIPPlayerListener implements Listener, IConf { - LookupService ls = null; + DatabaseReader mmreader = null; // initialize maxmind geoip2 reader private static final Logger logger = Logger.getLogger("Minecraft"); File databaseFile; File dataFolder; @@ -58,22 +62,48 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { } InetAddress address = player.getAddress().getAddress(); StringBuilder sb = new StringBuilder(); - if (config.getBoolean("database.show-cities", false)) { - Location loc = ls.getLocation(address); - if (loc == null) { - return; + String locale = ess.getI18n().getCurrentLocale().toString().replace('_', '-'); // get locale setting from Essentials + try { + if (config.getBoolean("database.show-cities", false)) { + CityResponse response = mmreader.city(address); + if (response == null) { + return; + } + String city; + String region; + String country; + if (config.getBoolean("enable-locale", true)) { + // Get geolocation based on locale. If not avaliable in specific language, get the default one. + city = ((city=response.getCity().getNames().get(locale))!=null) ? city : response.getCity().getName(); + region = ((region=response.getMostSpecificSubdivision().getNames().get(locale))!=null) ? region : response.getMostSpecificSubdivision().getName(); + country = ((country=response.getCountry().getNames().get(locale))!=null) ? country : response.getCountry().getName(); + } else { + // Get geolocation regarding locale setting. + city = response.getCity().getName(); + region = response.getMostSpecificSubdivision().getName(); + country = response.getCountry().getName(); + } + if (city != null) { + sb.append(city).append(", "); + } + if (region != null) { + sb.append(region).append(", "); + } + sb.append(country); + } else { + CountryResponse response = mmreader.country(address); + sb.append(response.getCountry().getNames().get(locale)); + } + } catch (AddressNotFoundException ex) { + // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. + // TODO: Maybe, we can set a new custom msg about addr-not-found in messages.properties. + logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); + //logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getMessage()); + } catch (IOException | GeoIp2Exception ex) { + // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. + logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); + //logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getMessage()); } - if (loc.city != null) { - sb.append(loc.city).append(", "); - } - String region = regionName.regionNameByCode(loc.countryCode, loc.region); - if (region != null) { - sb.append(region).append(", "); - } - sb.append(loc.countryName); - } else { - sb.append(ls.getCountry(address).getName()); - } if (config.getBoolean("show-on-whois", true)) { u.setGeoLocation(sb.toString()); } @@ -92,9 +122,9 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { config.load(); if (config.getBoolean("database.show-cities", false)) { - databaseFile = new File(dataFolder, "GeoIPCity.dat"); + databaseFile = new File(dataFolder, "Geo2-City.mmdb"); } else { - databaseFile = new File(dataFolder, "GeoIP.dat"); + databaseFile = new File(dataFolder, "Geo2-Country.mmdb"); } if (!databaseFile.exists()) { if (config.getBoolean("database.download-if-missing", true)) { @@ -103,9 +133,15 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { logger.log(Level.SEVERE, tl("cantFindGeoIpDB")); return; } + } else if (config.getBoolean("database.update.enable", true)) { + // try to update expired mmdb files + long diff = new Date().getTime() - databaseFile.lastModified(); + if (diff/24/3600/1000>config.getLong("database.update.by-every-x-days")) { + downloadDatabase(); + } } try { - ls = new LookupService(databaseFile); + mmreader = new DatabaseReader.Builder(databaseFile).build(); } catch (IOException ex) { logger.log(Level.SEVERE, tl("cantReadGeoIpDB"), ex); } @@ -129,11 +165,26 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { conn.setConnectTimeout(10000); conn.connect(); InputStream input = conn.getInputStream(); - if (url.endsWith(".gz")) { - input = new GZIPInputStream(input); - } OutputStream output = new FileOutputStream(databaseFile); byte[] buffer = new byte[2048]; + if (url.endsWith(".gz")) { + input = new GZIPInputStream(input); + if (url.endsWith(".tar.gz")) { + // The new GeoIP2 uses tar.gz to pack the db file along with some other txt. So it makes things a bit complicated here. + String filename; + TarInputStream tarInputStream = new TarInputStream(input); + TarEntry entry; + while ((entry = (TarEntry) tarInputStream.getNextEntry()) != null) { + if (!entry.isDirectory()) { + filename = entry.getName(); + if (filename.substring(filename.length() - 5).equalsIgnoreCase(".mmdb")) { + input = tarInputStream; + break; + } + } + } + } + } int length = input.read(buffer); while (length >= 0) { output.write(buffer, 0, length); diff --git a/EssentialsGeoIP/src/config.yml b/EssentialsGeoIP/src/config.yml index 70d7a51ba..b52629a28 100644 --- a/EssentialsGeoIP/src/config.yml +++ b/EssentialsGeoIP/src/config.yml @@ -2,9 +2,14 @@ database: show-cities: false download-if-missing: true # Url for country - download-url: "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz" + download-url: "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz" # Url for cities - download-url-city: "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz" - + download-url-city: "http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz" + update: + enable: true + by-every-x-days: 30 show-on-login: true -show-on-whois: true \ No newline at end of file +show-on-whois: true +# Enable locale on geolocation display. Not all languages are supported. +# Check your Essentials/config.yml "locale" section for details. +enable-locale: true \ No newline at end of file diff --git a/EssentialsGeoIP/src/plugin.yml b/EssentialsGeoIP/src/plugin.yml index 5fc8d7987..e8cb6bf6d 100644 --- a/EssentialsGeoIP/src/plugin.yml +++ b/EssentialsGeoIP/src/plugin.yml @@ -5,5 +5,5 @@ main: com.earth2me.essentials.geoip.EssentialsGeoIP version: ${project.version}-b${build.number} website: http://tiny.cc/EssentialsCommands description: Shows the country or city of a user on login and /whois. -authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology] +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, kjiang] depend: [Essentials] From 738efe8c50b817324c361ea2d178cfc2d2d67bca Mon Sep 17 00:00:00 2001 From: md678685 Date: Sun, 21 Jan 2018 09:37:30 +0000 Subject: [PATCH 008/333] Add Vault prefix/suffix support to EssXChat (#1663) * Add Vault prefix/suffix support to EssXChat Includes an example of how to use it in the config. --- Essentials/src/com/earth2me/essentials/Settings.java | 2 ++ Essentials/src/config.yml | 2 ++ .../chat/EssentialsChatPlayerListenerLowest.java | 9 ++++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 67e6b0a8a..b85aab2aa 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -427,6 +427,8 @@ public class Settings implements net.ess3.api.ISettings { mFormat = mFormat.replace("{TEAMPREFIX}", "{3}"); mFormat = mFormat.replace("{TEAMSUFFIX}", "{4}"); mFormat = mFormat.replace("{TEAMNAME}", "{5}"); + mFormat = mFormat.replace("{PREFIX}", "{6}"); + mFormat = mFormat.replace("{SUFFIX}", "{7}"); mFormat = "ยงr".concat(mFormat); chatFormats.put(group, mFormat); } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index c7223c195..22914bc32 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -647,9 +647,11 @@ chat: # Chat formatting can be done in two ways, you can either define a standard format for all chat. # Or you can give a group specific chat format, to give some extra variation. # For more information of chat formatting, check out the wiki: http://wiki.ess3.net/wiki/Chat_Formatting + # For EssentialsX changes, take a look at the EssentialsX wiki: https://github.com/EssentialsX/Essentials/wiki format: '<{DISPLAYNAME}> {MESSAGE}' #format: '&7[{GROUP}]&r {DISPLAYNAME}&7:&r {MESSAGE}' + #format: '&7{PREFIX}&r {DISPLAYNAME}&r &7{SUFFIX}&r: {MESSAGE}' group-formats: # Default: '{WORLDNAME} {DISPLAYNAME}&7:&r {MESSAGE}' diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java index a3df5215c..d99a099fe 100644 --- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java +++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.User; import com.earth2me.essentials.utils.FormatUtil; import net.ess3.api.IEssentials; import org.bukkit.Server; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.AsyncPlayerChatEvent; @@ -41,7 +42,11 @@ public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer { event.setMessage(FormatUtil.formatMessage(user, "essentials.chat", event.getMessage())); String group = user.getGroup(); String world = user.getWorld().getName(); - Team team = user.getBase().getScoreboard().getPlayerTeam(user.getBase()); + + Player player = user.getBase(); + String prefix = ess.getPermissionsHandler().getPrefix(player); + String suffix = ess.getPermissionsHandler().getSuffix(player); + Team team = player.getScoreboard().getPlayerTeam(player); String format = ess.getSettings().getChatFormat(group); format = format.replace("{0}", group); @@ -50,6 +55,8 @@ public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer { format = format.replace("{3}", team == null ? "" : team.getPrefix()); format = format.replace("{4}", team == null ? "" : team.getSuffix()); format = format.replace("{5}", team == null ? "" : team.getDisplayName()); + format = format.replace("{6}", prefix); + format = format.replace("{7}", suffix); synchronized (format) { event.setFormat(format); } From fcc7c3af78d664b259685044531bec1d323a3088 Mon Sep 17 00:00:00 2001 From: "U-NIFLHEIM\\Lax" Date: Fri, 29 Dec 2017 06:33:04 -0800 Subject: [PATCH 009/333] Per-user toggles disabled by default --- .../src/com/earth2me/essentials/UserData.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 7ea09b3e9..d38b3ef19 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -100,7 +100,7 @@ public abstract class UserData extends PlayerExtension implements IConf { BigDecimal result = ess.getSettings().getStartingBalance(); BigDecimal maxMoney = ess.getSettings().getMaxMoney(); BigDecimal minMoney = ess.getSettings().getMinMoney(); - + // NPC banks are not actual player banks, as such they do not have player starting balance. if (isNPC()) { result = BigDecimal.ZERO; @@ -806,7 +806,7 @@ public abstract class UserData extends PlayerExtension implements IConf { if (!config.isConfigurationSection("timestamps.command-cooldowns")) { return null; } - + // See saveCommandCooldowns() for deserialization explanation List> section = config.getMapList("timestamps.command-cooldowns"); HashMap result = new HashMap<>(); @@ -845,19 +845,19 @@ public abstract class UserData extends PlayerExtension implements IConf { saveCommandCooldowns(); } } - + public boolean clearCommandCooldown(Pattern pattern) { if (this.commandCooldowns == null) { return false; // false for no modification } - + if(this.commandCooldowns.remove(pattern) != null) { saveCommandCooldowns(); return true; } return false; } - + private void saveCommandCooldowns() { // Serialization explanation: // @@ -898,10 +898,10 @@ public abstract class UserData extends PlayerExtension implements IConf { save(); } - private boolean confirmPay = true; // players accept pay confirmation by default + private boolean confirmPay = false; // players deny pay confirmation by default public boolean _getConfirmPay() { - return config.getBoolean("confirm-pay", true); + return config.getBoolean("confirm-pay", false); } public boolean isPromptingPayConfirm() { @@ -914,10 +914,10 @@ public abstract class UserData extends PlayerExtension implements IConf { save(); } - private boolean confirmClear = true; // players accept clear confirmation by default + private boolean confirmClear = false; // players deny clear confirmation by default public boolean _getConfirmClear() { - return config.getBoolean("confirm-clear", true); + return config.getBoolean("confirm-clear", false); } public boolean isPromptingClearConfirm() { From e38b15531d056d11452db5fb9091c79511d7745d Mon Sep 17 00:00:00 2001 From: md678685 Date: Mon, 22 Jan 2018 09:20:31 +0000 Subject: [PATCH 010/333] Add jailList and noJailsDefined to messages and Commandjails (#1732) * Add jailList and noJailsDefined to messages and Commandjails * Sort message keys alphabetically --- .../com/earth2me/essentials/commands/Commandjails.java | 10 +++++++++- Essentials/src/messages.properties | 2 ++ Essentials/src/messages_cs.properties | 2 ++ Essentials/src/messages_da.properties | 2 ++ Essentials/src/messages_de.properties | 2 ++ Essentials/src/messages_en.properties | 2 ++ Essentials/src/messages_es.properties | 2 ++ Essentials/src/messages_et.properties | 2 ++ Essentials/src/messages_fi.properties | 2 ++ Essentials/src/messages_fr.properties | 2 ++ Essentials/src/messages_hu.properties | 2 ++ Essentials/src/messages_it.properties | 2 ++ Essentials/src/messages_ko.properties | 2 ++ Essentials/src/messages_lt.properties | 2 ++ Essentials/src/messages_nl.properties | 2 ++ Essentials/src/messages_pl.properties | 2 ++ Essentials/src/messages_pt.properties | 2 ++ Essentials/src/messages_pt_BR.properties | 2 ++ Essentials/src/messages_ro.properties | 2 ++ Essentials/src/messages_ru.properties | 2 ++ Essentials/src/messages_sv.properties | 2 ++ Essentials/src/messages_tr.properties | 2 ++ Essentials/src/messages_zh.properties | 2 ++ Essentials/src/messages_zh_HK.properties | 2 ++ Essentials/src/messages_zh_TW.properties | 2 ++ 25 files changed, 57 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandjails.java b/Essentials/src/com/earth2me/essentials/commands/Commandjails.java index 3ee469712..e48bf2153 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandjails.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandjails.java @@ -4,6 +4,10 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.utils.StringUtil; import org.bukkit.Server; +import java.util.Collection; + +import static com.earth2me.essentials.I18n.tl; + public class Commandjails extends EssentialsCommand { public Commandjails() { @@ -12,6 +16,10 @@ public class Commandjails extends EssentialsCommand { @Override protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { - sender.sendMessage("ยง7" + StringUtil.joinList(" ", ess.getJails().getList())); + if (ess.getJails().getCount() < 1) { + sender.sendMessage(tl("noJailsDefined")); + } else { + sender.sendMessage(tl("jailList", StringUtil.joinList(" ", ess.getJails().getList()))); + } } } diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index a15441d69..5763f0c49 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7asold {1} for \u00a7a{2} \u00a7a({3} items at { itemSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} itemType=\u00a76Item\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Person is already in jail\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74You do the crime, you do the time. jailNotExist=\u00a74That jail does not exist. jailReleased=\u00a76Player \u00a7c{0}\u00a76 unjailed. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Warning\! God mode in this world disabled. noHelpFound=\u00a74No matching commands. noHomeSetPlayer=\u00a76Player has not set a home. noIgnored=\u00a76You are not ignoring anyone. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74You do not have access to this kit. noKitPermission=\u00a74You need the \u00a7c{0}\u00a74 permission to use that kit. noKits=\u00a76There are no kits available yet. diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index d8c195dd5..1d1de5060 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7aProdano {1} za \u00a7a{2} \u00a7a({3} za cenu itemSpawn=\u00a76Davam\u00a7c {0}\u00a7c {1} itemType=\u00a76Predmet\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Tento hrace ja jiz uveznen\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Porusil jsi pravidla, ted si to odsedis\! jailNotExist=\u00a74Toto vezeni neexistuje. jailReleased=\u00a76Hrac \u00a7c{0}\u00a76 byl propusten na svobodu. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Varovani\! God-mode je v tomto svete zakazan. noHelpFound=\u00a74Zadne shodne prikazy. noHomeSetPlayer=\u00a76Hrac nema nastaveny domov. noIgnored=\u00a76Nikoho neignorujes. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Nemas opravneni na tento kit. noKitPermission=\u00a74Potrebujes \u00a7c{0}\u00a74 opravneni, aby jsi mohl/a pouzit tento kit. noKits=\u00a76Nejsou zadne dostupne kity. diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index dd4d1b289..e7528e4aa 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7asolgt {1} for \u00a7a{2} \u00a7a({3} elementer itemSpawn=\u00a76Giver\u00a7c {0} \u00a76af\u00a7c {1} itemType=\u00a76Element\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Spilleren er allerede i f\u00e6ngsel\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a7cDu bryder reglerne, du tager straffen. jailNotExist=\u00a74Det f\u00e6ngsel eksisterer ikke. jailReleased=\u00a76Spilleren \u00a7c{0}\u00a76 er fjernet fra f\u00e6ngslet. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Advarsel\! Gud-tilstand er deaktiveret i denne verden. noHelpFound=\u00a74Ingen matchende kommandoer. noHomeSetPlayer=\u00a76Spilleren har ikke sat et hjem. noIgnored=\u00a76Du ignorerer ingen. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Du har ikke adgang til dette kit. noKitPermission=\u00a74Du mangler f\u00f8lgende tilladelse for at bruge det kit\: \u00a7c{0}\u00a74 noKits=\u00a76Der er ingen tilg\u00e6ngelige kits endnu. diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index 3e291f8c6..b7c16b9b7 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} $averkauft {1} f\u00fcr \u00a7a{2} \u00a7a({3} Einhei itemSpawn=\u00a76Gebe\u00a7c {0}\u00a76x\u00a7c {1} itemType=\u00a76Gegenstand\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Spieler ist bereits im Gef\u00e4ngnis\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Du hast ein Verbrechen begangen, also musst du deine Zeit absitzen. jailNotExist=\u00a74Dieses Gef\u00e4ngnis existiert nicht. jailReleased=\u00a76Spieler \u00a7c{0}\u00a76 wurde freigelassen. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Warnung\! Unsterblichkeitsmodus ist in dieser Welt deak noHelpFound=\u00a74Keine \u00fcbereinstimmenden Befehle. noHomeSetPlayer=\u00a76Spieler hat kein Zuhause gesetzt. noIgnored=\u00a76Du ignorierst niemanden. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Du hast auf diese Ausr\u00fcstung keinen Zugriff. noKitPermission=\u00a74Du brauchst die Berechtigung \u00a7c{0}\u00a74 um diese Ausr\u00fcstung anzufordern. noKits=\u00a76Es sind keine Ausr\u00fcstungen verf\u00fcgbar. diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 8db35bd7a..15a0e7e09 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7asold {1} for \u00a7a{2} \u00a7a({3} items at { itemSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} itemType=\u00a76Item\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Person is already in jail\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74You do the crime, you do the time. jailNotExist=\u00a74That jail does not exist. jailReleased=\u00a76Player \u00a7c{0}\u00a76 unjailed. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Warning\! God mode in this world disabled. noHelpFound=\u00a74No matching commands. noHomeSetPlayer=\u00a76Player has not set a home. noIgnored=\u00a76You are not ignoring anyone. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74You do not have access to this kit. noKitPermission=\u00a74You need the \u00a7c{0}\u00a74 permission to use that kit. noKits=\u00a76There are no kits available yet. diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index 6a1e50c5f..ca7607e05 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -223,6 +223,7 @@ itemSoldConsole={0} Vendio {1} por\u00a77 {2} \u00a77({3} objetos a {4} cada uno itemSpawn=\u00a76Dando {0} de {1} itemType=\u00a76Objeto\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Ese jugador ya est\u00e1 en la c\u00e1rcel\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a7c\u00a1Por el crimen hacer, a la c\u00e1rcel ir\u00e1s\! jailNotExist=\u00a74Esa c\u00e1rcel no existe. jailReleased=\u00a76El jugador \u00a7c{0}\u00a76 ha salido de la c\u00e1rcel. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74\u00a1Advertencia\! El modo dios ha sido desactivado en noHelpFound=\u00a74No hay comandos relacionados. noHomeSetPlayer=\u00a76El jugador no ha establecido hogares. noIgnored=\u00a76No est\u00e1s ignorando a nadie. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74No tienes acceso a este kit. noKitPermission=\u00a7cNecesitas el permiso \u00a74{0}\u00a7c para usar ese kit. noKits=\u00a77No hay kits disponibles a\u00fan. diff --git a/Essentials/src/messages_et.properties b/Essentials/src/messages_et.properties index e47e41d38..630f2f2ee 100644 --- a/Essentials/src/messages_et.properties +++ b/Essentials/src/messages_et.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7am\u00fc\u00fcs {1} hinnaga \u00a7a{2} \u00a7a( itemSpawn=\u00a76Annan\u00a7c {0}\u00a7c {1}\u00a76-i itemType=\u00a76Ese\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74M\u00e4ngija on juba vanglas\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Sooritad kuriteo, oled vangis ka. jailNotExist=\u00a74Selline vangla ei ole olemas. jailReleased=\u00a76M\u00e4ngija \u00a7c{0}\u00a76 vabastatud. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Hoiatus\! Jumalare\u017eiim ei ole selles maailmas luba noHelpFound=\u00a74Klappivaid k\u00e4ske ei ole. noHomeSetPlayer=\u00a76M\u00e4ngija ei ole m\u00e4\u00e4ranud kodu. noIgnored=\u00a76Te ei ignoreeri mitte kedagi. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Sul ei ole juurdep\u00e4\u00e4su sellele abipakile. noKitPermission=\u00a74Te vajate \u00a7c{0}\u00a74 luba, et kasutada seda abipakki. noKits=\u00a76\u00dchtegi abipakki ei ole hetkel saadaval. diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index d55f908e4..f216868c0 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -223,6 +223,7 @@ itemSoldConsole={0} sold {1} for \u00a77{2} \u00a77({3} items at {4} each) itemSpawn=\u00a77Annetaan {0} kpl {1} itemType=\u00a76Item\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a7cPelaaja on jo vankilassa\: {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a7cSin\u00e4 teet rikoksen, istut my\u00f6s sen mukaan. jailNotExist=Tuota vankilaa ei ole olemassa. jailReleased=\u00a77Pelaaja \u00a7e{0}\u00a77 vapautettu. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a7cVaroitus\! God muoto ei ole k\u00e4yt\u00f6ss\u00e4 t\u noHelpFound=\u00a7cEi komentoja. noHomeSetPlayer=Pelaaja ei ole asettanut kotia. noIgnored=\u00a76You are not ignoring anyone. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74You do not have access to this kit. noKitPermission=\u00a7cTarvitset \u00a7c{0}\u00a7c oikeuden, jotta voit k\u00e4ytt\u00e4\u00e4 tuota pakkausta. noKits=\u00a77Ei pakkauksia saatavilla viel\u00e4 diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index a9b5ef3df..30ebda267 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -223,6 +223,7 @@ itemSoldConsole={0} vendu {1} pour \u00a77{2} \u00a77({3} objet(s) \u00e0 {4} ch itemSpawn=\u00a77Donne {0} de {1} itemType=\u00a76Item \:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a7cJoueur d\u00e9j\u00e0 emprisonn\u00e9 \: {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a7cVous avez commis un crime, vous en payez le prix. jailNotExist=Cette prison n''existe pas. jailReleased=\u00a77Joueur \u00a7e{0}\u00a77 lib\u00e9r\u00e9. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a7cAttention \! Le mode dieu est d\u00e9sactiv\u00e9 dans noHelpFound=\u00a7cAucune commande correspondante. noHomeSetPlayer=Le joueur n''a pas d\u00e9fini sa r\u00e9sidence. noIgnored=\u00a76Vous n''ignorez personne. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Vous n''avez pas acc\u00e8 \u00e0 ce kit. noKitPermission=\u00a7cVous avez besoin de la permission \u00a7c{0}\u00a7c pour utiliser ce kit. noKits=\u00a77Il n''y a pas encore de kits disponibles. diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 9bd476376..824fd7af3 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7asold {1} for \u00a7a{2} \u00a7a({3} items at { itemSpawn=\u00a76Lek\u00e9rt\u00e9l\u00a7c {0} \u00a76db \u00a7c {1}-t itemType=\u00a76T\u00e1rgy\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Person is already in jail\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74You do the crime, you do the time. jailNotExist=\u00a74Nincs ilyen b\u00f6rt\u00f6n. jailReleased=\u00a7c{0}\u00a76 kiengedve a b\u00f6rt\u00f6nb\u00f5l. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Vigy\u00e1zat\! Az Isten m\u00f3d ebben a vil\u00e1gba noHelpFound=\u00a74No matching commands. noHomeSetPlayer=\u00a76Player has not set a home. noIgnored=\u00a76Nem hagysz figyelmen k\u00edv\u00fcl senkit. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Nincs jogod ehhez a csomaghoz. noKitPermission=\u00a74You need the \u00a7c{0}\u00a74 permission to use that kit. noKits=\u00a76There are no kits available yet. diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index 3df07a4fa..aa88fa73b 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7aha venduto {1} per \u00a7a{2} \u00a7a({3} ogge itemSpawn=\u00a76Dati\u00a7c {0} \u00a76di\u00a7c {1} itemType=\u00a76Oggetto\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Giocatore gi\u00E0 in prigione\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Avrai tempo per riflettere... in prigione. jailNotExist=\u00a74Quella prigione non esiste. jailReleased=\u00a76Il giocatore \u00a7c{0}\u00a76 \u00E8 stato scarcerato. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Attenzione\! Modalit\u00E0 Dio disabilitata in questo m noHelpFound=\u00a74Nessun comando corrispondente trovato. noHomeSetPlayer=\u00a76Il giocatore non ha impostato una casa. noIgnored=\u00a76Non stai ignorando nessuno. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Non hai accesso a questo kit kit. noKitPermission=\u00a74Hai bisogno del permesso \u00a7c{0}\u00a74 per utilizzare quel kit. noKits=\u00a76Non \u00E8 ancora disponibile alcun kit. diff --git a/Essentials/src/messages_ko.properties b/Essentials/src/messages_ko.properties index 4374548b2..4161c29df 100644 --- a/Essentials/src/messages_ko.properties +++ b/Essentials/src/messages_ko.properties @@ -223,6 +223,7 @@ itemSoldConsole={0} \ud310\ub9e4 {1} \uc758 \u00a77 {2} \u00a77 ({3} \uc544\uc77 itemSpawn=\u00a77\uc544\uc774\ud15c {1}\uc744/\ub97c {0}\uac1c \uc90d\ub2c8\ub2e4. itemType=\u00a76\uc544\uc774\ud15c\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74\uc0ac\ub78c\uc774 \uc774\ubbf8 \uac10\uc625\uc5d0 \uc788\uc74c\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a7c\ub2f9\uc2e0\uc740 \ubc94\uc8c4\ub97c \uc800\uc9c0\ub974\uace0\uc788\uc2b5\ub2c8\ub2e4, \ub2f9\uc2e0\uc740 \uc2dc\uac04\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. jailNotExist=\u00a74\ud574\ub2f9 \uac10\uc625\uc740 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. jailReleased=\u00a76\uc720\uc800 \u00a7c{0}\u00a76\ub294 \uac10\uc625\uc5d0\uc11c \uc11d\ubc29\ub418\uc5c8\uc2b5\ub2c8\ub2e4. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74\uc8fc\uc758\! \uc774 \uc6d4\ub4dc\uc5d0\uc11c \ubb34\u noHelpFound=\u00a74\uc77c\uce58\ud558\ub294 \uba85\ub839\uc5b4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. noHomeSetPlayer=\ud574\ub2f9 \ud50c\ub808\uc774\uc5b4\ub294 \uc9d1 \uc124\uc815\uc774 \ub418\uc5b4\uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. noIgnored=\u00a76\ub2f9\uc2e0\uc774 \ubb34\uc2dc\ud558\ub294 \uc720\uc800\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74\ub2f9\uc2e0\uc740 \uc774 \ud0b7\uc5d0 \ub300\ud558\uc5ec \uc811\uadfc \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. noKitPermission=\u00a7c\ud574\ub2f9 \ud0a4\ud2b8\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc120 \u00a7c{0}\u00a7c \uad8c\ud55c\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. noKits=\u00a77\uc544\uc9c1 \uc0ac\uc6a9\uac00\ub2a5\ud55c \ud0a4\ud2b8\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. diff --git a/Essentials/src/messages_lt.properties b/Essentials/src/messages_lt.properties index 7c8bcd3d8..136b9534b 100644 --- a/Essentials/src/messages_lt.properties +++ b/Essentials/src/messages_lt.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7asold {1} for \u00a7a{2} \u00a7a({3} items at { itemSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} itemType=\u00a76Item\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74\u017daid\u0117jas jau yra kal\u0117jime\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Padarei nusikaltim\u0105, laikas atpirkti nuod\u0117mes. jailNotExist=\u00a74\u0160is kal\u0117jimas neegzistuoja. jailReleased=\u00a76\u017daid\u0117jas \u00a7c{0}\u00a76 buvo i\u0161laisvintas. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Warning\! God mode in this world disabled. noHelpFound=\u00a74No matching commands. noHomeSetPlayer=\u00a76\u017daid\u0117jas n\u0117ra nusistat\u0119s nam\u0173. noIgnored=\u00a76Tu nieko neignoruoji. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Tu neturi teisi\u0173 \u0161iam rinkiniui. noKitPermission=\u00a74Tau reikia \u00a7c{0}\u00a74 teis\u0117s, kad naudotum \u0161\u012f rinkin\u012f. noKits=\u00a76N\u0117ra galim\u0173 rinkini\u0173 dabar. diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index 638b9c18c..7e552a637 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -223,6 +223,7 @@ itemSoldConsole={0} verkocht {1} voor \u00a77{2} \u00a77({3} voorwerpen voor {4} itemSpawn=\u00a77Geeft {0} {1} itemType=\u00a76Voorwerp\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Deze persoon zit al in de gevangenis\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74U begaat een misdrijf, U zit uw tijd uit. jailNotExist=\u00a74Die gevangenis bestaat niet. jailReleased=\u00a76Speler \u00a7c{0}\u00a76 vrijgelaten. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a7cWaarschuwing\! God modus is uitgeschakeld in deze werel noHelpFound=\u00a7cGeen overeenkomende commandos. noHomeSetPlayer=Speler heeft geen home. noIgnored=\u00a76U negeert niemand. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74U heeft geen toestemming om deze kit te gebruiken. noKitPermission=\u00a74U heeft de \u00a7c{0}\u00a74 toestemming nodig om die kit te gebruiken. noKits=\u00a77Er zijn nog geen kits beschikbaar. diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index 279095b06..57e8f51fa 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7aSprzedano {1} za \u00a7a{2} \u00a7a({3} sztuki itemSpawn=\u00a77Otrzymano\u00a7c {0} \u00a77z\u00a7c {1} itemType=\u00a77Przedmiot\:\u00a7c {0} \u00a77-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Ten gracz jest ju\u017C w wi\u0119zieniu \u00a7c{0} \u00a74. +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Za ka\u017Cde przewinienie czeka Cie kara. jailNotExist=\u00a74Nie ma takiego wi\u0119zienia. jailReleased=\u00a77Gracz \u00a7c{0}\u00a77 zosta\u0142 wypuszczony z wi\u0119zienia. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Uwaga\! Godmode jest wy\u0142\u0105czony w tym \u015Bwi noHelpFound=\u00a74Nie ma odpowiadajacych komend. noHomeSetPlayer=\u00a77Gracz nie ma ustawionego domu. noIgnored=\u00a77Nikogo nie ignorujesz. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Nie masz dost\u0119pu do tego zestawu. noKitPermission=\u00a74Musisz posiadac uprawnienia \u00a7c{0}\u00a74 aby u\u017Cywa\u0107 tego zestawu. noKits=\u00a77Nie ma jeszcze dost\u0119pnych zestaw\u00F3w. diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index fada04973..f98e0ccc4 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00A7a{0} \u00A7avendeu {1} por \u00A7a{2} \u00A7a({3} itens a itemSpawn=\u00A76A dar\u00A7c {0}\u00A7c {1} itemType=\u00A76Itens:\u00A7c {0} \u00A76-\u00A7c {1} jailAlreadyIncarcerated=\u00A74Esse jogador j\u00E1 est\u00E1 na pris\u00E3o:\u00A7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00A74Foste condenado. Pensa bem antes de voltares a fazer o que fizeste. jailNotExist=\u00A74Essa pris\u00E3o n\u00E3o existe. jailReleased=\u00A76O jogador \u00A7c{0}\u00A76 foi libertado. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00A74Cuidado! O modo deus n\u00E3o est\u00E1 desativado nes noHelpFound=\u00A74Nenhum comando corresponde. noHomeSetPlayer=\u00A76O jogador n\u00E3o definiu uma casa. noIgnored=\u00A76N\u00E3o est\u00E1s a ignorar ningu\u00E9m. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00A74 N\u00E3o tens acesso a este kit. noKitPermission=\u00A74Precisas da permiss\u00E3o \u00A7c{0}\u00A74 para usar esse kit. noKits=\u00A76Ainda n\u00E3o existem kits dispon\u00EDveis. diff --git a/Essentials/src/messages_pt_BR.properties b/Essentials/src/messages_pt_BR.properties index f314bf4a2..b38087df7 100644 --- a/Essentials/src/messages_pt_BR.properties +++ b/Essentials/src/messages_pt_BR.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00A7a{0} \u00A7avendeu {1} por \u00A7a{2} \u00A7a({3} itens a itemSpawn=\u00A76Dando\u00A7c {0}\u00A7c {1} itemType=\u00A76Item\:\u00A7c {0} \u00A76-\u00A7c {1} jailAlreadyIncarcerated=\u00A74Essa pessoa j\u00E1 est\u00E1 na cadeia\:\u00A7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00A74Voc\u00EA foi condenado. Pense bem antes de fazer o que fez. jailNotExist=\u00A74Essa cadeia n\u00E3o existe. jailReleased=\u00A76Jogador \u00A7c{0}\u00A76 liberado. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00A74Cuidado\! Modo deus n\u00E3o est\u00E1 desativado nesse noHelpFound=\u00A74Nenhum comando correspondendo. noHomeSetPlayer=\u00A76Jogador n\u00E3o definiu uma casa. noIgnored=\u00A76Voc\u00EA n\u00E3o est\u00E1 ignorando ningu\u00E9m. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00A74Voc\u00EA n\u00E3o tem acesso a este kit. noKitPermission=\u00A74Voc\u00EA precisa da permiss\u00E3o \u00A7c{0}\u00A74 para usar esse kit. noKits=\u00A76N\u00E3o existem kits dispon\u00EDveis ainda. diff --git a/Essentials/src/messages_ro.properties b/Essentials/src/messages_ro.properties index f94096a7c..fecc04bce 100644 --- a/Essentials/src/messages_ro.properties +++ b/Essentials/src/messages_ro.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7aa vandut {1} pentru \u00a7a{2} \u00a7a({3} obi itemSpawn=\u00a76Ai primit\u00a7c {0} \u00a76bucata(ti) de\u00a7c {1} itemType=\u00a76Obiect\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Acest jucator este deja in inchisoare\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Incalci reguli, trebuie sa platesti. jailNotExist=\u00a74Aceasta inchisoare nu exista. jailReleased=\u00a76Jucatorul \u00a7c{0}\u00a76 a fost eliberat. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Avertisment\! Modul GOD este dezactivat in aceasta lume noHelpFound=\u00a74Nici o comanda nu se potriveste. noHomeSetPlayer=\u00a76Jucatorul nu are setata casa. noIgnored=\u00a76Tu nu ignori pe nimeni. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Nu ai acces la acest kit. noKitPermission=\u00a74Ai nevoie de permisiunea \u00a7c{0}\u00a74 pentru a utiliza acest kit. noKits=\u00a76Nu sunt kituri valabile inca. diff --git a/Essentials/src/messages_ru.properties b/Essentials/src/messages_ru.properties index 776ce25dd..81df3ccd8 100644 --- a/Essentials/src/messages_ru.properties +++ b/Essentials/src/messages_ru.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7a\u043f\u0440\u043e\u0434\u0430\u043b {1} \u043 itemSpawn=\u00a76\u0412\u044b\u0434\u0430\u043d\u043e\u00a7c {0} \u00a76\u0448\u0442\u0443\u043a\u00a7c {1} itemType=\u00a76\u041f\u0440\u0435\u0434\u043c\u0435\u0442\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74\u0438\u0433\u0440\u043e\u043a \u0443\u0436\u0435 \u0432 \u0442\u044e\u0440\u044c\u043c\u0435\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74\u0412\u044b \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 \u0442\u044e\u0440\u044c\u043c\u0443. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u043e\u0442\u0434\u044b\u0445\u0430\! jailNotExist=\u00a74\u042d\u0442\u043e\u0439 \u0442\u044e\u0440\u044c\u043c\u044b \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. jailReleased=\u00a76\u0418\u0433\u0440\u043e\u043a \u00a7c{0}\u00a76 \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u043d\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u0443. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\! \u04 noHelpFound=\u00a74\u041a\u043e\u043c\u0430\u043d\u0434 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e. noHomeSetPlayer=\u00a76\u0418\u0433\u0440\u043e\u043a \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u043c\u0430. noIgnored=\u00a76\u0422\u0435\u043f\u0435\u0440\u044c \u0412\u044b \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0435. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74\u0423 \u0412\u0430\u0441 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443. noKitPermission=\u00a74\u0423 \u0412\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u00a7c{0}\u00a74 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430. noKits=\u00a76\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432. diff --git a/Essentials/src/messages_sv.properties b/Essentials/src/messages_sv.properties index ca30dca19..65394f9b2 100644 --- a/Essentials/src/messages_sv.properties +++ b/Essentials/src/messages_sv.properties @@ -223,6 +223,7 @@ itemSoldConsole={0} s\u00e5lde {1} f\u00f6r \u00a77{2} \u00a77({3} saker f\u00f6 itemSpawn=\u00a77Ger {0} stycken {1} itemType=Objekt\: {0} - {1} jailAlreadyIncarcerated=\u00a7cPersonen \u00e4r redan i f\u00e4ngelse\: {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a7cBryter du mot reglerna, f\u00e5r du st\u00e5 ditt kast. jailNotExist=Det f\u00e4ngelset finns inte. jailReleased=\u00a77Spelaren \u00a7e{0}\u00a77 \u00e4r frisl\u00e4ppt. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a7cVarning\! Od\u00f6dlighet i den h\u00e4r v\u00e4rlden \ noHelpFound=\u00a7cInga matchande kommandon. noHomeSetPlayer=Den h\u00e4r spelaren har inte ett hem. noIgnored=\u00a76Du ignorerar inte n\u00e5gon. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Du har inte tillg\u00e5ng till detta kit. noKitPermission=\u00a7cDu beh\u00f6ver \u00a7c{0}\u00a7c tillst\u00e5nd f\u00f6r att anv\u00e4nda det kitet. noKits=\u00a77Det finns inga kits tillg\u00e4ngliga \u00e4n diff --git a/Essentials/src/messages_tr.properties b/Essentials/src/messages_tr.properties index a63753c6d..f85773b0e 100644 --- a/Essentials/src/messages_tr.properties +++ b/Essentials/src/messages_tr.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7a{0} \u00a7aSatildi {1} , \u00a7a{2} \u00a7a({3} , {4}). itemSpawn=\u00a76Verilmekte\u00a7c {0} \u00a76-\u00a7c {1} itemType=\u00a76Esya ve Araclar\:\u00a7c {0} \u00a76-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Bu Oyuncu Zaten Hapse Mahkum\:\u00a7c {0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74Cezalandirildin Lutfen Kurallara Dikkat Et\! jailNotExist=\u00a74Boyle Bir Hapishane Noktasi Yok. jailReleased=\u00a76Oyuncu \u00a7c{0}\u00a76 Hapis Cezasi Bitti Veya Kaldirildi. @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74Dikkat Bu Dunyada Olumsuzluk Aktif Degil\! noHelpFound=\u00a74Eslesen Komut Yok\! noHomeSetPlayer=\u00a76Olusturulmus Hic Evi Yok\! noIgnored=\u00a76Hi\u00e7 kimseyi g\u00f6z ardi etmiyorsun. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74Bu alet setine erisebilmek icin gerekli izinin yok. noKitPermission=\u00a74Bu Kiti Kullanmak Icin VIP Satin Almaniz Gerekir\! noKits=\u00a76Hic Kit Yok\! diff --git a/Essentials/src/messages_zh.properties b/Essentials/src/messages_zh.properties index ae01b244e..b369f3b9d 100644 --- a/Essentials/src/messages_zh.properties +++ b/Essentials/src/messages_zh.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7c{0} \u00a76\u5356\u51fa\u4e86 {1},\u83b7\u5f97\u4e86\u00a itemSpawn=\u00a76\u751f\u6210 {0} \u4e2a {1} itemType=\u00a76\u7269\u54c1\:\u00a7c {0} \u00a76-\u00a74 {1} jailAlreadyIncarcerated=\u00a74\u5df2\u5728\u76d1\u72f1\u4e2d\u7684\u73a9\u5bb6\:{0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74\u8bf7\u5728\u76d1\u72f1\u4e2d\u9762\u58c1\u601d\u8fc7\uff01 jailNotExist=\u00a74\u8be5\u76d1\u72f1\u4e0d\u5b58\u5728 jailReleased=\u00a76\u73a9\u5bb6 \u00a7c{0}\u00a76 \u51fa\u72f1\u4e86 @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74\u7981\u6b62\u4f7f\u7528\u4e0a\u5e1d\u6a21\u5f0f. noHelpFound=\u00a74\u6ca1\u6709\u5339\u914d\u7684\u547d\u4ee4 noHomeSetPlayer=\u00a76\u8be5\u73a9\u5bb6\u8fd8\u672a\u8bbe\u7f6e\u5bb6 noIgnored=\u00a76\u4f60\u6ca1\u6709\u5ffd\u7565\u4efb\u4f55\u4eba. +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74\u4f60\u6ca1\u6709\u4f7f\u7528\u8fd9\u4e2a\u5de5\u5177\u5305\u7684\u6743\u9650. noKitPermission=\u00a74\u4f60\u9700\u8981 \u00a74{0}\u00a74 \u6743\u9650\u6765\u4f7f\u7528\u8be5\u5de5\u5177 noKits=\u00a76\u8fd8\u6ca1\u6709\u53ef\u83b7\u5f97\u7684\u5de5\u5177 diff --git a/Essentials/src/messages_zh_HK.properties b/Essentials/src/messages_zh_HK.properties index 72bded31f..c6ef503ee 100644 --- a/Essentials/src/messages_zh_HK.properties +++ b/Essentials/src/messages_zh_HK.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7c{0} \u00a76\u8ce3\u51fa\u4e86 {1},\u7372\u5f97\u4e86\u00a itemSpawn=\u00a76\u751f\u6210 {0} \u500b {1} itemType=\u00a76\u7269\u54c1\:\u00a7c {0} \u00a76-\u00a74 {1} jailAlreadyIncarcerated=\u00a74\u5df2\u5728\u76e3\u7344\u4e2d\u7684\u73a9\u5bb6\:{0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74\u8acb\u5728\u76e3\u7344\u4e2d\u9762\u58c1\u601d\u904e\uff01 jailNotExist=\u00a74\u8a72\u76e3\u7344\u4e0d\u5b58\u5728 jailReleased=\u00a76\u73a9\u5bb6 \u00a7c{0}\u00a76 \u51fa\u7344\u4e86 @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74\u7981\u6b62\u4f7f\u7528\u4e0a\u5e1d\u6a21\u5f0f. noHelpFound=\u00a74\u6c92\u6709\u5339\u914d\u7684\u547d\u4ee4 noHomeSetPlayer=\u00a76\u8a72\u73a9\u5bb6\u9084\u672a\u8a2d\u7f6e\u5bb6 noIgnored=\u00a76\u4f60\u6c92\u6709\u5ffd\u7565\u4efb\u4f55\u4eba\u3002 +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74\u4f60\u6c92\u6709\u6b0a\u9650\u4f7f\u7528\u9019\u500b\u5de5\u5177\u7d44. noKitPermission=\u00a74\u4f60\u9700\u8981 \u00a74{0}\u00a74 \u6b0a\u9650\u4f86\u4f7f\u7528\u8a72\u5de5\u5177 noKits=\u00a76\u9084\u6c92\u6709\u53ef\u7372\u5f97\u7684\u5de5\u5177 diff --git a/Essentials/src/messages_zh_TW.properties b/Essentials/src/messages_zh_TW.properties index 20fb03273..e9bf50648 100644 --- a/Essentials/src/messages_zh_TW.properties +++ b/Essentials/src/messages_zh_TW.properties @@ -223,6 +223,7 @@ itemSoldConsole=\u00a7c{0} \u00a76\u8ce3\u51fa\u4e86 {1},\u7372\u5f97\u4e86\u00a itemSpawn=\u00a76\u751f\u6210 {0} \u500b {1} itemType=\u00a76\u7269\u54c1\:\u00a7c {0} \u00a76-\u00a74 {1} jailAlreadyIncarcerated=\u00a74\u5df2\u5728\u76e3\u7344\u4e2d\u7684\u73a9\u5bb6\:{0} +jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74\u8acb\u5728\u76e3\u7344\u4e2d\u9762\u58c1\u601d\u904e\uff01 jailNotExist=\u00a74\u8a72\u76e3\u7344\u4e0d\u5b58\u5728 jailReleased=\u00a76\u73a9\u5bb6 \u00a7c{0}\u00a76 \u51fa\u7344\u4e86 @@ -324,6 +325,7 @@ noGodWorldWarning=\u00a74\u7981\u6b62\u4f7f\u7528\u4e0a\u5e1d\u6a21\u5f0f. noHelpFound=\u00a74\u6c92\u6709\u7b26\u5408\u7684\u6307\u4ee4. noHomeSetPlayer=\u00a76\u8a72\u73a9\u5bb6\u9084\u672a\u8a2d\u7f6e\u5bb6 noIgnored=\u00a76\u4f60\u6c92\u6709\u5ffd\u7565\u4efb\u4f55\u4eba\u3002 +noJailsDefined=\u00a76No jails defined. noKitGroup=\u00a74\u4f60\u6c92\u6709\u6b0a\u9650\u4f7f\u7528\u9019\u500b\u5de5\u5177\u7d44. noKitPermission=\u00a74\u4f60\u9700\u8981 \u00a74{0}\u00a74 \u8a31\u53ef\u6b0a\u4f86\u4f7f\u7528\u8a72\u5de5\u5177 noKits=\u00a76\u9084\u6c92\u6709\u53ef\u7372\u5f97\u7684\u5de5\u5177 From d69e3a2f4805f939637de30f3553d9c22104d63b Mon Sep 17 00:00:00 2001 From: Mitchell Cook Date: Mon, 22 Jan 2018 22:58:00 +1000 Subject: [PATCH 011/333] [Feature] Added disposal command. (#1729) @Mishyy Added a portable disposal menu. Closes #1721, and also closes #310. --- .../essentials/commands/CommandDisposal.java | 20 +++++++++++++++++++ Essentials/src/messages.properties | 1 + Essentials/src/messages_cs.properties | 1 + Essentials/src/messages_da.properties | 1 + Essentials/src/messages_de.properties | 1 + Essentials/src/messages_en.properties | 1 + Essentials/src/messages_es.properties | 1 + Essentials/src/messages_et.properties | 1 + Essentials/src/messages_fi.properties | 1 + Essentials/src/messages_fr.properties | 1 + Essentials/src/messages_hu.properties | 1 + Essentials/src/messages_it.properties | 1 + Essentials/src/messages_ko.properties | 1 + Essentials/src/messages_lt.properties | 1 + Essentials/src/messages_nl.properties | 1 + Essentials/src/messages_pl.properties | 1 + Essentials/src/messages_pt.properties | 1 + Essentials/src/messages_pt_BR.properties | 1 + Essentials/src/messages_ro.properties | 1 + Essentials/src/messages_ru.properties | 1 + Essentials/src/messages_sv.properties | 1 + Essentials/src/messages_tr.properties | 1 + Essentials/src/messages_zh.properties | 1 + Essentials/src/messages_zh_HK.properties | 1 + Essentials/src/messages_zh_TW.properties | 1 + Essentials/src/plugin.yml | 4 ++++ 26 files changed, 48 insertions(+) create mode 100644 Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java diff --git a/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java b/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java new file mode 100644 index 000000000..f990ae5b8 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java @@ -0,0 +1,20 @@ +package com.earth2me.essentials.commands; + +import com.earth2me.essentials.User; +import org.bukkit.Server; + +import static com.earth2me.essentials.I18n.tl; + +public class CommandDisposal extends EssentialsCommand { + + public CommandDisposal() { + super("disposal"); + } + + @Override + protected void run(Server server, User user, String commandLabel, String[] args) throws Exception { + user.sendMessage(tl("openingDisposal")); + user.getBase().openInventory(ess.getServer().createInventory(user.getBase(), 36, "Disposal")); + } + +} diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 5763f0c49..acf12ad14 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -362,6 +362,7 @@ onlyDayNight=/time only supports day/night. onlyPlayers=\u00a74Only in-game players can use \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74You can only set the owner of player skulls (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74/weather only supports sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Ordering balances of\u00a7c {0} \u00a76users, please wait... oversizedTempban=\u00a74You may not ban a player for this period of time. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index 1d1de5060..63de2b38d 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -362,6 +362,7 @@ onlyDayNight=/time podporuje pouze day/night. onlyPlayers=\u00a74Pouze hraci ve hre mohou pouzit \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74Muze nastavit pouze majitel hlavy hrace (\u00a7c397\:3\u00a74). onlySunStorm=/u00a74/weather podporuje pouze sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Usporadavam bohatstvi\u00a7c {0} \u00a76hracu, cekejte ... oversizedTempban=\u00a74Nemuzes potrestat hrace tak dlouhou dobou. payConfirmToggleOff=\u00a76Vyzva k potvrzeni platby zrusena. diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index e7528e4aa..2e577b68a 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -362,6 +362,7 @@ onlyDayNight=/time underst\u00f8tter kun day/night. onlyPlayers=\u00a74Kun spillere p\u00e5 serveren kan bruge \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74Du kan kun indstille ejeren af spillerkranier (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74/weather underst\u00f8tter kun sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Tjekker saldi af\u00a7c {0} \u00a76brugere. Vent venligst... oversizedTempban=\u00a74Du kan ikke bandlyse den spiller i det tidsrum. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index b7c16b9b7..f64d3a3ad 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -362,6 +362,7 @@ onlyDayNight=/time unterst\u00fctzt nur day und night. onlyPlayers=\u00a74Nur Ingame-Spieler k\u00f6nnen \u00a7c{0} \u00a74benutzen. onlyPlayerSkulls=\u00a74Du kannst nur den Besitzer von Spielerk\u00f6pfen (\u00a7c397\:3\u00a74) \u00e4ndern. onlySunStorm=\u00a74/weather unterst\u00fctzt nur sun und storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Ordne die Kontost\u00e4nde von\u00a7c {0} \u00a76Benutzern, bitte warten ... oversizedTempban=\u00a74Du darfst einen Spieler nicht f\u00fcr so eine lange Zeit bannen. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 15a0e7e09..222f4e8b4 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -362,6 +362,7 @@ onlyDayNight=/time only supports day/night. onlyPlayers=\u00a74Only in-game players can use \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74You can only set the owner of player skulls (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74/weather only supports sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Ordering balances of\u00a7c {0} \u00a76users, please wait... oversizedTempban=\u00a74You may not ban a player for this period of time. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index ca7607e05..efb602055 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -362,6 +362,7 @@ onlyDayNight=\u00a76/time \u00a74\u00fanicamente funciona con los valores \u00a7 onlyPlayers=\u00a74Solo jugadores dentro del juego pueden usar \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74Solo puedes indicar el propietario de las calaveras de jugadores (\u00a7c397\:3\u00a74). onlySunStorm=\u00a7c/weather \u00a74solo acepta los valores \u00a7csun \u00a74o \u00a7cstorm \u00a74(\u00a76sol\u00a74/\u00a76tormenta\u00a74). +openingDisposal=\u00a76Opening disposal menu... orderBalances=Creando un ranking de {0} usuarios segun su saldo, espera... oversizedTempban=\u00a74No puedes banear por ese periodo de tiempo. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_et.properties b/Essentials/src/messages_et.properties index 630f2f2ee..69ec227da 100644 --- a/Essentials/src/messages_et.properties +++ b/Essentials/src/messages_et.properties @@ -362,6 +362,7 @@ onlyDayNight=/time toetab ainult day/night. onlyPlayers=\u00a74K\u00e4sku \u00a7c{0}\u00a74 saab kasutada ainult m\u00e4ngusiseselt. onlyPlayerSkulls=\u00a74Sa saad m\u00e4\u00e4rata ainult m\u00e4ngija kolju (\u00a7c397\:3\u00a74) omaniku. onlySunStorm=\u00a74/weather toetab ainult sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76J\u00e4rjestan\u00a7c {0} \u00a76m\u00e4ngija raha, palun oota... oversizedTempban=\u00a74Sa ei saa blokeerida m\u00e4ngijat nii pikaks ajaks. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index f216868c0..113a926ac 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -362,6 +362,7 @@ onlyDayNight=/time tukee vain day/night. onlyPlayers=\u00a74Only in-game players can use \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74You can only set the owner of player skulls (\u00a7c397\:3\u00a74). onlySunStorm=/weather tukee vain sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=J\u00e4rjestet\u00e4\u00e4n rahatilanteita {0}, odota... oversizedTempban=\u00a74You may not ban a player for this period of time. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 30ebda267..03ad73aba 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -362,6 +362,7 @@ onlyDayNight=/time ne supporte que day/night (jour/nuit). onlyPlayers=\u00a74Seul les joueurs en jeu peuvent utiliser \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74Vous ne pouvez d\u00e9finir que le propri\u00e9taire des t\u00eates de joueurs (\u00a7c397\:3\u00a74). onlySunStorm=/weather ne supporte que (soleil) sun/storm (temp\u00eate). +openingDisposal=\u00a76Opening disposal menu... orderBalances=Classement des soldes des {0} joueurs, patientez... oversizedTempban=\u00a74Vous ne pouvez pas bannir un joueur pour cette p\u00e9riode. payConfirmToggleOff=\u00a76Il ne vous sera plus demand\u00e9 de confirmer les paiements. diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 824fd7af3..85fedf673 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -362,6 +362,7 @@ onlyDayNight=/time only supports day/night. onlyPlayers=\u00a74Csak j\u00e1t\u00e9kon bel\u00fcl haszn\u00e1lhat\u00f3 a \u00a7c{0}\u00a74 parancs. onlyPlayerSkulls=\u00a74Csak j\u00e1t\u00e9kos fejnek tudod be\u00e1ll\u00edtani a tulajdonos\u00e1t (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74/weather only supports sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Egyenlegek \u00f6sszegy\u00fcjt\u00e9se\u00a7c {0} \u00a76j\u00e1t\u00e9kost\u00f3l, k\u00e9rlek v\u00e1rj... oversizedTempban=\u00a74You may not ban a player for this period of time. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index aa88fa73b..85d9accae 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -362,6 +362,7 @@ onlyDayNight=/time supporta solo day/night. onlyPlayers=\u00a74Solo in gioco i giocatori possono usare \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74Puoi solo impostare il propetario della testa (\u00a7c397\:3\u00a74). onlySunStorm=/weather supporta solo sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Ordinamento bilanci di\u00a7c {0} \u00a76utenti, attendere prego... oversizedTempban=\u00a74Non puoi bannare giocatori per questo arco di tempo. payConfirmToggleOff=\u00a76Non ti verr\u00e0 pi\u00f9 richiesto di confermare i pagamenti. diff --git a/Essentials/src/messages_ko.properties b/Essentials/src/messages_ko.properties index 4161c29df..221bfcbe9 100644 --- a/Essentials/src/messages_ko.properties +++ b/Essentials/src/messages_ko.properties @@ -362,6 +362,7 @@ onlyDayNight=\ucee4\ub9e8\ub4dc /time \uc740 \uc2dc\uac04\uc744 \ub0ae, \ubc24\u onlyPlayers=\u00a74\ubc84\ud0b7\uc5d0\uc11c\ub294 \u00a7c{0}\u00a74 \ub97c \uc0ac\uc6a9 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uac8c\uc784\uc5d0 \uc811\uc18d\ud558\uc5ec \uc0ac\uc6a9\ud574\uc8fc\uc138\uc694. onlyPlayerSkulls=&4\ub2f9\uc2e0\uc740 \ud50c\ub808\uc774\uc5b4 \uba38\ub9ac\uc758 \uc18c\uc720\uc790\ub9cc \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 (&c397\:3&4). onlySunStorm=\u00a74/\ub0a0\uc528\ub294 \ub9d1\uc74c/\ud750\ub9bc\ub9cc \uc124\uc815\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Ordering balances of\u00a7c {0} \u00a76users, please wait... oversizedTempban=\u00a74You may not \ucc28\ub2e8 a player for this period of time. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_lt.properties b/Essentials/src/messages_lt.properties index 136b9534b..95620918a 100644 --- a/Essentials/src/messages_lt.properties +++ b/Essentials/src/messages_lt.properties @@ -362,6 +362,7 @@ onlyDayNight=Naudojimas\: /time \u00a72day/night. onlyPlayers=\u00a74Turite b\u016bti \u017eaidime, jeigu norite naudoti \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74Savinink\u0105 galite nustatyti tik ant \u017eaid\u0117jo kaukol\u0117s (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74Naudojimas\: /weather \u00a72sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Ordering balances of\u00a7c {0} \u00a76users, please wait... oversizedTempban=\u00a74Tu negali u\u017eblokuoti \u017eaid\u0117jo laikinai. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index 7e552a637..19166785d 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -362,6 +362,7 @@ onlyDayNight=/time ondersteund alleen day/night. onlyPlayers=&4Alleen ingame spelers kunnen &c{0}&4 gebruiken. onlyPlayerSkulls=&4Je kan alleen de Eigenaar van een hoofd Zetten\! onlySunStorm=\u00a74/weather ondersteunt alleen sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Saldo''s bestellen van\u00a7c {0} \u00a76gebruikers, een moment geduld alstublieft... oversizedTempban=\u00a74U kunt een speler niet verbannen voor deze lange period van tijd. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index 57e8f51fa..907e51a96 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -362,6 +362,7 @@ onlyDayNight=/time obs\u0142uguje tylko day/night. onlyPlayers=\u00a74Tylko gracze b\u0119d\u0105cy w grze mog\u0105 u\u017Cy\u0107 {0}. onlyPlayerSkulls=\u00a74Mo\u017cesz tylko zmienia\u0107 w\u0142a\u015bciciela g\u0142owy gracza (397\:3). onlySunStorm=\u00a74/weather obs\u0142uguje tylko sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=Pobieram fundusze {0} graczy, prosz\u0119 czeka\u0107 ... oversizedTempban=\u00a74Nie mo\u017Cesz teraz zbanowa\u0107 tego gracza. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index f98e0ccc4..be165a08b 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -362,6 +362,7 @@ onlyDayNight=/time suporta apenas day/night. onlyPlayers=\u00A74Apenas jogadores podem usar \u00A7c{0}\u00A74. onlyPlayerSkulls=\u00A74S\u00F3 podes definir o propriet\u00E1rio de cr\u00E2nios de jogador (\u00A7c397:3\u00A74). onlySunStorm=\u00A74/weather suporta apenas sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00A76A organizar saldos de\u00A7c {0} \u00A76jogadores, aguarda... oversizedTempban=\u00A74N\u00E3o podes banir um jogador por tanto tempo. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_pt_BR.properties b/Essentials/src/messages_pt_BR.properties index b38087df7..e69f48df5 100644 --- a/Essentials/src/messages_pt_BR.properties +++ b/Essentials/src/messages_pt_BR.properties @@ -362,6 +362,7 @@ onlyDayNight=/time suporta apenas day/night. onlyPlayers=\u00A74Apenas jogadores no jogo podem usar \u00A7c{0}\u00A74. onlyPlayerSkulls=\u00A74Voc\u00EA s\u00F3 pode definir o propriet\u00E1rio de cr\u00E2nios de jogador (\u00A7c397\:3\u00A74). onlySunStorm=\u00A74/weather suporta apenas sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00A76Organizando saldos de\u00A7c {0} \u00A76usu\u00E1rios, aguarde... oversizedTempban=\u00A74Voc\u00EA n\u00E3o pode banir um jogador por esse per\u00EDodo de tempo. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_ro.properties b/Essentials/src/messages_ro.properties index fecc04bce..1ac6f589d 100644 --- a/Essentials/src/messages_ro.properties +++ b/Essentials/src/messages_ro.properties @@ -362,6 +362,7 @@ onlyDayNight=/time suporta doar day/night. onlyPlayers=\u00a74Only in-game players can use \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74You can only set the owner of player skulls (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74/weather suporta doar sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Se ordoneaza balantele a\u00a7c {0} \u00a76jucatori, te rog asteapta... oversizedTempban=\u00a74Nu poti interzice un jucator pentru asa o perioada de timp. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_ru.properties b/Essentials/src/messages_ru.properties index 81df3ccd8..c4928109a 100644 --- a/Essentials/src/messages_ru.properties +++ b/Essentials/src/messages_ru.properties @@ -362,6 +362,7 @@ onlyDayNight=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 /time \u043f\u043e\u0434 onlyPlayers=\u00a74\u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0438\u0433\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0433\u043e\u043b\u043e\u0432\u044b \u0438\u0433\u0440\u043e\u043a\u0430 (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74\u041a\u043e\u043c\u0430\u043d\u0434\u0430 /weather \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e sun/storm. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76\u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u0431\u0430\u043b\u0430\u043d\u0441\u0430\u00a7c {0} \u00a76\u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u043f\u043e\u0434\u043e\u0436\u0434\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. oversizedTempban=\u00a74\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0431\u0430\u043d\u0438\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u0440\u043e\u043a. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_sv.properties b/Essentials/src/messages_sv.properties index 65394f9b2..1608387a7 100644 --- a/Essentials/src/messages_sv.properties +++ b/Essentials/src/messages_sv.properties @@ -362,6 +362,7 @@ onlyDayNight=/time st\u00f6der bara day(dag) eller night(natt). onlyPlayers=\u00a74Bara spelare kan anv\u00e4nda \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74Du kan bara ange \u00e4garen f\u00f6r skallar av spelare (\u00a7c397\:3\u00a74). onlySunStorm=/weather st\u00f6der bara sun(sol) eller storm(storm). +openingDisposal=\u00a76Opening disposal menu... orderBalances=Best\u00e4ller balanser av {0} anv\u00e4ndare, v\u00e4nligen v\u00e4nta... oversizedTempban=\u00a74Du kan inte banna en spelare just vid denna tidpunkt. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_tr.properties b/Essentials/src/messages_tr.properties index f85773b0e..4040e5c09 100644 --- a/Essentials/src/messages_tr.properties +++ b/Essentials/src/messages_tr.properties @@ -362,6 +362,7 @@ onlyDayNight=/time sadece day/night destekliyor. onlyPlayers=\u00a74Sadece Oyun Icinde Kullanilabilir Bir Komut {0}. onlyPlayerSkulls=\u00a74Sadece oyuncu sahiplerinin kafa taslarini belirleyebilirsin. (397\:3). onlySunStorm=\u00a74/weather sadece sun/storm destekliyor. +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a7c {0} \u00a76Adli oyuncularin bakiyesi listeleniyor, l\u00fctfen bekleyin... oversizedTempban=\u00a74Oyunculari bu kadar sure yasaklayamazsin. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_zh.properties b/Essentials/src/messages_zh.properties index b369f3b9d..efa437ea1 100644 --- a/Essentials/src/messages_zh.properties +++ b/Essentials/src/messages_zh.properties @@ -362,6 +362,7 @@ onlyDayNight=/time \u547d\u4ee4\u53ea\u6709 day/night \u4e24\u4e2a\u9009\u62e9 onlyPlayers=\u00a74\u53ea\u6709\u5728\u6e38\u620f\u7684\u73a9\u5bb6\u624d\u80fd\u4f7f\u7528 \u00a7c{0}\u00a74. onlyPlayerSkulls=\u00a74\u4f60\u4fee\u6539\u4e86\u5934\u9885\u4e3b\u4eba\u7684ID\u4e3a (\u00a7c397\:3\u00a74). onlySunStorm=\u00a74/weather \u547d\u4ee4\u53ea\u6709 sun/storm \u4e24\u4e2a\u9009\u62e9 +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76\u6392\u5e8f {0} \u00a76\u4e2a\u73a9\u5bb6\u7684\u8d44\u91d1\u4e2d,\u8bf7\u7a0d\u5019\u2026\u2026 oversizedTempban=\u00a74\u4f60\u53ef\u80fd\u6ca1\u6709\u5728\u8fd9\u4e2a\u65f6\u6bb5\u5c01\u7981\u73a9\u5bb6. payConfirmToggleOff=\u00a76\u4f60\u5173\u95ed\u4e86\u652f\u4ed8\u786e\u8ba4\u63d0\u793a. diff --git a/Essentials/src/messages_zh_HK.properties b/Essentials/src/messages_zh_HK.properties index c6ef503ee..c5d43a2cf 100644 --- a/Essentials/src/messages_zh_HK.properties +++ b/Essentials/src/messages_zh_HK.properties @@ -362,6 +362,7 @@ onlyDayNight=/time \u547d\u4ee4\u53ea\u6709 day/night \u5169\u500b\u9078\u64c7 onlyPlayers=\u00a74\u53ea\u6709\u904a\u6232\u4e2d\u7684\u73a9\u5bb6\u53ef\u4ee5\u4f7f\u7528 \u00a7c{0}\u00a74\u3002 onlyPlayerSkulls=\u00a74\u4f60\u53ea\u80fd\u8a2d\u5b9a\u73a9\u5bb6\u982d\u9871 (\u00a7c397\:3\u00a74) \u7684\u64c1\u6709\u8005\u3002 onlySunStorm=\u00a74/weather \u547d\u4ee4\u53ea\u6709 sun/storm \u5169\u500b\u9078\u64c7 +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76\u6392\u5e8f {0} \u00a76\u500b\u73a9\u5bb6\u7684\u8cc7\u91d1\u4e2d,\u8acb\u7a0d\u5019\u2026\u2026 oversizedTempban=\u00a74\u4f60\u53ef\u80fd\u6c92\u6709\u5728\u9019\u500b\u6642\u6bb5\u5c01\u7981\u73a9\u5bb6. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/messages_zh_TW.properties b/Essentials/src/messages_zh_TW.properties index e9bf50648..bf6bcc4dd 100644 --- a/Essentials/src/messages_zh_TW.properties +++ b/Essentials/src/messages_zh_TW.properties @@ -362,6 +362,7 @@ onlyDayNight=/time \u547d\u4ee4\u53ea\u6709 day/night \u5169\u500b\u9078\u64c7 onlyPlayers=\u00a74\u53ea\u6709\u904a\u6232\u4e2d\u7684\u73a9\u5bb6\u53ef\u4ee5\u4f7f\u7528 \u00a7c{0}\u00a74\u3002 onlyPlayerSkulls=\u00a74\u4f60\u53ea\u80fd\u8a2d\u5b9a\u73a9\u5bb6\u982d\u9871 (\u00a7c397\:3\u00a74) \u7684\u64c1\u6709\u8005\u3002 onlySunStorm=\u00a74/weather \u547d\u4ee4\u53ea\u6709 sun/storm \u5169\u500b\u9078\u64c7 +openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76\u6392\u5e8f {0} \u00a76\u500b\u73a9\u5bb6\u7684\u8cc7\u91d1\u4e2d,\u8acb\u7a0d\u5019\u2026\u2026 oversizedTempban=\u00a74\u4f60\u53ef\u80fd\u6c92\u6709\u5728\u9019\u500b\u6642\u6bb5\u5c01\u7981\u73a9\u5bb6. payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index dd5d46768..095c9da84 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -103,6 +103,10 @@ commands: description: States current depth, relative to sea level. usage: /depth aliases: [edepth,height,eheight] + disposal: + description: Opens a portable disposal menu. + usage: / + aliases: [edisposal,trash,etrash] eco: description: Manages the server economy. usage: / From 8a815b42d3762c4b47bf05ae60abc2f6c37a07c8 Mon Sep 17 00:00:00 2001 From: md678685 Date: Mon, 22 Jan 2018 14:16:11 +0000 Subject: [PATCH 012/333] Fix disposal command class name Fixes #1791. --- .../src/com/earth2me/essentials/commands/CommandDisposal.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java b/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java index f990ae5b8..f4751e044 100644 --- a/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java +++ b/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java @@ -5,9 +5,9 @@ import org.bukkit.Server; import static com.earth2me.essentials.I18n.tl; -public class CommandDisposal extends EssentialsCommand { +public class Commanddisposal extends EssentialsCommand { - public CommandDisposal() { + public Commanddisposal() { super("disposal"); } From 71d50f4e1e83df02a19ddf0c599040c70f1037b7 Mon Sep 17 00:00:00 2001 From: MD678685 Date: Mon, 22 Jan 2018 14:56:17 +0000 Subject: [PATCH 013/333] Properly rename CommandDisposal --- .../commands/{CommandDisposal.java => Commanddisposal.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Essentials/src/com/earth2me/essentials/commands/{CommandDisposal.java => Commanddisposal.java} (100%) diff --git a/Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java b/Essentials/src/com/earth2me/essentials/commands/Commanddisposal.java similarity index 100% rename from Essentials/src/com/earth2me/essentials/commands/CommandDisposal.java rename to Essentials/src/com/earth2me/essentials/commands/Commanddisposal.java From 16a496c7063f62e003ae9eed27fcf5a3c37d9104 Mon Sep 17 00:00:00 2001 From: md678685 Date: Mon, 22 Jan 2018 21:01:12 +0000 Subject: [PATCH 014/333] Fix args order in GodStatusChangeEvent (#1790) Fixes #1107 --- Essentials/src/com/earth2me/essentials/commands/Commandgod.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgod.java b/Essentials/src/com/earth2me/essentials/commands/Commandgod.java index 295f2c619..4df72fa5c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgod.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgod.java @@ -30,7 +30,7 @@ public class Commandgod extends EssentialsToggleCommand { } final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; - final GodStatusChangeEvent godEvent = new GodStatusChangeEvent(controller, user, enabled); + final GodStatusChangeEvent godEvent = new GodStatusChangeEvent(user, controller, enabled); ess.getServer().getPluginManager().callEvent(godEvent); if (!godEvent.isCancelled()) { user.setGodModeEnabled(enabled); From 09af6ad186647298b1003c73531471d764ce3c93 Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Mon, 22 Jan 2018 16:37:01 -0800 Subject: [PATCH 015/333] Don't add itemflags if none are present --- Essentials/src/com/earth2me/essentials/ItemDb.java | 2 +- Essentials/src/com/earth2me/essentials/MetaItemStack.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 0ddaa4f8a..d379de4d2 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -309,7 +309,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { } Set flags = meta.getItemFlags(); - if (flags != null) { + if (flags != null && meta.getItemFlags().size() > 0) { sb.append("itemflags:"); boolean first = true; for (ItemFlag flag : flags) { diff --git a/Essentials/src/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/com/earth2me/essentials/MetaItemStack.java index 7daf11656..bb4e7c03e 100644 --- a/Essentials/src/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/com/earth2me/essentials/MetaItemStack.java @@ -258,7 +258,7 @@ public class MetaItemStack { public void addItemFlags(final String string) throws Exception { String[] separate = splitPattern.split(string, 2); - if(separate.length != 2) { + if (separate.length != 2) { throw new Exception(tl("invalidItemFlagMeta", string)); } From ba35efd021daf42abdb842aa80364c4e503bc874 Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Mon, 22 Jan 2018 16:38:01 -0800 Subject: [PATCH 016/333] Properly check for empty set --- Essentials/src/com/earth2me/essentials/ItemDb.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index d379de4d2..ba793d737 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -309,7 +309,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { } Set flags = meta.getItemFlags(); - if (flags != null && meta.getItemFlags().size() > 0) { + if (flags != null && !flags.isEmpty()) { sb.append("itemflags:"); boolean first = true; for (ItemFlag flag : flags) { From 8e617538942a286ed80722044c08051d15552688 Mon Sep 17 00:00:00 2001 From: md678685 Date: Tue, 23 Jan 2018 08:32:55 +0000 Subject: [PATCH 017/333] Format prefixes and suffixes properly in Chat Related: #1792 --- .../essentials/chat/EssentialsChatPlayerListenerLowest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java index d99a099fe..95284e5c9 100644 --- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java +++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java @@ -44,8 +44,8 @@ public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer { String world = user.getWorld().getName(); Player player = user.getBase(); - String prefix = ess.getPermissionsHandler().getPrefix(player); - String suffix = ess.getPermissionsHandler().getSuffix(player); + String prefix = FormatUtil.replaceFormat(ess.getPermissionsHandler().getPrefix(player)); + String suffix = FormatUtil.replaceFormat(ess.getPermissionsHandler().getSuffix(player)); Team team = player.getScoreboard().getPlayerTeam(player); String format = ess.getSettings().getChatFormat(group); From 752565b8f1412c645a1b91a682576330186af52c Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 24 Jan 2018 19:23:00 +0000 Subject: [PATCH 018/333] Add nickNamesOnlyColorChanges to messages files --- Essentials/src/messages.properties | 3 ++- Essentials/src/messages_cs.properties | 1 + Essentials/src/messages_da.properties | 3 ++- Essentials/src/messages_de.properties | 3 ++- Essentials/src/messages_en.properties | 3 ++- Essentials/src/messages_es.properties | 3 ++- Essentials/src/messages_et.properties | 3 ++- Essentials/src/messages_fi.properties | 3 ++- Essentials/src/messages_fr.properties | 1 + Essentials/src/messages_hu.properties | 3 ++- Essentials/src/messages_it.properties | 1 + Essentials/src/messages_ko.properties | 3 ++- Essentials/src/messages_lt.properties | 3 ++- Essentials/src/messages_nl.properties | 3 ++- Essentials/src/messages_pl.properties | 1 + Essentials/src/messages_pt.properties | 3 ++- Essentials/src/messages_pt_BR.properties | 3 ++- Essentials/src/messages_ro.properties | 3 ++- Essentials/src/messages_ru.properties | 3 ++- Essentials/src/messages_sv.properties | 3 ++- Essentials/src/messages_tr.properties | 3 ++- Essentials/src/messages_zh.properties | 1 + Essentials/src/messages_zh_HK.properties | 3 ++- Essentials/src/messages_zh_TW.properties | 3 ++- 24 files changed, 43 insertions(+), 19 deletions(-) diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index acf12ad14..445906201 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Nickname changed. nickDisplayName=\u00a74You have to enable change-displayname in Essentials config. nickInUse=\u00a74That name is already in use. nickNamesAlpha=\u00a74Nicknames must be alphanumeric. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76You no longer have a nickname. nickSet=\u00a76Your nickname is now \u00a7c{0}\u00a76. nickTooLong=\u00a74That nickname is too long. @@ -605,4 +606,4 @@ worthSet=\u00a76Worth value set year=year years=years youAreHealed=\u00a76You have been healed. -youHaveNewMail=\u00a76You have\u00a7c {0} \u00a76messages\! Type \u00a7c/mail read\u00a76 to view your mail. \ No newline at end of file +youHaveNewMail=\u00a76You have\u00a7c {0} \u00a76messages\! Type \u00a7c/mail read\u00a76 to view your mail. diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index 63de2b38d..31edbdc0f 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Jmeno zmeneno. nickDisplayName=\u00a74Musis nejdrive povolit change-displayname v Essentials configu. nickInUse=\u00a74Toto jmeno jiz nekdo ma. nickNamesAlpha=\u00a74Jmeno musi byt alfanumericky. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a74Mas vychozi jmeno. nickSet=\u00a76Tvoje jmeno je nyni \u00a7c{0}\u00a76. nickTooLong=\u00a74Toto jmeno je prilis dlouhe. diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 2e577b68a..5c178f4ca 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Kaldenavn \u00e6ndret. nickDisplayName=\u00a74Du skal aktivere change-displayname i Essentials-konfiggen. nickInUse=\u00a74Det navn bruges allerede. nickNamesAlpha=\u00a74Kaldenavne skal v\u00e6re alfanumeriske. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Du har ikke l\u00e6ngere et kaldenavn. nickSet=\u00a76Dit kaldenavn er nu \u00a7c{0}\u00a76. nickTooLong=\u00a74Det kaldenavn er for langt. @@ -605,4 +606,4 @@ worthSet=\u00a76V\u00e6rdi \u00e6ndret year=\u00e5r years=\u00e5r youAreHealed=\u00a76Du er blevet helbredt. -youHaveNewMail=\u00a76Du har\u00a7c {0} \u00a76beskeder\! Skriv \u00a7c/mail read\u00a76 for at l\u00e6se dine beskeder. \ No newline at end of file +youHaveNewMail=\u00a76Du har\u00a7c {0} \u00a76beskeder\! Skriv \u00a7c/mail read\u00a76 for at l\u00e6se dine beskeder. diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index f64d3a3ad..8ded9339f 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Spitzname ge\u00e4ndert. nickDisplayName=\u00a74Du musst change-displayname in der Essentials-Konfiguration aktivieren. nickInUse=\u00a74Dieser Name wird bereits verwendet. nickNamesAlpha=\u00a74Nicknamen d\u00fcrfen nur alphanumerische Zeichen enthalten. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Du hast keinen Spitznamen mehr. nickSet=\u00a76Dein Spitzname ist nun \u00a7c{0}. nickTooLong=\u00a74Dieser Spitzname ist zu lang. @@ -605,4 +606,4 @@ worthSet=\u00a76Wert des Gegenstands gesetzt. year=Jahr years=Jahre youAreHealed=\u00a76Du wurdest geheilt. -youHaveNewMail=\u00a76Du hast \u00a7c{0} \u00a76Nachrichten\! Schreibe \u00a7c/mail read\u00a76 um deine Nachrichten anzuzeigen. \ No newline at end of file +youHaveNewMail=\u00a76Du hast \u00a7c{0} \u00a76Nachrichten\! Schreibe \u00a7c/mail read\u00a76 um deine Nachrichten anzuzeigen. diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 222f4e8b4..b386f4ca9 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Nickname changed. nickDisplayName=\u00a74You have to enable change-displayname in Essentials config. nickInUse=\u00a74That name is already in use. nickNamesAlpha=\u00a74Nicknames must be alphanumeric. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76You no longer have a nickname. nickSet=\u00a76Your nickname is now \u00a7c{0}\u00a76. nickTooLong=\u00a74That nickname is too long. @@ -605,4 +606,4 @@ worthSet=\u00a76Worth value set year=year years=years youAreHealed=\u00a76You have been healed. -youHaveNewMail=\u00a76You have\u00a7c {0} \u00a76messages\! Type \u00a7c/mail read\u00a76 to view your mail. \ No newline at end of file +youHaveNewMail=\u00a76You have\u00a7c {0} \u00a76messages\! Type \u00a7c/mail read\u00a76 to view your mail. diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index efb602055..507cb8c8f 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Nick cambiado. nickDisplayName=\u00a74Tienes que activar el cambio de nick en la configuraci\u00f3n del plugin Essentials. nickInUse=\u00a74Ese nick ya est\u00e1 en uso. Prueba a usar otro. nickNamesAlpha=\u00a74No puedes usar s\u00edmbolos raros. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Ya no tienes un nombre personalizado. VUELVES A SER TU. nickSet=\u00a76Tu nick ahora es \u00a7c{0}\u00a76. nickTooLong=\u00a74Ese nick es demasiado largo. @@ -605,4 +606,4 @@ worthSet=Establecer valor year=a\u00f1o years=a\u00f1os youAreHealed=\u00a77Has sido curado. -youHaveNewMail=\u00a76\u00a1Tienes\u00a7c {0} \u00a76mensajes\! Escribe \u00a7c/mail read\u00a76 para ver los correos que no has le\u00eddo. \ No newline at end of file +youHaveNewMail=\u00a76\u00a1Tienes\u00a7c {0} \u00a76mensajes\! Escribe \u00a7c/mail read\u00a76 para ver los correos que no has le\u00eddo. diff --git a/Essentials/src/messages_et.properties b/Essentials/src/messages_et.properties index 69ec227da..0df4b13b7 100644 --- a/Essentials/src/messages_et.properties +++ b/Essentials/src/messages_et.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76H\u00fc\u00fcdnimi muudetud. nickDisplayName=\u00a74Te peate lubama change-displayname Essentials configus. nickInUse=\u00a74Antud nimi on juba kasutusel. nickNamesAlpha=\u00a74H\u00fc\u00fcdnimed peavad olema t\u00e4ht-numbrilised. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Teilt eemaldati h\u00fc\u00fcdnimi. nickSet=\u00a76Sinu h\u00fc\u00fcdnimi on n\u00fc\u00fcd \u00a7c{0}\u00a76. nickTooLong=\u00a74Antud h\u00fc\u00fcdnimi on liiga pikk. @@ -605,4 +606,4 @@ worthSet=\u00a76V\u00e4\u00e4rtus m\u00e4\u00e4ratud year=aasta years=aastat youAreHealed=\u00a76Sind on tervendatud. -youHaveNewMail=\u00a76Teil on\u00a7c {0} \u00a76lugemata s\u00f5numit\! Kirjutage \u00a7c/mail read\u00a76, et lugeda enda kirju. \ No newline at end of file +youHaveNewMail=\u00a76Teil on\u00a7c {0} \u00a76lugemata s\u00f5numit\! Kirjutage \u00a7c/mail read\u00a76, et lugeda enda kirju. diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index 113a926ac..33087fc37 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -313,6 +313,7 @@ nickChanged=Lempinimi vaihdettu. nickDisplayName=\u00a77Sinun tulee ottaa k\u00e4ytt\u00f6\u00f6n change-displayname Essentialsin config-tiedostosta. nickInUse=\u00a7cSe nimi on jo k\u00e4yt\u00f6ss\u00e4. nickNamesAlpha=\u00a7cLempinimen pit\u00e4\u00e4 olla aakkosista. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a77Sinulla ei ole en\u00e4\u00e4 lempinime\u00e4. nickSet=\u00a77Lempinimesi on nyt \u00a7c{0}. nickTooLong=\u00a74Tuo lempinimi on liian pitk\u00e4. @@ -605,4 +606,4 @@ worthSet=Arvo asetettu year=vuosi years=vuosia youAreHealed=\u00a77Sinut on parannettu. -youHaveNewMail=\u00a7cSinulla on {0} viesti(\u00e4)\!\u00a7f Kirjoita \u00a77/mail read\u00a7f lukeaksesi viestit. \ No newline at end of file +youHaveNewMail=\u00a7cSinulla on {0} viesti(\u00e4)\!\u00a7f Kirjoita \u00a77/mail read\u00a7f lukeaksesi viestit. diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 03ad73aba..34e49a4da 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -313,6 +313,7 @@ nickChanged=surnom modifi\u00e9. nickDisplayName=\u00a77Vous devez activer change-displayname dans la configuration Essentials. nickInUse=\u00a7cCe nom est d\u00e9j\u00e0 utilis\u00e9. nickNamesAlpha=\u00a7cLes surnoms doivent \u00eatre alphanum\u00e9riques. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a7 Vous n''avez plus de surnom. nickSet=\u00a76Votre surnom est maintenant \u00a7c{0}\u00a76. nickTooLong=\u00a74Ce surnom est trop long. diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 85fedf673..0e0e43e8a 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Nick megv\u00e1ltoztatva. nickDisplayName=\u00a74You have to enable change-displayname in Essentials config. nickInUse=\u00a74Ez a n\u00e9v m\u00e1r haszn\u00e1ltban van. nickNamesAlpha=\u00a74Nicknames must be alphanumeric. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Nincs t\u00f6bb\u00e9 nicked. nickSet=\u00a76A nicked mostant\u00f3l\: \u00a7c{0}. nickTooLong=\u00a76Ez a Nickn\u00e9v t\u00fal hossz\u00fa. @@ -605,4 +606,4 @@ worthSet=\u00a76\u00c1r be\u00e1ll\u00edtva year=\u00e9v years=\u00e9v youAreHealed=\u00a76\u00c9leted felt\u00f6ltve. -youHaveNewMail=\u00a76Van\u00a7c {0} \u00a76\u00fczeneted\! \u00cdrd be a \u00a7c/mail read\u00a76 parancsot, hogy elolvasd \u00f5ket. \ No newline at end of file +youHaveNewMail=\u00a76Van\u00a7c {0} \u00a76\u00fczeneted\! \u00cdrd be a \u00a7c/mail read\u00a76 parancsot, hogy elolvasd \u00f5ket. diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index 85d9accae..88c894372 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Nickname modificato. nickDisplayName=\u00a74Devi abilitare change-displayname nel file di configurazione di Essentials. nickInUse=\u00a74Quel nickname \u00E8 gi\u00E0 in uso. nickNamesAlpha=\u00a74I nickname devono essere alfanumerici. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Non disponi pi\u00F9 di un nickname. nickSet=\u00a76Il tuo nickname \u00e8 ora \u00a7c{0}\u00a76. nickTooLong=\u00a74Quel nickname \u00e8 troppo lungo. diff --git a/Essentials/src/messages_ko.properties b/Essentials/src/messages_ko.properties index 221bfcbe9..bc45c86ad 100644 --- a/Essentials/src/messages_ko.properties +++ b/Essentials/src/messages_ko.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76\ub2c9\ub124\uc784\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8 nickDisplayName=\u00a74You have to enable change-displayname in Essentials config. nickInUse=\u00a74\uc774\ubbf8 \uc0ac\uc6a9\uc911\uc778 \uc774\ub984\uc785\ub2c8\ub2e4. nickNamesAlpha=\u00a74\ub2c9\ub124\uc784\uc740 \ubc18\ub4dc\uc2dc \uc601\uc22b\uc790\uc758 \uc870\ud569\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76\ub2f9\uc2e0\uc740 \uc774\uc81c \ub2c9\ub124\uc784\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. nickSet=\u00a76\uc774\uc81c \ub2f9\uc2e0\uc758 \ub2c9\ub124\uc784\uc740 \u00a7c{0} \u00a76\uc785\ub2c8\ub2e4. nickTooLong=\u00a74\ub2c9\ub124\uc784\uc774 \ub108\ubb34 \uae41\ub2c8\ub2e4. @@ -605,4 +606,4 @@ worthSet=\uac00\uce58 \ubc0f \uac12 \uc124\uc815 year=\ub144(\ub144\ub3c4) years=\ub144 youAreHealed=\u00a77\ub2f9\uc2e0\uc740 \uce58\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. -youHaveNewMail=\u00a76\ub2f9\uc2e0\uc740 \u00a7c{0}\u00a76\uac1c\uc758 \uba54\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4. \u00a7c/mail read\u00a76 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uba54\uc77c\uc744 \ud655\uc778\ud574\uc8fc\uc138\uc694. \ No newline at end of file +youHaveNewMail=\u00a76\ub2f9\uc2e0\uc740 \u00a7c{0}\u00a76\uac1c\uc758 \uba54\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4. \u00a7c/mail read\u00a76 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uba54\uc77c\uc744 \ud655\uc778\ud574\uc8fc\uc138\uc694. diff --git a/Essentials/src/messages_lt.properties b/Essentials/src/messages_lt.properties index 95620918a..c64a79cde 100644 --- a/Essentials/src/messages_lt.properties +++ b/Essentials/src/messages_lt.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Slapyvardis pakeistas. nickDisplayName=\u00a74You have to enable change-displayname in Essentials config. nickInUse=\u00a74Toks vardas jau naudojamas. nickNamesAlpha=\u00a74Slapyvardi turi sudaryti tik raid\u0117s arba skaitmenys. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Tu daugiau nebeturi slapyvardzio. nickSet=\u00a76Tavo slapyvardis dabar yra \u00a7c{0}\u00a76. nickTooLong=\u00a74\u0160itas slapyvardis yra per ilgas. @@ -605,4 +606,4 @@ worthSet=\u00a76Worth value set year=metai years=metus youAreHealed=\u00a76Tu buvai pagydytas. -youHaveNewMail=\u00a76Tu turi\u00a7c {0} \u00a76prane\u0161im\u0173\! Ra\u0161yk \u00a7c/mail read\u00a76, kad per\u017ei\u016br\u0117tum lai\u0161kus. \ No newline at end of file +youHaveNewMail=\u00a76Tu turi\u00a7c {0} \u00a76prane\u0161im\u0173\! Ra\u0161yk \u00a7c/mail read\u00a76, kad per\u017ei\u016br\u0117tum lai\u0161kus. diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index 19166785d..d3f9d4fd0 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -313,6 +313,7 @@ nickChanged=Bijnaam veranderd. nickDisplayName=\u00a74U moet ''change-displayname'' inschakelen in de Essentials configuratie. nickInUse=\u00a7cDie naam is al in gebruik. nickNamesAlpha=\u00a7cBijnamen moeten alfanumeriek zijn. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76U heeft geen bijnaam meer. nickSet=\u00a76Jou bijnaam is nu \u00a7c{0}\u00a76.\n nickTooLong=\u00a74Die bijnaam is te lang. @@ -605,4 +606,4 @@ worthSet=\u00a76Waarde ingesteld year=jaar years=jaren youAreHealed=\u00a76U bent genezen. -youHaveNewMail=\u00a76U heeft \u00a7c{0}\u00a76 berichten\! Type \u00a7c/mail read\u00a76 om uw berichten te bekijken. \ No newline at end of file +youHaveNewMail=\u00a76U heeft \u00a7c{0}\u00a76 berichten\! Type \u00a7c/mail read\u00a76 om uw berichten te bekijken. diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index 907e51a96..0b0cdba83 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -313,6 +313,7 @@ nickChanged=\u00a77Nick gracza zosta\u0142 zmieniony. nickDisplayName=\u00a74Musisz w\u0142\u0105czy\u0107 change-displayname w configu Essential. nickInUse=\u00a74Ten pseudonim jest ju\u017C w u\u017Cyciu. nickNamesAlpha=\u00a74Pseudonimy musz\u0105 by\u0107 alfanumeryczne. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a77Nie masz ju\u017C pseudonimu. nickSet=\u00a76Tw\u00F3j nowy nick\: \u00a7c{0}\u00a76. nickTooLong=\u00a74Ten pseudonim jest za d\u0142ugi. diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index be165a08b..6fe3630dc 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -313,6 +313,7 @@ nickChanged=\u00A76Nick alterado. nickDisplayName=\u00A74Tens de ativar o change-displayname na configura\u00E7\u00E3o do Essentials. nickInUse=\u00A74Esse nome j\u00E1 est\u00E1 a ser utilizado. nickNamesAlpha=\u00A74Os nicks t\u00EAm de ser ser alfanum\u00E9ricos. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00A76J\u00E1 n\u00E3o tens um nick. nickSet=\u00A76O teu nick agora \u00E9 \u00A7c{0}\u00A76. nickTooLong=\u00A74Nick demasiado grande. @@ -605,4 +606,4 @@ worthSet=\u00A76Valor definido year=ano years=anos youAreHealed=\u00A76Foste curado. -youHaveNewMail=\u00A76Tens\u00A7c {0} \u00A76mensagens! Digita \u00A7c/mail read\u00A76 para veres. \ No newline at end of file +youHaveNewMail=\u00A76Tens\u00A7c {0} \u00A76mensagens! Digita \u00A7c/mail read\u00A76 para veres. diff --git a/Essentials/src/messages_pt_BR.properties b/Essentials/src/messages_pt_BR.properties index e69f48df5..066002650 100644 --- a/Essentials/src/messages_pt_BR.properties +++ b/Essentials/src/messages_pt_BR.properties @@ -313,6 +313,7 @@ nickChanged=\u00A76Nick alterado. nickDisplayName=\u00A74Voc\u00EA precisa ativar o change-displayname na configura\u00E7\u00E3o do Essentials. nickInUse=\u00A74Esse nome j\u00E1 est\u00E1 em uso. nickNamesAlpha=\u00A74Nicks devem ser alfanum\u00E9ricos. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00A76Voc\u00EA n\u00E3o tem mais um nick. nickSet=\u00A76Seu nick agora \u00E9 \u00A7c{0}\u00A76. nickTooLong=\u00A74Esse nome \u00E9 muito grande. @@ -605,4 +606,4 @@ worthSet=\u00A76Valor definido year=ano years=anos youAreHealed=\u00A76Voc\u00EA foi curado. -youHaveNewMail=\u00A76Voc\u00EA tem\u00A7c {0} \u00A76mensagens\! Digite \u00A7c/mail read\u00A76 para ver. \ No newline at end of file +youHaveNewMail=\u00A76Voc\u00EA tem\u00A7c {0} \u00A76mensagens\! Digite \u00A7c/mail read\u00A76 para ver. diff --git a/Essentials/src/messages_ro.properties b/Essentials/src/messages_ro.properties index 1ac6f589d..09f81faf6 100644 --- a/Essentials/src/messages_ro.properties +++ b/Essentials/src/messages_ro.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Nume schimbat. nickDisplayName=\u00a74Trebuie sa activezi schimbarea numelui din configuratie. nickInUse=\u00a74Acest nume este deja in uz. nickNamesAlpha=\u00a74Numele trebuie sa fie alfanumeric. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Nu mai ai nume. nickSet=\u00a76Your nickname is now \u00a7c{0}\u00a76. nickTooLong=\u00a74Acest nume este prea lung. @@ -605,4 +606,4 @@ worthSet=\u00a76Valoarea ''valorii'' setata year=an years=ani youAreHealed=\u00a76Ai fost vindecat. -youHaveNewMail=\u00a76Ai\u00a7c {0} \u00a76mesaje\! scrie \u00a7c/mail read\u00a76 pentru a-ti vedea mesajele. \ No newline at end of file +youHaveNewMail=\u00a76Ai\u00a7c {0} \u00a76mesaje\! scrie \u00a7c/mail read\u00a76 pentru a-ti vedea mesajele. diff --git a/Essentials/src/messages_ru.properties b/Essentials/src/messages_ru.properties index c4928109a..399a79dea 100644 --- a/Essentials/src/messages_ru.properties +++ b/Essentials/src/messages_ru.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76\u041d\u0438\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d nickDisplayName=\u00a74\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e change-displayname \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Essentials. nickInUse=\u00a74\u0414\u0430\u043d\u043d\u044b\u0439 \u043d\u0438\u043a \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. nickNamesAlpha=\u00a74\u041d\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u043a\u0432\u0435\u043d\u043d\u043e-\u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u0412\u0430\u0441 \u0441\u0432\u043e\u0439 \u043d\u0438\u043a. nickSet=\u00a76\u0422\u0435\u043f\u0435\u0440\u044c \u0412\u0430\u0448 \u043d\u0438\u043a \u00a7c{0}\u00a76. nickTooLong=\u00a74\u041d\u0438\u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u044b\u0439. @@ -605,4 +606,4 @@ worthSet=\u00a76\u0426\u0435\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0 year=\u0433\u043e\u0434 years=\u043b\u0435\u0442 youAreHealed=\u00a76\u0412\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043b\u0435\u0447\u0435\u043d\u044b. -youHaveNewMail=\u00a76\u0423 \u0412\u0430\u0441 \u0435\u0441\u0442\u044c\u00a7c {0} \u00a76\u043d\u043e\u0432\u044b\u0445 \u043f\u0438\u0441\u0435\u043c\! \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u00a7c/mail read\u00a76 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u0447\u0442\u044b. \ No newline at end of file +youHaveNewMail=\u00a76\u0423 \u0412\u0430\u0441 \u0435\u0441\u0442\u044c\u00a7c {0} \u00a76\u043d\u043e\u0432\u044b\u0445 \u043f\u0438\u0441\u0435\u043c\! \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u00a7c/mail read\u00a76 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u0447\u0442\u044b. diff --git a/Essentials/src/messages_sv.properties b/Essentials/src/messages_sv.properties index 1608387a7..3b424aed2 100644 --- a/Essentials/src/messages_sv.properties +++ b/Essentials/src/messages_sv.properties @@ -313,6 +313,7 @@ nickChanged=Smeknamn \u00e4ndrat. nickDisplayName=\u00a77Du m\u00e5ste aktivera change-displayname i Essentials-konfigurationen. nickInUse=\u00a7cDet namnet anv\u00e4nds redan. nickNamesAlpha=\u00a7cSmeknamn m\u00e5ste vara alfanumeriska. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a77Du har inte ett smeknamn l\u00e4ngre nickSet=\u00a76Ditt smeknamn \u00e4r nu \u00a7c{0}\u00a76. nickTooLong=\u00a74Det d\u00e4r aliaset \u00e4r f\u00f6r l\u00e5ngt. @@ -605,4 +606,4 @@ worthSet=V\u00e4rdet inst\u00e4llt year=\u00e5r years=\u00e5r youAreHealed=\u00a77Du har blivit l\u00e4kt. -youHaveNewMail=\u00a7cDu har {0} meddelanden\!\u00a7f Skriv \u00a77/mail read\u00a7f f\u00f6r att l\u00e4sa dina meddelanden. \ No newline at end of file +youHaveNewMail=\u00a7cDu har {0} meddelanden\!\u00a7f Skriv \u00a77/mail read\u00a7f f\u00f6r att l\u00e4sa dina meddelanden. diff --git a/Essentials/src/messages_tr.properties b/Essentials/src/messages_tr.properties index 4040e5c09..7b159e7cc 100644 --- a/Essentials/src/messages_tr.properties +++ b/Essentials/src/messages_tr.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76Kullanici Adi Degistirildi\! nickDisplayName=\u00a74Essentials Ayarlarindan Bir change-displayname Acik Yapman Gerekir. nickInUse=\u00a74Bu Isim Kullaniliyor\! nickNamesAlpha=\u00a74Kullanici Ismi Sadece Alfabe Icerikli Olmalidir\! +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76Artik Bir Kullanici Ismin Yok\! nickSet=\u00a76Yeni Kullanici Ismin \u00a7c{0} nickTooLong=\u00a74Bu isim cok uzun. @@ -605,4 +606,4 @@ worthSet=\u00a76Worth degeri belirlendi\! year=yil years=yil youAreHealed=\u00a76Canlandirildin\! -youHaveNewMail=\u00a76\u00a7c {0} \u00a76Mesajin Var Okumak Icin \u00a7c/mail read\u00a76 Yaz. \ No newline at end of file +youHaveNewMail=\u00a76\u00a7c {0} \u00a76Mesajin Var Okumak Icin \u00a7c/mail read\u00a76 Yaz. diff --git a/Essentials/src/messages_zh.properties b/Essentials/src/messages_zh.properties index efa437ea1..c5e1b27e0 100644 --- a/Essentials/src/messages_zh.properties +++ b/Essentials/src/messages_zh.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76\u6635\u79f0\u5df2\u66f4\u6362 nickDisplayName=\u00a74\u4f60\u9700\u8981\u6fc0\u6d3bchange-displayname.\u8be5\u6587\u4ef6\u5728Essentials\u7684config\u6587\u4ef6\u4e2d nickInUse=\u00a74\u90a3\u4e2a\u6635\u79f0\u5df2\u88ab\u4f7f\u7528 nickNamesAlpha=\u00a74\u6635\u79f0\u5fc5\u987b\u4e3a\u5b57\u6bcd\u6216\u6570\u5b57. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76\u4f60\u7684\u6635\u79f0\u5df2\u53d6\u6d88 nickSet=\u00a76\u4f60\u7684\u6635\u79f0\u73b0\u5728\u662f \u00a7c{0}\u00a76. nickTooLong=\u00a74\u60a8\u6240\u8f93\u5165\u7684\u6635\u79f0\u8fc7\u957f diff --git a/Essentials/src/messages_zh_HK.properties b/Essentials/src/messages_zh_HK.properties index c5d43a2cf..ec99552b5 100644 --- a/Essentials/src/messages_zh_HK.properties +++ b/Essentials/src/messages_zh_HK.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76\u66b1\u7a31\u5df2\u66f4\u63db nickDisplayName=\u00a74\u4f60\u9700\u8981\u6fc0\u6d3bchange-displayname.\u8a72\u6587\u4ef6\u5728Essentials\u8a2d\u7f6e\u6587\u4ef6\u4e2d nickInUse=\u00a74\u90a3\u500b\u66b1\u7a31\u5df2\u88ab\u4f7f\u7528 nickNamesAlpha=\u00a74\u66b1\u7a31\u5fc5\u9808\u70ba\u5b57\u6bcd\u6216\u6578\u5b57. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76\u4f60\u4e0d\u518d\u64c1\u6709\u4e00\u500b\u66b1\u7a31 nickSet=\u00a76\u4f60\u7684\u66b1\u7a31\u73fe\u5728\u662f \u00a7c{0}\u00a76\u3002 nickTooLong=\u00a74\u9019\u500b\u66b1\u7a31\u592a\u9577. @@ -605,4 +606,4 @@ worthSet=\u00a76\u50f9\u683c\u5df2\u8a2d\u7f6e year=\u5e74 years=\u5e74 youAreHealed=\u00a76\u4f60\u5df2\u88ab\u6cbb\u7642 -youHaveNewMail=\u00a76\u4f60\u64c1\u6709 \u00a7c{0}\u00a76 \u689d\u6d88\u606f\uff01\u00a7r\u8f38\u5165 \u00a7c/mail read\u00a76 \u4f86\u67e5\u770b \ No newline at end of file +youHaveNewMail=\u00a76\u4f60\u64c1\u6709 \u00a7c{0}\u00a76 \u689d\u6d88\u606f\uff01\u00a7r\u8f38\u5165 \u00a7c/mail read\u00a76 \u4f86\u67e5\u770b diff --git a/Essentials/src/messages_zh_TW.properties b/Essentials/src/messages_zh_TW.properties index bf6bcc4dd..6b6934f09 100644 --- a/Essentials/src/messages_zh_TW.properties +++ b/Essentials/src/messages_zh_TW.properties @@ -313,6 +313,7 @@ nickChanged=\u00a76\u66b1\u7a31\u5df2\u66f4\u63db nickDisplayName=\u00a74\u4f60\u9700\u8981\u6fc0\u6d3bchange-displayname.\u8a72\u6587\u4ef6\u5728Essentials\u8a2d\u7f6e\u6587\u4ef6\u4e2d nickInUse=\u00a74\u90a3\u500b\u66b1\u7a31\u5df2\u88ab\u4f7f\u7528 nickNamesAlpha=\u00a74\u66b1\u7a31\u5fc5\u9808\u70ba\u5b57\u6bcd\u6216\u6578\u5b57. +nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. nickNoMore=\u00a76\u4f60\u4e0d\u518d\u64c1\u6709\u4e00\u500b\u66b1\u7a31 nickSet=\u00a76\u4f60\u7684\u66b1\u7a31\u73fe\u5728\u662f \u00a7c{0}\u00a76\u3002 nickTooLong=\u00a74\u9019\u500b\u66b1\u7a31\u592a\u9577. @@ -605,4 +606,4 @@ worthSet=\u00a76\u50f9\u683c\u5df2\u8a2d\u7f6e year=\u5e74 years=\u5e74 youAreHealed=\u00a76\u4f60\u5df2\u88ab\u6cbb\u7642 -youHaveNewMail=\u00a76\u4f60\u6709 \u00a7c{0}\u00a76 \u689d\u8a0a\u606f\uff01\u00a7r\u8f38\u5165 \u00a7c/mail read\u00a76 \u4f86\u67e5\u770b \ No newline at end of file +youHaveNewMail=\u00a76\u4f60\u6709 \u00a7c{0}\u00a76 \u689d\u8a0a\u606f\uff01\u00a7r\u8f38\u5165 \u00a7c/mail read\u00a76 \u4f86\u67e5\u770b From d581f48cd1c2f17afbd50771163bfa534d7ce2b6 Mon Sep 17 00:00:00 2001 From: k-jiang Date: Sun, 28 Jan 2018 09:24:30 -0500 Subject: [PATCH 019/333] Detect and update the old config.yml. Fixes #1783. (#1784) --- EssentialsGeoIP/pom.xml | 6 +++--- .../geoip/EssentialsGeoIPPlayerListener.java | 20 +++++++++++++------ EssentialsGeoIP/src/config.yml | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/EssentialsGeoIP/pom.xml b/EssentialsGeoIP/pom.xml index b73254602..bd818fc82 100644 --- a/EssentialsGeoIP/pom.xml +++ b/EssentialsGeoIP/pom.xml @@ -25,10 +25,10 @@ - + net.ess3 - EssentialsX - ${project.version} + EssentialsX + ${project.version} com.maxmind.geoip2 diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java index e905bd90b..324a1a06b 100644 --- a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java +++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java @@ -72,7 +72,7 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { String city; String region; String country; - if (config.getBoolean("enable-locale", true)) { + if (config.getBoolean("enable-locale")) { // Get geolocation based on locale. If not avaliable in specific language, get the default one. city = ((city=response.getCity().getNames().get(locale))!=null) ? city : response.getCity().getName(); region = ((region=response.getMostSpecificSubdivision().getNames().get(locale))!=null) ? region : response.getMostSpecificSubdivision().getName(); @@ -98,11 +98,9 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. // TODO: Maybe, we can set a new custom msg about addr-not-found in messages.properties. logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); - //logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getMessage()); } catch (IOException | GeoIp2Exception ex) { // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); - //logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getMessage()); } if (config.getBoolean("show-on-whois", true)) { u.setGeoLocation(sb.toString()); @@ -121,10 +119,20 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { public final void reloadConfig() { config.load(); + // detect and update the old config.yml. migrate from legacy GeoIP to GeoIP2. + if (!config.isSet("enable-locale")) { + config.set("database.download-url", "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz"); + config.set("database.download-url-city", "http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz"); + config.set("database.update.enable", true); + config.set("database.update.by-every-x-days", 30); + config.set("enable-locale", true); + config.save(); + } + if (config.getBoolean("database.show-cities", false)) { - databaseFile = new File(dataFolder, "Geo2-City.mmdb"); + databaseFile = new File(dataFolder, "GeoIP2-City.mmdb"); } else { - databaseFile = new File(dataFolder, "Geo2-Country.mmdb"); + databaseFile = new File(dataFolder, "GeoIP2-Country.mmdb"); } if (!databaseFile.exists()) { if (config.getBoolean("database.download-if-missing", true)) { @@ -136,7 +144,7 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { } else if (config.getBoolean("database.update.enable", true)) { // try to update expired mmdb files long diff = new Date().getTime() - databaseFile.lastModified(); - if (diff/24/3600/1000>config.getLong("database.update.by-every-x-days")) { + if (diff/24/3600/1000>config.getLong("database.update.by-every-x-days", 30)) { downloadDatabase(); } } diff --git a/EssentialsGeoIP/src/config.yml b/EssentialsGeoIP/src/config.yml index b52629a28..5490adcf7 100644 --- a/EssentialsGeoIP/src/config.yml +++ b/EssentialsGeoIP/src/config.yml @@ -10,6 +10,6 @@ database: by-every-x-days: 30 show-on-login: true show-on-whois: true -# Enable locale on geolocation display. Not all languages are supported. +# "enable-locale" enables locale on geolocation display. Not all languages are supported. # Check your Essentials/config.yml "locale" section for details. enable-locale: true \ No newline at end of file From 1ef1cd98db572ad4dcaee973c4ef169591c69a0e Mon Sep 17 00:00:00 2001 From: Ali Moghnieh Date: Sun, 28 Jan 2018 16:47:17 +0000 Subject: [PATCH 020/333] Add default toggle for confirm commands in config.yml. --- .../com/earth2me/essentials/ISettings.java | 6 ++++- .../src/com/earth2me/essentials/Settings.java | 23 ++++++++++++++++++- .../src/com/earth2me/essentials/UserData.java | 16 ++++++------- Essentials/src/config.yml | 6 +++++ 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 9557960e9..98a28d179 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -302,4 +302,8 @@ public interface ISettings extends IConf { int getMotdDelay(); boolean isDirectHatAllowed(); -} \ No newline at end of file + + List getDefaultDisabledConfirmCommands(); + + boolean isConfirmCommandEnabledByDefault(String commandName); +} diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index b85aab2aa..d94385d3f 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -532,6 +532,7 @@ public class Settings implements net.ess3.api.ISettings { npcsInBalanceRanking = _isNpcsInBalanceRanking(); currencyFormat = _getCurrencyFormat(); unprotectedSigns = _getUnprotectedSign(); + defaultDisabledConfirmCommands = _getDefaultDisabledConfirmCommands(); } private List itemSpawnBl = new ArrayList(); @@ -1418,4 +1419,24 @@ public class Settings implements net.ess3.api.ISettings { public boolean isDirectHatAllowed() { return config.getBoolean("allow-direct-hat", true); } -} \ No newline at end of file + + private List defaultDisabledConfirmCommands; + + private List _getDefaultDisabledConfirmCommands() { + List commands = config.getStringList("default-disabled-confirm-commands"); + for (int i = 0; i < commands.size(); i++) { + commands.set(i, commands.get(i).toLowerCase()); + } + return commands; + } + + @Override + public List getDefaultDisabledConfirmCommands() { + return defaultDisabledConfirmCommands; + } + + @Override + public boolean isConfirmCommandEnabledByDefault(String commandName) { + return !getDefaultDisabledConfirmCommands().contains(commandName.toLowerCase()); + } +} diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index d38b3ef19..1fe8f5581 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -898,14 +898,14 @@ public abstract class UserData extends PlayerExtension implements IConf { save(); } - private boolean confirmPay = false; // players deny pay confirmation by default + private Boolean confirmPay; - public boolean _getConfirmPay() { - return config.getBoolean("confirm-pay", false); + private Boolean _getConfirmPay() { + return (Boolean) config.get("confirm-pay"); } public boolean isPromptingPayConfirm() { - return confirmPay; + return confirmPay != null ? confirmPay : ess.getSettings().isConfirmCommandEnabledByDefault("pay"); } public void setPromptingPayConfirm(boolean prompt) { @@ -914,14 +914,14 @@ public abstract class UserData extends PlayerExtension implements IConf { save(); } - private boolean confirmClear = false; // players deny clear confirmation by default + private Boolean confirmClear; - public boolean _getConfirmClear() { - return config.getBoolean("confirm-clear", false); + private Boolean _getConfirmClear() { + return (Boolean) config.get("confirm-clear"); } public boolean isPromptingClearConfirm() { - return confirmClear; + return confirmClear != null ? confirmClear : ess.getSettings().isConfirmCommandEnabledByDefault("clearinventory"); } public void setPromptingClearConfirm(boolean prompt) { diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 22914bc32..4053edc5a 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -516,6 +516,12 @@ allow-bulk-buy-sell: true # This has no effect if the MOTD command or permission are disabled. delay-motd: 0 +# A list of commands that should have their complementary confirm commands disabled by default. +# This is empty by default, for the latest list of valid commands see the latest source config.yml. +default-disabled-confirm-commands: +#- pay +#- clearinventory + ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # From fb5ebdb0c27663cef9dc59c8852a427fda411e9c Mon Sep 17 00:00:00 2001 From: Johnny Cao Date: Mon, 29 Jan 2018 10:01:20 -0800 Subject: [PATCH 021/333] Fixes #1637: Correctly handle /mail permissions (#1743) @AgentTroll Fixes #1637 /mail stripped colors from the entire message before as reported by the issue. The desired fix was to only strip the color from the sent message rather than from the entire message format (e.g. prefixes coming before the message itself). Fixed by formatting only the message before passing it to the localization. Also had a minor issue with FormatUtil in which it failed to strip ampersand (&)-formatted color codes, which was amended by stripping both VANILLA_*_PATTERN as well as REPLACE_*_PATTERN in FormatUtil#formatString(...). It's not necessary to actualy strip any vanilla (i.e. section-prefixed) color codes since that's already done by FormatUtil#stripFormat(String), but I'd like to keep the changes as non-invasive as possible at the current moment. Demo: git-Spigot-d20369f-7fc5cd8 (MC: 1.9) (Implementing API version 1.9-R0.1-SNAPSHOT) https://streamable.com/umyi8 This is my first time contributing so please be gentle :) --- .../src/com/earth2me/essentials/commands/Commandmail.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java index 526829881..f95458303 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java @@ -56,8 +56,7 @@ public class Commandmail extends EssentialsCommand { throw new Exception(tl("playerNeverOnServer", args[1])); } - String mail = tl("mailFormat", user.getName(), StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 2)))); - mail = FormatUtil.formatMessage(user, "essentials.mail", mail); + String mail = tl("mailFormat", user.getName(), FormatUtil.formatMessage(user, "essentials.mail", StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 2))))); if (mail.length() > 1000) { throw new Exception(tl("mailTooLong")); } From e4a8222d48a37c71f856a4e28a66c1de292d86eb Mon Sep 17 00:00:00 2001 From: Johnny Cao Date: Wed, 31 Jan 2018 17:01:51 -0800 Subject: [PATCH 022/333] Fixes #1794: Hides error message if no MOTD present (#1811) * Fixes #1794 --- .../src/com/earth2me/essentials/EssentialsPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 663145216..86b31f6aa 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -334,7 +334,7 @@ public class EssentialsPlayerListener implements Listener { final IText input = tempInput; - if (input != null && user.isAuthorized("essentials.motd")) { + if (input != null && !input.getLines().isEmpty() && user.isAuthorized("essentials.motd")) { final IText output = new KeywordReplacer(input, user.getSource(), ess); final TextPager pager = new TextPager(output, true); pager.showPage("1", null, "motd", user.getSource()); From 05400429db0e04ef639c20494d5975c8333ac6d8 Mon Sep 17 00:00:00 2001 From: Lax Date: Sat, 3 Feb 2018 11:26:43 -0800 Subject: [PATCH 023/333] Cancel target event on vanished players. Fixes #1809 (#1829) --- .../earth2me/essentials/EssentialsEntityListener.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 63435446e..e3e4ea396 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -198,4 +198,14 @@ public class EssentialsEntityListener implements Listener { } } } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onEntityTarget(EntityTargetEvent event) { + if (event.getTarget() instanceof Player) { + final User user = ess.getUser((Player) event.getTarget()); + if (user.isVanished()) { + event.setCancelled(true); + } + } + } } From 37dfd81cc9c597538b9ec5262bec9dcdb0a0f310 Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Mon, 5 Feb 2018 21:00:36 -0700 Subject: [PATCH 024/333] EssentialsX invite link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ee2d2232..b46d085e2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Downloads](https://i.imgur.com/MMc0PJY.png)](http://ci.ender.zone/job/EssentialsX/) -[![Discord](https://imgur.com/MFRRBn4.png)](https://discord.gg/F7gexAQ) +[![Discord](https://imgur.com/MFRRBn4.png)](https://discord.gg/casfFyh) This is a fork of Essentials called EssentialsX. From 983f3a7935712ff63da3bfd2c2233ffb9914db51 Mon Sep 17 00:00:00 2001 From: md678685 Date: Sat, 10 Feb 2018 16:03:33 +0000 Subject: [PATCH 025/333] Clear item in offhand slot in /clearinventory GitHub fancy things: Fixes #950. Fixes #1426. Fixes #1834. --- .../essentials/commands/Commandclearinventory.java | 2 ++ .../essentials/craftbukkit/InventoryWorkaround.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java index e5a433f09..7d07fae3b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java @@ -113,12 +113,14 @@ public class Commandclearinventory extends EssentialsCommand { sender.sendMessage(tl("inventoryClearingAllItems", player.getDisplayName())); } InventoryWorkaround.clearInventoryNoArmor(player.getInventory()); + InventoryWorkaround.setItemInOffHand(player, null); } else if (type == -2) // type -2 represents double wildcard or all items and armor { if (showExtended) { sender.sendMessage(tl("inventoryClearingAllArmor", player.getDisplayName())); } InventoryWorkaround.clearInventoryNoArmor(player.getInventory()); + InventoryWorkaround.setItemInOffHand(player, null); player.getInventory().setArmorContents(null); } else { if (data == -1) // data -1 means that all subtypes will be cleared diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java b/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java index 3a0e905a3..a70ba20bc 100644 --- a/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java +++ b/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java @@ -239,4 +239,17 @@ public final class InventoryWorkaround { } } } + + @SuppressWarnings("deprecation") + public static void setItemInOffHand(Player p, ItemStack item) { + // This assumes that all builds that support a main hand also support an off hand. + if (hasMainHandSupport == null || hasMainHandSupport) { + try { + p.getInventory().setItemInOffHand(item); + hasMainHandSupport = true; + } catch (Throwable e) { + hasMainHandSupport = false; + } + } + } } From e57d0e96e2196ed5bf408967a193546a20aa6fee Mon Sep 17 00:00:00 2001 From: Lax Date: Sat, 10 Feb 2018 21:45:25 -0800 Subject: [PATCH 026/333] Proper version command. (#1838) --- .github/ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 2a372d5c6..42098ff11 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -18,7 +18,7 @@ You can ignore the template if suggesting a feature; otherwise, read on: "Details:". 6. Delete this line and all above lines before posting your issue. --> -EssentialsX version (run `/essentials`): +EssentialsX version (run `/essentials version`): Server software (run `/version`): From d92884800b1585d2ca92444f8830684c663c92b4 Mon Sep 17 00:00:00 2001 From: k-jiang Date: Sun, 11 Feb 2018 18:44:59 -0500 Subject: [PATCH 027/333] Fix #1799 locale not found in GeoIP2 database. Optimize code. Clean up old files. (#1817) --- .../geoip/EssentialsGeoIPPlayerListener.java | 83 ++++++++++--------- EssentialsGeoIP/src/config.yml | 5 +- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java index 324a1a06b..8bb2649a5 100644 --- a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java +++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java @@ -23,6 +23,8 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.Date; import java.util.zip.GZIPInputStream; +import java.util.Arrays; +import java.util.List; import com.ice.tar.TarInputStream; import com.ice.tar.TarEntry; @@ -62,46 +64,37 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { } InetAddress address = player.getAddress().getAddress(); StringBuilder sb = new StringBuilder(); - String locale = ess.getI18n().getCurrentLocale().toString().replace('_', '-'); // get locale setting from Essentials - try { - if (config.getBoolean("database.show-cities", false)) { - CityResponse response = mmreader.city(address); - if (response == null) { - return; - } - String city; - String region; - String country; - if (config.getBoolean("enable-locale")) { - // Get geolocation based on locale. If not avaliable in specific language, get the default one. - city = ((city=response.getCity().getNames().get(locale))!=null) ? city : response.getCity().getName(); - region = ((region=response.getMostSpecificSubdivision().getNames().get(locale))!=null) ? region : response.getMostSpecificSubdivision().getName(); - country = ((country=response.getCountry().getNames().get(locale))!=null) ? country : response.getCountry().getName(); - } else { - // Get geolocation regarding locale setting. - city = response.getCity().getName(); - region = response.getMostSpecificSubdivision().getName(); - country = response.getCountry().getName(); - } - if (city != null) { - sb.append(city).append(", "); - } - if (region != null) { - sb.append(region).append(", "); - } - sb.append(country); - } else { - CountryResponse response = mmreader.country(address); - sb.append(response.getCountry().getNames().get(locale)); + try { + if (config.getBoolean("database.show-cities", false)) { + CityResponse response = mmreader.city(address); + if (response == null) { + return; } - } catch (AddressNotFoundException ex) { - // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. - // TODO: Maybe, we can set a new custom msg about addr-not-found in messages.properties. - logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); - } catch (IOException | GeoIp2Exception ex) { - // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. - logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); + String city; + String region; + String country; + city = response.getCity().getName(); + region = response.getMostSpecificSubdivision().getName(); + country = response.getCountry().getName(); + if (city != null) { + sb.append(city).append(", "); + } + if (region != null) { + sb.append(region).append(", "); + } + sb.append(country); + } else { + CountryResponse response = mmreader.country(address); + sb.append(response.getCountry().getName()); } + } catch (AddressNotFoundException ex) { + // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. + // TODO: Maybe, we can set a new custom msg about addr-not-found in messages.properties. + logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); + } catch (IOException | GeoIp2Exception ex) { + // GeoIP2 API forced this when address not found in their DB. jar will not complied without this. + logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage()); + } if (config.getBoolean("show-on-whois", true)) { u.setGeoLocation(sb.toString()); } @@ -127,6 +120,11 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { config.set("database.update.by-every-x-days", 30); config.set("enable-locale", true); config.save(); + // delete old GeoIP.dat fiiles + File oldDatFile = new File(dataFolder, "GeoIP.dat"); + File oldDatFileCity = new File(dataFolder, "GeoIP-City.dat"); + oldDatFile.delete(); + oldDatFileCity.delete(); } if (config.getBoolean("database.show-cities", false)) { @@ -149,7 +147,14 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf { } } try { - mmreader = new DatabaseReader.Builder(databaseFile).build(); + // locale setting + if (config.getBoolean("enable-locale")) { + // Get geolocation based on Essentials' locale. If the locale is not avaliable, use "en". + String locale = ess.getI18n().getCurrentLocale().toString().replace('_', '-'); + mmreader = new DatabaseReader.Builder(databaseFile).locales(Arrays.asList(locale,"en")).build(); + } else { + mmreader = new DatabaseReader.Builder(databaseFile).build(); + } } catch (IOException ex) { logger.log(Level.SEVERE, tl("cantReadGeoIpDB"), ex); } diff --git a/EssentialsGeoIP/src/config.yml b/EssentialsGeoIP/src/config.yml index 5490adcf7..be2872b65 100644 --- a/EssentialsGeoIP/src/config.yml +++ b/EssentialsGeoIP/src/config.yml @@ -10,6 +10,7 @@ database: by-every-x-days: 30 show-on-login: true show-on-whois: true -# "enable-locale" enables locale on geolocation display. Not all languages are supported. -# Check your Essentials/config.yml "locale" section for details. +# "enable-locale" enables locale on geolocation display. +# Language is determined by Essentials/config.yml "locale" section. +# Not all languages are supported. See https://dev.maxmind.com/geoip/geoip2/web-services/#Languages enable-locale: true \ No newline at end of file From b21f42ee7c0673cdee42b227c2c8a2a8d1ff86b3 Mon Sep 17 00:00:00 2001 From: md678685 Date: Tue, 13 Feb 2018 15:29:57 +0000 Subject: [PATCH 028/333] Update issue template --- .github/ISSUE_TEMPLATE.md | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 42098ff11..02f951cbb 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,29 +1,40 @@ -EssentialsX version (run `/essentials version`): +5. Include a description and any other details that may be helpful under the + Details section. + +6. Delete this line and all above lines before posting your issue! --> + +### Information + +EssentialsX version (run `/essversion`): Server software (run `/version`): -Server (`logs/latest.log`): +Server log (upload `logs/latest.log` to [Gist](https://gist.github.com/)): -EssentialsX config (`plugins/Essentials/config.yml`): +EssentialsX config (upload `plugins/Essentials/config.yml` to [Gist](https://gist.github.com/)): -Details: +### Details + +Describe your issue here. From a9a80b5766c93886f24173e833c4a0b8f6a4e4f0 Mon Sep 17 00:00:00 2001 From: Jacek Maciejak Date: Wed, 14 Feb 2018 20:08:38 +0100 Subject: [PATCH 029/333] Update messages_pl.properties (#1803) @RikoDEV --- Essentials/src/messages_pl.properties | 66 +++++++++++++-------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index 0b0cdba83..bed7f0933 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -79,7 +79,7 @@ createKitFailed=\u00a74Wyst\u0105pi\u0142 b\u0142\u0105d podczas tworzenia zesta createKitSeparator=\u00a7m----------------------- createKitSuccess=\u00a76Stworzono zestaw: \u00a7f{0}\n\u00a76Czas odnowienia: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Skopiuj zawarto\u015B\u0107 linku do config.yml. creatingConfigFromTemplate=Tworzenie konfiguracji z szablonu\: {0} -creatingEmptyConfig=Stworzono pusty config\: {0} +creatingEmptyConfig=Stworzono pusty plik konfiguracyjny\: {0} creative=Kreatywny currency={0}{1} currentWorld=\u00a77Bie\u017C\u0105cy \u015Bwiat\:\u00a7c {0} @@ -213,7 +213,7 @@ itemMustBeStacked=\u00a74Przedmiotem handluje si\u0119 w stackach. Wielko\u015B\ itemNames=\u00a77Kr\u00F3tka nazwa\:\u00a7r {0} itemNotEnough1=\u00a74Masz za ma\u0142o tego przedmiotu, aby go sprzeda\u0107. itemNotEnough2=\u00a77Je\u015Bli chcesz sprzeda\u0107 wszystkie przedmioty tego typu, wpisz /sell nazwaprzedmiotu -itemNotEnough3=\u00a77/sell nazwaprzedmiotu -1 sprzeda ca\u0142\u0105 ilo\u015B\u0107 przedmiotu poza 1 sztuk\u0105 itd. +itemNotEnough3=\u00a77/sell nazwa_przedmiotu -1 sprzeda ca\u0142\u0105 ilo\u015B\u0107 przedmiotu poza 1 sztuk\u0105 itd. itemsConverted=\u00a76Zmieniono wszystkie przedmioty na bloki. itemsCsvNotLoaded=Nie mo\u017Cna wczyta\u0107 pliku items.csv. itemSellAir=Serio pr\u00F3bujesz sprzeda\u0107 powietrze? Miej w r\u0119ku przedmiot.. @@ -223,8 +223,8 @@ itemSoldConsole=\u00a7a{0} \u00a7aSprzedano {1} za \u00a7a{2} \u00a7a({3} sztuki itemSpawn=\u00a77Otrzymano\u00a7c {0} \u00a77z\u00a7c {1} itemType=\u00a77Przedmiot\:\u00a7c {0} \u00a77-\u00a7c {1} jailAlreadyIncarcerated=\u00a74Ten gracz jest ju\u017C w wi\u0119zieniu \u00a7c{0} \u00a74. -jailList=\u00a76Jails\:\u00a7r {0} -jailMessage=\u00a74Za ka\u017Cde przewinienie czeka Cie kara. +jailList=\u00a76Wi\u0119zienia\:\u00a7r {0} +jailMessage=\u00a74Za ka\u017Cde przewinienie czeka Ci\u0119 kara. jailNotExist=\u00a74Nie ma takiego wi\u0119zienia. jailReleased=\u00a77Gracz \u00a7c{0}\u00a77 zosta\u0142 wypuszczony z wi\u0119zienia. jailReleasedPlayerNotify=\u00a77Zosta\u0142e\u015B zwolniony\! @@ -277,7 +277,7 @@ maxMoney=\u00a74Ta tranzakcja przekroczy\u0142aby limit salda dla tego konta mayNotJail=\u00a74Nie mo\u017Cesz wtr\u0105ci\u0107 do wi\u0119zienia tej osoby. mayNotJailOffline=\u00a74Nie mo\u017cesz wi\u0119zi\u0107 graczy b\u0119d\u0105cych offline. me=Ja -minimumPayAmount=\u00a7cThe minimum amount you can pay is {0}. +minimumPayAmount=\u00a7cMinimalna kwota, jak\u0105 mo\u017Cesz zap\u0142aci\u0107, to {0}. minute=minuta minutes=minut missingItems=\u00a74Nie posiadasz {0}x {1}. @@ -292,12 +292,12 @@ month=miesiac months=miesi\u0119cy moreThanZero=\u00a74Ilo\u015B\u0107 musi byc wi\u0119ksza ni\u017C 0. moveSpeed=\u00a76Zmieni\u0142e\u015b szybko\u015b\u0107 {0}nia dla\u00a76 {2}\u00a76 na\u00a7c {1}\u00a76. -msgDisabled=\u00a76Receiving messages \u00a7cdisabled\u00a76. -msgDisabledFor=\u00a76Receiving messages \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76. -msgEnabled=\u00a76Receiving messages \u00a7cenabled\u00a76. -msgEnabledFor=\u00a76Receiving messages \u00a7cenabled \u00a76for \u00a7c{0}\u00a76. +msgDisabled=\u00a76Odbieranie wiadomo\u015Bci \u00a7cwy\u0142\u0105czone\u00a76. +msgDisabledFor=\u00a76Odbieranie wiadomo\u015Bci \u00a7cwy\u0142\u0105czone \u00a76dla \u00a7c{0}\u00a76. +msgEnabled=\u00a76Odbieranie wiadomo\u015Bci \u00a7cw\u0142\u0105czone\u00a76. +msgEnabledFor=\u00a76Odbieranie wiadomo\u015Bci \u00a7cw\u0142\u0105czone \u00a76dla \u00a7c{0}\u00a76. msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2} -msgIgnore=\u00a7c{0} \u00a74has messages disabled. +msgIgnore=\u00a7c{0} \u00a74ma wy\u0142\u0105czone wiadomo\u015Bci prywatne. multipleCharges=\u00a74Nie mo\u017Cesz ustawic wi\u0119cej ni\u017C jeden ladunek dla tej fajerwerki. multiplePotionEffects=\u00a74Nie mo\u017Cesz ustawic wi\u0119cej ni\u017C jeden efekt dla tej mikstury. mutedPlayer=\u00a76Gracz\u00a7c {0} \u00a76zosta\u0142 wyciszony. @@ -306,7 +306,7 @@ mutedUserSpeaks={0} pr\u00F3bowa\u0142 si\u0119 odezwa\u0107, ale jest wyciszony muteExempt=\u00a74Nie mo\u017Cesz wyciszy\u0107 tego gracza.. muteExemptOffline=\u00a74Nie mo\u017cesz wyciszy\u0107 graczy b\u0119d\u0105chych offline. muteNotify=\u00a7c{0} \u00a76wyciszy\u0142 \u00a7c{1}\u00a76. -muteNotifyFor=\u00a7c{0} \u00a76has muted player \u00a7c{1}\u00a76 for\u00a7c {2}\u00a76. +muteNotifyFor=\u00a7c{0} \u00a76wyciszy\u0142 gracza \u00a7c{1}\u00a76 na\u00a7c {2}\u00a76. nearbyPlayers=\u00a77Gracze w pobli\u017Cu\:\u00a7r {0} negativeBalanceError=\u00a74Gracz nie mo\u017Ce mie\u0107 ujemnego stanu konta. nickChanged=\u00a77Nick gracza zosta\u0142 zmieniony. @@ -326,7 +326,7 @@ noGodWorldWarning=\u00a74Uwaga\! Godmode jest wy\u0142\u0105czony w tym \u015Bwi noHelpFound=\u00a74Nie ma odpowiadajacych komend. noHomeSetPlayer=\u00a77Gracz nie ma ustawionego domu. noIgnored=\u00a77Nikogo nie ignorujesz. -noJailsDefined=\u00a76No jails defined. +noJailsDefined=\u00a76Nie zdefiniowano \u017Cadnych wi\u0119zie\u0144. noKitGroup=\u00a74Nie masz dost\u0119pu do tego zestawu. noKitPermission=\u00a74Musisz posiadac uprawnienia \u00a7c{0}\u00a74 aby u\u017Cywa\u0107 tego zestawu. noKits=\u00a77Nie ma jeszcze dost\u0119pnych zestaw\u00F3w. @@ -363,11 +363,11 @@ onlyDayNight=/time obs\u0142uguje tylko day/night. onlyPlayers=\u00a74Tylko gracze b\u0119d\u0105cy w grze mog\u0105 u\u017Cy\u0107 {0}. onlyPlayerSkulls=\u00a74Mo\u017cesz tylko zmienia\u0107 w\u0142a\u015bciciela g\u0142owy gracza (397\:3). onlySunStorm=\u00a74/weather obs\u0142uguje tylko sun/storm. -openingDisposal=\u00a76Opening disposal menu... +openingDisposal=\u00a76Otwieranie menu kosza... orderBalances=Pobieram fundusze {0} graczy, prosz\u0119 czeka\u0107 ... oversizedTempban=\u00a74Nie mo\u017Cesz teraz zbanowa\u0107 tego gracza. -payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. -payConfirmToggleOn=\u00a76You will now be prompted to confirm payments. +payConfirmToggleOff=\u00a76Nie b\u0119dziesz ju\u017C proszony o potwierdzenie p\u0142atno\u015Bci. +payConfirmToggleOn=\u00a76B\u0119dziesz poproszony o potwierdzenie p\u0142atno\u015Bci. payMustBePositive=\u00a74Kwota p\u0142atno\u015Bci musi by\u0107 dodatnia. payToggleOff=\u00a76Wy\u0142\u0105czono mo\u017Cliwo\u015B\u0107 akceptacji wp\u0142at. payToggleOn=\u00a76Akceptujesz ju\u017C wp\u0142aty. @@ -407,7 +407,7 @@ powerToolsDisabled=\u00a77Wszystkie twoje podpi\u0119cia zosta\u0142y zdezaktywo powerToolsEnabled=\u00a77Wszystkie twojee podpi\u0119cia zosta\u0142y aktywowane. pTimeCurrent=Czas \u00a7e{0} u00a7f to {1}. pTimeCurrentFixed=\u00a77Czas \u00a7c{0}\u00a77 przywr\u00F3cony do\u00a7c {1}\u00a77. -pTimeNormal=\u00a77Czas \u00a7c{0}''s\u00a77 jest normalny i odpowiada serwerowemu. +pTimeNormal=\u00a77Czas gracza \u00a7c{0}\u00a77 jest normalny i odpowiada serwerowemu. pTimeOthersPermission=\u00a74Nie masz uprawnie\u0144 do zmiany czasu innym. pTimePlayers=\u00a77Ci gracze b\u0119d\u0105 mie\u0107 wlasny czas\:\u00a7r pTimeReset=\u00a77Czas gracza zosta\u0142 zresetowany dla \u00a7c{0} @@ -416,13 +416,13 @@ pTimeSetFixed=\u00a77Czas gracza przywr\u00F3cony do \u00a7c{0}\u00a77 dla \u00a pWeatherCurrent=\u00a7c{0}\u00a77 pogoda to\u00a7c {1}\u00a77. pWeatherInvalidAlias=\u00a74Niepoprawny typ pogody pWeatherNormal=\u00a7c{0}\u00a77 pogoda jest normalna i pasuje do serwera. -pWeatherOthersPermission=\u00a74Nie masz uprawnie\u0144, by zmieni\u0107 pogode pozosta\u0142ym graczom. -pWeatherPlayers=\u00a77Ci gracze maj\u0105 w\u0142asn\u0105 pogode\:\u00a7r -pWeatherReset=\u00a77Gracz zresetowal pogode dla\: \u00a7c{0} -pWeatherSet=\u00a77Gracz ustawil pogode \u00a7c{0}\u00a77 dla\: \u00a7c{1}. +pWeatherOthersPermission=\u00a74Nie masz uprawnie\u0144, by zmieni\u0107 pogod\u0119 pozosta\u0142ym graczom. +pWeatherPlayers=\u00a77Ci gracze maj\u0105 w\u0142asn\u0105 pogod\u0119\:\u00a7r +pWeatherReset=\u00a77Gracz zresetowal pogod\u0119 dla\: \u00a7c{0} +pWeatherSet=\u00a77Gracz ustawil pogod\u0119 \u00a7c{0}\u00a77 dla\: \u00a7c{1}. questionFormat=\u00a72[Pytanie]\u00a7r {0} radiusTooBig=\u00a74Zasi\u0119g jest zbyt du\u017cy\! Maksymalny zasi\u0119g to {0}. -readNextPage=\u00a77Wpisz\u00a7c /{0} {1} \u00a77aby przeczytac nastepna strone. +readNextPage=\u00a77Wpisz\u00a7c /{0} {1} \u00a77aby przeczyta\u0107 nast\u0119pn\u0105 strone. recentlyForeverAlone=\u00a74{0} recently went offline. recipe=\u00a76Receptura dla \u00a7c{0}\u00a76 ({1} z {2}) recipeBadIndex=Nie ma receptury dla tego numeru. @@ -430,7 +430,7 @@ recipeFurnace=\u00a76Przepal \u00a7c{0} recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X recipeGridItem=\u00a7{0}X \u00a76to \u00a7c{1} recipeMore=\u00a77Wpisz /{0} \u00a7c{1}\u00a77 by zobaczy\u0107 receptury dla \u00a7c{2} \u00a77. -recipeNone=Nie ma receptur dla {0} . +recipeNone=Nie ma receptur dla {0}. recipeNothing=nic recipeShapeless=\u00a77Kombinacja \u00a7c{0} recipeWhere=\u00a77Gdzie\: {0} @@ -451,21 +451,21 @@ requiredBukkit=* \! * Potrzebujesz najnowszego {0} CraftBukkit-a, pobierz go z h resetBal=\u00a76Saldo zosta\u0142o zresetowane na \u00a7a{0} \u00a76dla wszystkich graczy b\u0119d\u0105cych online. resetBalAll=\u00a76Saldo zosta\u0142o zresetowane na \u00a7a{0} \u00a76dla wszystkich graczy. returnPlayerToJailError=\u00a74Wyst\u0105pi\u0142 b\u0142\u0105d podczas powracania gracza\u00a7c {0} \u00a74do wi\u0119zienia\: {1}\! -runningPlayerMatch=\u00a77Wyszukiwanie pasuj\u0105cych graczy ''\u00a7c{0}\u00a77'' (to mo\u017Ce chwile potrwa\u0107) +runningPlayerMatch=\u00a77Wyszukiwanie pasuj\u0105cych graczy \u00a7c{0}\u00a77 (to mo\u017Ce chwil\u0119 potrwa\u0107) second=sekunda seconds=sekund seenAccounts=\u00a76Gracz jest tak\u017ce znany jako\:\u00a7c {0} seenOffline=\u00a76Gracz\u00a7c {0} \u00a76jest \u00a74offline\u00a76 od {1}. seenOnline=\u00a76Gracz\u00a7c {0} \u00a76jest \u00a7aonline\u00a76 od {1}. -sellBulkPermission=\u00a76You do not have permission to bulk sell. -sellHandPermission=\u00a76You do not have permission to hand sell. +sellBulkPermission=\u00a76Nie posiadasz uprawnie\u0144 na sprzeda\u017C wszystkich przedmiot\u00F3w. +sellHandPermission=\u00a76Nie posiadasz uprawnie\u0144 na sprzeda\u017C przedmiot\u00F3w trzymanych w r\u0119ku. serverFull=Serwer jest pe\u0142en graczy, spr\u00F3buj pozniej. serverTotal=\u00a77Podsumowanie serwera\:\u00a7c {0} setBal=\u00a7aTw\u00F3j stan konta ustawiono na {0}. setBalOthers=\u00a7aUstawi\u0142e\u015b saldo {0}\u00a7a na {1}. setSpawner=\u00a76Zmieniono typ spawnera na\u00a7c {0} sheepMalformedColor=\u00a74Niew\u0142a\u015Bciwa barwa. -shoutFormat=\u00a77[Shout]\u00a7r {0} +shoutFormat=\u00a77[KRZYK]\u00a7r {0} signFormatFail=\u00a74[{0}] signFormatSuccess=\u00a71[{0}] signFormatTemplate=[{0}] @@ -475,7 +475,7 @@ skullChanged=\u00a76Czaszka zosta\u0142a zmieniona na \u00a7c{0}\u00a76. slimeMalformedSize=\u00a74Niew\u0142a\u015Bciwy rozmiar. socialSpy=\u00a76SocialSpy dla {0}\u00a76\: {1} socialSpyMsgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a77{2} -socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(muted) \u00a7r +socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(wyciszony) \u00a7r socialSpyPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a7r soloMob=\u00a74Ten mob lubi by\u0107 sam. spawned=stworzono @@ -497,7 +497,7 @@ teleportationEnabled=\u00a76Teleportacja w\u0142\u0105czona. teleportationEnabledFor=\u00a76Teleportacja w\u0142\u0105czona dla {0}. teleportAtoB=\u00a76Zosta\u0142e\u015b przeteleportowany przez \u00a7c{0}\u00a76 do {1}\u00a76. teleportDisabled=\u00a7c{0} \u00a74ma zdezaktywowana teleportacje. -teleportHereRequest=\u00a7c{0}\u00a77 ma zadanie przeteleportowac Cie do nich. +teleportHereRequest=\u00a7c{0}\u00a77 ma zadanie przeteleportowa\u0107 Ci\u0119 do nich. teleporting=\u00a77Teleportacja... teleportInvalidLocation=Warto\u015b\u0107 koordynat\u00f3w nie mo\u017ce przekroczy\u0107 30000000 teleportNewPlayerError=\u00a74B\u0142\u0105d przy teleportowniu nowego gracza. @@ -509,7 +509,7 @@ teleportTop=\u00a77Teleportacja na wierzch. teleportToPlayer=\u00a76Teleportowanie do \u00a7c{0}\u00a76. tempbanExempt=\u00a74Nie mo\u017Cesz tymczasowo zbanowa\u0107 tego gracza. tempbanExemptOffline=\u00a74Nie mo\u017Cesz tymczasowo zablokowa\u0107 graczy offline. -tempbanJoin=You are banned from this server for {0}. Reason: {1} +tempbanJoin=Jeste\u015B zbanowany na tym serwerze na {0}. Pow\u00F3d: {1} tempBanned=\u00a7cZosta\u0142e\u015B tymczasowo zbanowany na {0}\:\n\u00a7r{2} thunder=\u00a7c{0} \u00a77przywo\u0142a\u0142 burz\u0119. thunderDuration=\u00a77Gracz \u00a7c{0} \u00a77przywo\u0142a\u0142 burz\u0119 na\u00a7c {1} \u00a77sekund. @@ -556,7 +556,7 @@ userIsAway=\u00a75{0} \u00a75jest teraz AFK. userIsAwayWithMessage=\u00a75{0} \u00a75jest teraz AFK. userIsNotAway=\u00a7c{0} \u00a75nie jest ju\u017C AFK. userJailed=\u00a77Zosta\u0142e\u015B zamkni\u0119ty w wi\u0119zieniu. -userUnknown=\u00a74Ostrzezenie\: Gracz ''\u00a7c{0}\u00a74'' nigdy nie by\u0142 na tym serwerze. +userUnknown=\u00a74Ostrze\u017Cenie\: Gracz \u00a7c{0}\u00a74 nigdy nie by\u0142 na tym serwerze. usingTempFolderForTesting=U\u017Cywam tymczasowego folderu dla testu\: vanish=\u00a76Vanish dla {0}\u00a76\: {1} vanished=\u00a77Ju\u017C jeste\u015B niewidoczny. @@ -574,11 +574,11 @@ warps=Warpy\: {0} warpsCount=\u00a76Jest\u00a7c {0} \u00a76warp\u00f3w. Wy\u015bwietlanie strony {1} z {2}. warpSet=\u00a77Warp\u00a7c {0} \u00a77stworzony. warpUsePermission=\u00a74Nie masz pozwolenie na korzystanie z tego Warpa. -weatherInvalidWorld=\u015awiat o nazwie {0} nie zosta\u0142 odnaleziony\! +weatherInvalidWorld=\u015aลšwiat o nazwie {0} nie zosta\u0142 odnaleziony\! weatherStorm=\u00a77Ustawi\u0142e\u015B \u00a7cburze\u00a77 w\u00a7c {0}\u00a77. weatherStormFor=\u00a77Ustawi\u0142e\u015B \u00a7cburze\u00a77 w\u00a7c {0} \u00a77na {1} sekund. weatherSun=\u00a77Ustawi\u0142e\u015B \u00a7cbezchmurn\u0105\u00a77 pogode w\u00a7c {0}\u00a77. -weatherSunFor=\u00a77Ustawi\u0142e\u015B bezchmurn\u0105 pogode w\u00a7c {0} \u00a77na {1} sekund. +weatherSunFor=\u00a77Ustawi\u0142e\u015B bezchmurn\u0105 pogod\u0119 w\u00a7c {0} \u00a77na {1} sekund. whoisAFK=\u00a77 - AFK\:\u00a7r {0} whoisAFKSince=\u00a76 - AFK\:\u00a7r {0} (Since {1}) whoisBanned=\u00a77 - Zbanowany\:\u00a7r {0}. @@ -606,4 +606,4 @@ worthSet=\u00a77Cena przedmiotu ustawiona. year=rok years=lat youAreHealed=\u00a77Zosta\u0142e\u015B uleczony. -youHaveNewMail=\u00a77Masz\u00a7c {0} \u00a77wiadomosci\! Wpisz \u00a7c/mail read\u00a77 aby je przeczytac. +youHaveNewMail=\u00a77Masz\u00a7c {0} \u00a77wiadomo\u015Bci\! Wpisz \u00a7c/mail read\u00a77 aby je przeczyta\u0107. From 834454491e8f547661d2e7460c52ad35731c48ee Mon Sep 17 00:00:00 2001 From: Leomixer17 Date: Wed, 14 Feb 2018 20:08:56 +0100 Subject: [PATCH 030/333] Update messages_it.properties (#1806) @Leomixer17 --- Essentials/src/messages_it.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index 88c894372..7e8a13c53 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -313,7 +313,7 @@ nickChanged=\u00a76Nickname modificato. nickDisplayName=\u00a74Devi abilitare change-displayname nel file di configurazione di Essentials. nickInUse=\u00a74Quel nickname \u00E8 gi\u00E0 in uso. nickNamesAlpha=\u00a74I nickname devono essere alfanumerici. -nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. +nickNamesOnlyColorChanges=\u00a74I nickname possono avere solo i colori modificati. nickNoMore=\u00a76Non disponi pi\u00F9 di un nickname. nickSet=\u00a76Il tuo nickname \u00e8 ora \u00a7c{0}\u00a76. nickTooLong=\u00a74Quel nickname \u00e8 troppo lungo. From 29b05eb167950d704a73ef74303b4621f95d4dcb Mon Sep 17 00:00:00 2001 From: Lucas2107 Date: Wed, 14 Feb 2018 20:09:59 +0100 Subject: [PATCH 031/333] Update messages_fr.properties (#1807) @lucas2107 * Update messages_fr.properties New translations * Update messages_fr.properties * Update messages_fr.properties --- Essentials/src/messages_fr.properties | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 34e49a4da..be27265c0 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -1,8 +1,8 @@ #X-Generator: crowdin.com #version: ${project.version}-b${build.number} # Single quotes have to be doubled: '' -# Translations start here -# by: +# Dรฉbut des traductions +# EssentialsX a รฉtรฉ traduit par la communautรฉ franรงaise. action=\u00a75* {0} \u00a75{1} addedToAccount=\u00a7a{0} ont \u00e9t\u00e9 ajout\u00e9s \u00e0 votre compte. addedToOthersAccount=\u00a7a{0} ajout\u00e9s au compte de {1}\u00a7a. Nouveau solde \: {2} @@ -18,7 +18,7 @@ antiBuildDrop=\u00a74Vous n''\u00eates pas autoris\u00e9 \u00e0 jeter\u00a7c {0} antiBuildInteract=\u00a74Vous n''\u00eates pas autoris\u00e9 \u00e0 interagir avec {0}. antiBuildPlace=\u00a74Vous n''\u00eates pas autoris\u00e9 \u00e0 placer\u00a7c {0} \u00a74ici. antiBuildUse=\u00a74Vous n''\u00eates pas autoris\u00e9 \u00e0 utiliser\u00a7c {0}\u00a74. -autoAfkKickReason=Vous avez \u00e9t\u00e9 expuls\u00e9 pour inactivit\u00e9 sup\u00e9rieure \u00e0 {0} minutes. +autoAfkKickReason=Vous avez \u00e9t\u00e9 expuls\u00e9 pour une inactivit\u00e9 sup\u00e9rieure \u00e0 {0} minutes. backAfterDeath=\u00a77Utilisez la commande /back pour retourner \u00e0 l''endroit ou vous \u00eates mort. backupDisabled=Aucun script de backup externe n''a \u00e9t\u00e9 configur\u00e9. backupFinished=\u00a76Sauvegarde termin\u00e9e. @@ -30,8 +30,8 @@ balanceTop=\u00a77Meilleurs soldes au ({0}) banExempt=\u00a77Vous ne pouvez pas bannir ce joueur. banExemptOffline=\u00a74Vous ne pouvez bannir les joueurs d\u00e9connect\u00e9s. banFormat=Banni \: {0} -banIpJoin=Your IP address is banned from this server. Reason: {0} -banJoin=You are banned from this server. Reason: {0} +banIpJoin=Votre adresse IP est bannie du serveur. Raison: {0} +banJoin=Vous \u00ebtes banni de ce serveur. Raison: {0} bed=\u00a7olit\u00a7r bedMissing=\u00a74Votre lit est soit non d\u00e9fini, soit manquant, soit bloqu\u00e9. bedNull=\u00a7mlit\u00a7r @@ -57,8 +57,8 @@ chatTypeLocal=[L] chatTypeSpy=[Espion] cleaned=Fichiers joueurs nettoy\u00e9s. cleaning=Nettoyage des fichiers joueurs... -clearInventoryConfirmToggleOff=\u00a76You will no longer be prompted to confirm inventory clears. -clearInventoryConfirmToggleOn=\u00a76You will now be prompted to confirm inventory clears. +clearInventoryConfirmToggleOff=\u00a76Vous ne recevrez plus les confirmations avant l''effacement de votre inventaire. +clearInventoryConfirmToggleOn=\u00a76Vous recevrez les confirmations avant l''effacement de votre inventaire. commandCooldown=\u00a7cVous ne pouvez pas ex\u00e9cuter cette commande pendant {0}. commandFailed=\u00c9chec de la commande {0} \: commandHelpFailedForPlugin=Erreur d''obtention d''aide pour \: {0} @@ -66,8 +66,8 @@ commandNotLoaded=\u00a7cLa commande {0} a \u00e9t\u00e9 mal charg\u00e9e. compassBearing=\u00a77Orientation \: {0} ({1} degr\u00e9s). configFileMoveError=\u00c9chec du d\u00e9placement de config.yml vers l''emplacement de sauvegarde. configFileRenameError=Impossible de renommer le fichier temporaire en config.yml. -confirmClear=\u00a77To \u00a7lCONFIRM\u00a77 inventory clear, please repeat command: \u00a76{0} -confirmPayment=\u00a77To \u00a7lCONFIRM\u00a77 payment of \u00a76{0}\u00a77, please repeat command: \u00a76{1} +confirmClear=\u00a77To \u00a7lCONFIRMER\u00a77 l''\u00e9ffacement de l'inventaire, r\u00e9p\u00e9tez la commande: \u00a76{0} +confirmPayment=\u00a77To \u00a7lCONFIRMER\u00a77 le paiement \u00e0 \u00a76{0}\u00a77, r\u00e9p\u00e9tez la commande: \u00a76{1} connectedPlayers=\u00a77Joueurs connect\u00e9s\u00a7r connectionFailed=\u00c9chec de la connexion. cooldownWithMessage=\u00a7cR\u00e9utilisation \: {0} @@ -75,9 +75,9 @@ coordsKeyword={0}, {1}, {2} corruptNodeInConfig=\u00a74Annonce \: votre fichier de configuration a un {0} n\u0153ud corrompu. couldNotFindTemplate=Le mod\u00e8le {0} est introuvable createdKit=\u00a76Created kit \u00a7c{0} \u00a76with \u00a7c{1} \u00a76entries and delay \u00a7c{2} -createKitFailed=\u00a74Error occurred whilst creating kit {0}. +createKitFailed=\u00a74Erreur lors de la cr\u00e9ation du kit {0}. createKitSeparator=\u00a7m----------------------- -createKitSuccess=\u00a76Created Kit: \u00a7f{0}\n\u00a76Delay: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Copy contents in the link above into your config.yml. +createKitSuccess=\u00a76Cr\u00e9ation du kit: \u00a7f{0}\n\u00a76D\u00e9lai: \u00a7f{1}\n\u00a76Lien: \u00a7f{2}\n\u00a76Vous devez copier le contenu dans le fichier config.yml. creatingConfigFromTemplate=Cr\u00e9ation de la configuration \u00e0 partir du mod\u00e8le \: {0} creatingEmptyConfig=Cr\u00e9ation d''une configuration vierge \: {0} creative=cr\u00e9atif @@ -191,7 +191,7 @@ invalidCharge=\u00a7cCharge invalide. invalidFireworkFormat=\u00a74L''option \u00a7c{0} \u00a74n''est pas une valeur valide pour \u00a7c{1}\u00a74. invalidHome=La r\u00e9sidence {0} n''existe pas invalidHomeName=\u00a74Nom de r\u00e9sindence invalide. -invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. +invalidItemFlagMeta=\u00a74Itemflag meta invalide\: \u00a7c{0}\u00a74. invalidMob=\u00a74Type de mob invalide. invalidNumber=\u00a74Nombre invalide. invalidPotion=\u00a74Potion invalide. @@ -429,7 +429,7 @@ recipeBadIndex=Il n''y a pas de rec\u00eate pour ce num\u00e9ro. recipeFurnace=\u00a76Faire fondre \: \u00a7c{0}\u00a76. recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X recipeGridItem=\u00a7c{0}X \u00a76est \u00a7c{1} -recipeMore=\u00a76Tapez /{0} \u00a7c{1}\u00a76 pour voir les autres rec\u00eates pour \u00a7c{2} +recipeMore=\u00a76Tapez /{0} \u00a7c{1}\u00a76 pour voir les autres rec\u00eates pour \u00a7c{2} recipeNone=Aucune rec\u00eate n''existe pour {0}. recipeNothing=rien recipeShapeless=\u00a76Combiner \u00a7c{0} @@ -476,7 +476,7 @@ slimeMalformedSize=Taille incorrecte. socialSpy=\u00a76SocialSpy pour \u00a7c{0}\u00a76 \: \u00a7c{1} socialSpyMsgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a77{2} socialSpyPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a7r -socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(muted) \u00a7r +socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(muet) \u00a7r soloMob=Cette cr\u00e9ature pr\u00e9f\u00e8re \u00eatre seule. spawned=invoqu\u00e9(s) spawnSet=\u00a77Le point de d\u00e9part a \u00e9t\u00e9 d\u00e9fini pour le groupe {0}. @@ -530,7 +530,7 @@ tradeSignEmptyOwner=Il n''y a rien \u00e0 collecter de cette pancarte d''\u00e9c treeFailure=\u00a7c\u00c9chec de la g\u00e9n\u00e9ration de l''arbre. Essayez de nouveau sur de l''herbe ou de la terre. treeSpawned=\u00a77Arbre cr\u00e9\u00e9. true=\u00a72oui\u00a7f -typeTpacancel=\u00a76To cancel this request, type \u00a7c/tpacancel\u00a76. +typeTpacancel=\u00a76Pour annuler cette requ\u00ebte, utilise \u00a7c/tpacancel\u00a76. typeTpaccept=\u00a77Pour le t\u00e9l\u00e9porter, utilisez \u00a7c/tpaccept\u00a77 \u00a77ou \u00a7c/tpyes\u00a77. typeTpdeny=\u00a77Pour d\u00e9cliner cette demande, utilisez \u00a7c/tpdeny\u00a77 \u00a77ou \u00a7c/tpno\u00a77. typeWorldName=\u00a77Vous pouvez aussi taper le nom d''un monde sp\u00e9cifique. From 0d634853b6175a98c4d7a9da5efa77e1fca34d64 Mon Sep 17 00:00:00 2001 From: montlikadani Date: Wed, 14 Feb 2018 20:11:16 +0100 Subject: [PATCH 032/333] Updated messages_hu.properties file (#1835) @montlikadani --- Essentials/src/messages_hu.properties | 484 +++++++++++++------------- 1 file changed, 242 insertions(+), 242 deletions(-) diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 0e0e43e8a..9d6efd6b7 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -2,24 +2,24 @@ #version: ${project.version}-b${build.number} # Single quotes have to be doubled: '' # Translations start here -# by: +# by: montlikadani action=\u00a75* {0} \u00a75{1} addedToAccount=\u00a7a{0} hozz\u00e1adva az egyenlegedhez. addedToOthersAccount=\u00a7a{0} hozz\u00e1dva {1}\u00a7a egyenleg\u00e9hez. \u00daj egyenlege\: {2} adventure=kaland alertBroke=t\u00f6r\: -alertFormat=\u00a73[{0}] \u00a7r {1} \u00a76 {2} at\: {3} +alertFormat=\u00a73[{0}] \u00a7r {1} \u00a76 {2}\: {3} alertPlaced=letett\: alertUsed=haszn\u00e1lt\: alphaNames=\u00a74A j\u00e1t\u00e9kosok nevei csak bet\u0171ket, sz\u00e1mokat \u00e9s al\u00e1h\u00faz\u00e1st tartalmazhat. antiBuildBreak=\u00a74Nincs jogod, hogy ki\u00fcss egy\u00a7c {0} \u00a74blokkot itt. antiBuildCraft=\u00a74Nincs jogod, hogy a k\u00f6vetkez\u0151t k\u00e9sz\u00edtsd\:\u00a7c {0}\u00a74. antiBuildDrop=\u00a74Nincs jogod, hogy eldobd a k\u00f6vetkez\u0151t\:\u00a7c {0}\u00a74. -antiBuildInteract=\u00a74Nincs jogod, hogy interakci\u00f3ba l\u00e9pj a\u00a7c {0}\u00a74-val/vel. +antiBuildInteract=\u00a74Nincs jogod, hogy interakci\u00f3ba l\u00e9pj a\u00a7c {0}\u00a74-val/-vel. antiBuildPlace=\u00a74Nincs jogod, hogy lehelyezed\u00a7c {0} \u00a74ide. antiBuildUse=\u00a74NIncs jogod, hogy haszn\u00e1ld a k\u00f6vetkez\u0151t\:\u00a7c {0}\u00a74. autoAfkKickReason=Kickelve lett\u00e9l {0} perc AFK miatt\! -backAfterDeath=\u00a76Meghalt\u00e1l\! A \u00a74/back\u00a76 parancssal visszajuthatsz hal\u00e1lod sz\u00ednhely\u00e9re. +backAfterDeath=\u00a76Meghalt\u00e1l\! A \u00a74/back\u00a76 paranccsal visszajuthatsz hal\u00e1lod sz\u00ednhely\u00e9re. backupDisabled=\u00a74A ment\u00e9s nincs k\u00e9sz backupFinished=\u00a76Biztons\u00e1gi ment\u00e9s k\u00e9sz. backupStarted=\u00a76Biztons\u00e1gi ment\u00e9s elkezdve. @@ -30,8 +30,8 @@ balanceTop=\u00a76Legmagasabb egyenlegek ({0}) banExempt=\u00a74Nem tilthatod ki ezt a j\u00e1t\u00e9kost. banExemptOffline=\u00a74Nem bannolhatsz Offline j\u00e1t\u00e9kost. banFormat=\u00a74Kitiltva\:\n\u00a7r{0} -banIpJoin=Your IP address is banned from this server. Reason: {0} -banJoin=You are banned from this server. Reason: {0} +banIpJoin=Az IP cรญmed kitiltva a szerverrล‘l. Oka: {0} +banJoin=Ki lettรฉl tiltva a szerverrล‘l. Oka: {0} bed=\u00a7o\u00e1gy\u00a7r bedMissing=\u00a74Az \u00e1gyad nincs be\u00e1ll\u00edtva vagy eltorlaszolt\u00e1k. bedNull=\u00a7m\u00e1gy\u00a7r @@ -44,12 +44,12 @@ bookLocked=\u00a76K\u00f6nyv lez\u00e1rva. bookTitleSet=\u00a76A k\u00f6nyv c\u00edme mostant\u00f3l\: {0}. broadcast=\u00a7r\u00a76[\u00a74K\u00f6zvet\u00edt\u00e9s\u00a76]\u00a7a {0} buildAlert=\u00a74Nincs jogod, hogy \u00e9p\u00edts. -bukkitFormatChanged=Bukkit version format changed. Version not checked. +bukkitFormatChanged=A Bukkit verziรณformรกtuma megvรกltozott. Nem ellenล‘rzรถtt verziรณ. burnMsg=\u00a76Be\u00e1ll\u00edtottad\u00a7c {0}\u00a76-nak/nek a t\u00fczet\u00a7c {1} m\u00e1sodpercre\u00a76. -cannotStackMob=\u00a74You do not have permission to stack multiple mobs. +cannotStackMob=\u00a74Nincs jogod tรถbb szรถrnyet stackelni. canTalkAgain=\u00a76Besz\u00e9lhetsz \u00fajra. cantFindGeoIpDB=A GeoIP adatb\u00e1zisa nem tal\u00e1lhat\u00f3\! -cantGamemode=\u00a74You do not have permission to change to gamemode {0} +cantGamemode=\u00a74Nincs jogod megvรกltoztani a jรกtรฉk mรณdot {0} cantReadGeoIpDB=Nem tudom beolvasni a GeoIP adatb\u00e1zist\! cantSpawnItem=\u00a74Nincs jogod, hogy lek\u00e9rd a k\u00f6vetkez\u0151 cuccot\:\u00a7c {0}\u00a74. chatTypeAdmin=[A] @@ -57,71 +57,71 @@ chatTypeLocal=[L] chatTypeSpy=\u00a72[K\u00e9m]\u00a7r cleaned=J\u00e1t\u00e9kos f\u00e1jlok t\u00f6r\u00f6lve. cleaning=J\u00e1t\u00e9kos f\u00e1jlok tiszt\u00edt\u00e1sa. -clearInventoryConfirmToggleOff=\u00a76You will no longer be prompted to confirm inventory clears. -clearInventoryConfirmToggleOn=\u00a76You will now be prompted to confirm inventory clears. -commandCooldown=\u00a7cYou cannot type that command for {0}. +clearInventoryConfirmToggleOff=\u00a76Az eszkรถztรกr tรถrlรฉse nem lesz รฉrvรฉnyben. +clearInventoryConfirmToggleOn=\u00a76Most meg kell adnod az eszkรถztรกr tรถrlรฉsรฉt. +commandCooldown=\u00a7cEzt a parancsot nem รญrhatod {0}. commandFailed=Parancs {0} sikertelen\: commandHelpFailedForPlugin=Hiba a seg\u00edts\u00e9g lek\u00e9r\u00e9sben a(z) {0} pluginban commandNotLoaded=\u00a74Parancs {0} nincs bet\u00f6ltve. compassBearing=\u00a76Ir\u00e1ny\: {0} ({1} fok). -configFileMoveError=Failed to move config.yml to backup location. -configFileRenameError=Failed to rename temp file to config.yml. -confirmClear=\u00a77To \u00a7lCONFIRM\u00a77 inventory clear, please repeat command: \u00a76{0} -confirmPayment=\u00a77To \u00a7lCONFIRM\u00a77 payment of \u00a76{0}\u00a77, please repeat command: \u00a76{1} +configFileMoveError=Nem sikerรผlt รกthelyezni a config.yml fรกjlt a mentรฉsi helyre. +configFileRenameError=Nem sikerรผlt รกtnevezni a temp fรกjlt a config.yml-be. +confirmClear=\u00a77Az eszkรถztรกr tรถrlรฉsรฉhez \u00a7lMEGERลSรT\u00a77 kรฉrjรผk, ismรฉteld meg a parancsot: \u00a76{0} +confirmPayment=\u00a77A \u00a7lMEGERลSรT\u00a77 fizetรฉs \u00a76{0}\u00a77, kรฉrlek, ismรฉteld meg a prancsot: \u00a76{1} connectedPlayers=\u00a76Csatlakozott j\u00e1t\u00e9kosok\u00a7r -connectionFailed=Failed to open connection. -cooldownWithMessage=\u00a74Cooldown\: {0} +connectionFailed=Nem sikerรผlt megnyitni a kapcsolatot. +cooldownWithMessage=\u00a74Kรฉsleltetล‘\: {0} coordsKeyword={0}, {1}, {2} -corruptNodeInConfig=\u00a74Notice\: Your configuration file has a corrupt {0} node. -couldNotFindTemplate=\u00a74Could not find template {0} -createdKit=\u00a76Created kit \u00a7c{0} \u00a76with \u00a7c{1} \u00a76entries and delay \u00a7c{2} -createKitFailed=\u00a74Error occurred whilst creating kit {0}. +corruptNodeInConfig=\u00a74Megjegyzรฉs\: A konfigurรกciรณs fรกjlod sรฉrรผlt {0} csomรณponttal rendelkezik. +couldNotFindTemplate=\u00a74Nem talรกltam sablont {0} +createdKit=\u00a76Csomag lรฉtrehozva \u00a7c{0} \u00a7c{1} \u00a76bejegyzรฉs รฉs kรฉsรฉssel \u00a7c{2} +createKitFailed=\u00a74Hiba tรถrtรฉnt a csomag lรฉtrehozรกsakor {0}. createKitSeparator=\u00a7m----------------------- -createKitSuccess=\u00a76Created Kit: \u00a7f{0}\n\u00a76Delay: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Copy contents in the link above into your config.yml. -creatingConfigFromTemplate=Creating config from template\: {0} -creatingEmptyConfig=Creating empty config\: {0} +createKitSuccess=\u00a76Csomag lรฉtrehozva: \u00a7f{0}\n\u00a76Kรฉsรฉs: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76A fenti hivatkozรกs tartalmรกnak mรกsolรกsa a config.yml-be. +creatingConfigFromTemplate=Konfigurรกlรกs lรฉtrehozรกsa sablonbรณl\: {0} +creatingEmptyConfig=รœres config lรฉtrehozรกsa\: {0} creative=kreat\u00edv currency={0}{1} -currentWorld=\u00a76Current World\:\u00a7c {0} +currentWorld=\u00a76Jelenlegi vilรกg\:\u00a7c {0} day=nap days=nap defaultBanReason=Ki lett\u00e9l tiltva\! -deleteFileError=Could not delete file\: {0} -deleteHome=\u00a76Otthon\u00a7c {0} \u00a76sikeresen elt\u00e1vol\u00edtva. +deleteFileError=Nem lehet tรถrรถlni a fรกjlt\: {0} +deleteHome=\u00a76Az otthon\u00a7c {0} \u00a76sikeresen elt\u00e1vol\u00edtva. deleteJail=\u00a76B\u00f6rt\u00f6n\u00a7c {0} \u00a76sikeresen elt\u00e1vol\u00edtva. deleteWarp=\u00a76Warp\u00a7c {0} \u00a76sikeresen elt\u00e1vol\u00edtva. -deniedAccessCommand=\u00a7c{0} \u00a74was denied access to command. -denyBookEdit=\u00a74You cannot unlock this book. -denyChangeAuthor=\u00a74You cannot change the author of this book. -denyChangeTitle=\u00a74You cannot change the title of this book. -depth=\u00a76You are at sea level. -depthAboveSea=\u00a76You are\u00a7c {0} \u00a76block(s) above sea level. -depthBelowSea=\u00a76You are\u00a7c {0} \u00a76block(s) below sea level. -destinationNotSet=Destination not set\! +deniedAccessCommand=\u00a7c{0} \u00a74megtagadva a parancs elรฉrรฉsรฉt. +denyBookEdit=\u00a74Nem tudod kinyitni ezt a kรถnyvet. +denyChangeAuthor=\u00a74Nem mรณdosรญthatod a kรถnyv szerzล‘jรฉt. +denyChangeTitle=\u00a74Nem mรณdosรญthatod a kรถnyv cรญmรฉt. +depth=\u00a76Tengeren vagy. +depthAboveSea=\u00a7c {0} \u00a76blokk(ok) tengerszint felett. +depthBelowSea=\u00a7c {0} \u00a76block(ok) tengerszint alatt. +destinationNotSet=A cรฉl nem lett beรกllรญtva\! disabled=letiltva disabledToSpawnMob=\u00a74Ennek a l\u00e9nynek a leh\u00edv\u00e1sa jelenleg le van tiltva a config f\u00e1jlban. -disableUnlimited=\u00a76Disabled unlimited placing of\u00a7c {0} \u00a76for {1}. +disableUnlimited=\u00a76Letiltva korlรกtlan szรกmรบ\u00a7c {0} \u00a76 {1}. distance=\u00a76T\u00e1vols\u00e1g\: {0} dontMoveMessage=\u00a76A teleport\u00e1l\u00e1s elkezd\u00f5dik\u00a7c {0}\u00a76 bel\u00fcl. Ne mozogj\! -downloadingGeoIp=GeoIP adatb\u00e1zis let\u00f6lt\u00e9se folyamatban... eltarthat egy kis ideig (country\: 1.7 MB, city\: 30MB) +downloadingGeoIp=GeoIP adatb\u00e1zis let\u00f6lt\u00e9se folyamatban... eltarthat egy kis ideig (orszรกg\: 1.7 MB, vรกros\: 30MB) duplicatedUserdata=Duplik\u00e1lt felhaszn\u00e1l\u00f3i adatok\: {0} \u00e9s {1}. -durability=\u00a76This tool has \u00a7c{0}\u00a76 uses left +durability=\u00a76Ez az eszkรถz \u00a7c{0}\u00a76 hasznรกlja balra editBookContents=\u00a76Mostant\u00f3l tudod szerkeszteni ezt a k\u00f6nyvet. enabled=bekapcsolva -enableUnlimited=\u00a76Lek\u00e9rve v\u00e9gtelen mennyis\u00e9g\u0171 \u00a7c {0} \u00a76\u00a7c{1}\u00a76-nak/nek. -enchantmentApplied=\u00a76A k\u00f6vetkez\u0151 enchant\:\u00a7c {0} \u00a76sikeresen r\u00e1 lett rakva a kezedbe l\u00e9v\u0151 dologra. -enchantmentNotFound=\u00a74Enchant nem tal\u00e1lhat\u00f3\! -enchantmentPerm=\u00a74Nincs jogod a k\u00f6vetkez\u0151 enchanthoz\:\u00a7c {0}\u00a74. +enableUnlimited=\u00a76Lek\u00e9rve v\u00e9gtelen mennyis\u00e9g\u0171 \u00a7c {0} \u00a76\u00a7c{1}\u00a76-nak/-nek. +enchantmentApplied=\u00a76A k\u00f6vetkez\u0151 varรกzs\:\u00a7c {0} \u00a76sikeresen r\u00e1 lett rakva a kezedbe l\u00e9v\u0151 dologra. +enchantmentNotFound=\u00a74A varรกzslat nem tal\u00e1lhat\u00f3\! +enchantmentPerm=\u00a74Nincs jogod a k\u00f6vetkez\u0151 varรกzslathoz\:\u00a7c {0}\u00a74. enchantmentRemoved=\u00a76A k\u00f6vetkez\u0151 enchant\:\u00a7c {0} \u00a76sikeresen le lett v\u00e9ve a kezedbe l\u00e9v\u0151 dologr\u00f3l. -enchantments=\u00a76Enchantok\:\u00a7r {0} +enchantments=\u00a76Varรกzslatok\:\u00a7r {0} errorCallingCommand=Hiba a parancs h\u00edv\u00e1s\u00e1ban /{0} errorWithMessage=\u00a7cHiba\:\u00a74 {0} -essentialsHelp1=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, go to http\://tiny.cc/EssentialsChat -essentialsHelp2=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, either type /essentialshelp in game or go to http\://tiny.cc/EssentialsChat +essentialsHelp1=A fรกjl tรถrรถtt, รฉs az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijavรญtani a fรกjlt, akkor menjen http\://tiny.cc/EssentialsChat +essentialsHelp2=A fรกjl tรถrรถtt, รฉs az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijavรญtani a fรกjlt, รญrja be /essentialshelp a jรกtรฉkba vagy menjen http\://tiny.cc/EssentialsChat essentialsReload=\u00a76Essentials \u00fajrat\u00f6ltve\u00a7c {0}. -exp=\u00a7c{0} \u00a76has\u00a7c {1} \u00a76exp (level\u00a7c {2}\u00a76) and needs\u00a7c {3} \u00a76more exp to level up. -expSet=\u00a7c{0} \u00a76now has\u00a7c {1} \u00a76exp. -extinguish=\u00a76You extinguished yourself. +exp=\u00a7c{0}\u00a7c {1} \u00a76exp (level\u00a7c {2}\u00a76) รฉs kell\u00a7c {3} \u00a76tรถbb xp a szintlรฉpรฉshez. +expSet=\u00a7c{0} \u00a76most van\u00a7c {1} \u00a76exp. +extinguish=\u00a76Eloltottad magad. extinguishOthers=\u00a76Eloltottad {0}\u00a76-t. failedToCloseConfig=Nem siker\u00fclt bez\u00e1rni a config f\u00e1jlt {0}. failedToCreateConfig=Nem siker\u00fclt a config f\u00e1ljt l\u00e1trehozni {0}. @@ -148,22 +148,22 @@ geoIpUrlEmpty=GeoIP let\u00f6lt\u00e9si URL hi\u00e1nyzik. geoIpUrlInvalid=GeoIP let\u00f6lt\u00e9si URL \u00e9rv\u00e9nytelen. givenSkull=\u00a76Megkaptad \u00a7c{0}\u00a76 fej\u00e9t. giveSpawn=\u00a7c{0} \u00a76darab\u00a7c {1} adva\u00a7c {2}\u00a76 j\u00e1t\u00e9kosnak. -giveSpawnFailure=\u00a74Not enough space, \u00a7c{0} \u00a7c{1} \u00a74was lost. -godDisabledFor=\u00a7cletiltva\u00a76\u00a7c {0}\u00a76-nak/nek -godEnabledFor=\u00a74enged\u00e9lyezve\u00a7c {0}\u00a76-nak/nek +giveSpawnFailure=\u00a74Nincs elรฉg hely, \u00a7c{0} \u00a7c{1} \u00a74elveszett. +godDisabledFor=\u00a7cletiltva\u00a76\u00a7c {0}\u00a76-nak/-nek +godEnabledFor=\u00a74enged\u00e9lyezve\u00a7c {0}\u00a76-nak/-nek godMode=\u00a76Isten m\u00f3d\u00a7c {0}\u00a76. groupDoesNotExist=\u00a74Ebb\u0151l a csapatb\u00f3l senki sincs fent. groupNumber=\u00a7c{0}\u00a7f van fent, teljes lista\:\u00a7c /{1} {2} hatArmor=\u00a74Ezt nem veheted fel kalapk\u00e9nt\! hatEmpty=\u00a74Nem viselsz kalapot. -hatFail=\u00a74Nincs semmi a kezedben amit felvehetn\u00e9l. +hatFail=\u00a74Nincs semmi a kezedben, amit felvehetn\u00e9l. hatPlaced=\u00a76\u00c9lvezd az \u00faj kalapod\! hatRemoved=\u00a76Kalapod elt\u00e1vol\u00edtva. haveBeenReleased=\u00a76Ki engedtek a b\u00f6rt\u00f6nb\u0151l. heal=\u00a76\u00c9leted felt\u00f6ltve. -healDead=\u00a74Nem t\u00f6lthed fel olyannak az \u00e9let\u00e9t aki halott\! +healDead=\u00a74Nem t\u00f6lthed fel olyannak az \u00e9let\u00e9t, aki halott\! healOther=\u00a7c{0}\u00a76 \u00e9lete felt\u00f6ltve. -helpConsole=Hogy seg\u00edts\u00e9get k\u00e9rj konzolb\u00f3l, \u00edrd be\: ?. +helpConsole=Hogy seg\u00edts\u00e9get k\u00e9rj a konzolb\u00f3l, \u00edrd be\: ?. helpFrom=\u00a76Parancsok {0}-b\u00f3l/b\u0151l\: helpLine=\u00a76/{0}\u00a7r\: {1} helpMatching=\u00a76Egyez\u0151 parancsok "\u00a7c{0}\u00a76"\: @@ -174,33 +174,33 @@ holdFirework=\u00a74A kezedben kell tartanod a t\u00fczij\u00e1t\u00e9kot, hogy holdPotion=\u00a74Egy b\u00e1jitalt kell a kezedben tartanod, hogy effekteket adhass hozz\u00e1. holeInFloor=\u00a74Lyuk a padl\u00f3ban\! homes=\u00a76Otthonok\:\u00a7r {0} -homeSet=\u00a76Otthon be\u00e1ll\u00edtva. +homeSet=\u00a76Az otthon be\u00e1ll\u00edtva. hour=\u00f3ra hours=\u00f3ra ignoredList=\u00a76Mell\u0151zve\:\u00a7r {0} ignoreExempt=\u00a74Nem hagyhatod figyelmen k\u00edv\u0171l ezt a j\u00e1t\u00e9kost. -ignorePlayer=\u00a76You ignore player\u00a7c {0} \u00a76from now on. -illegalDate=Illegal date format. +ignorePlayer=\u00a76Figyelmen kรญvลฑl hagytad\u00a7c {0} \u00a76mostantรณl. +illegalDate=Illegรกlis dรกtumformรกtum. infoChapter=\u00a76V\u00e1lassz fejezetet\: infoChapterPages=\u00a7e ---- \u00a76{0} \u00a7e--\u00a76 Oldal \u00a7c{1}\u00a76 \u00a7c{2}-b\u00f3l/b\u0151l \u00a7e---- infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Oldal \u00a7c{0}\u00a76/\u00a7c{1} \u00a7e---- infoUnknownChapter=\u00a74Ismeretlen fejezet. -insufficientFunds=\u00a74Insufficient funds available. -invalidBanner=\u00a74Invalid banner syntax. -invalidCharge=\u00a74Invalid charge. -invalidFireworkFormat=\u00a76Ez az opci\u00f3\: \u00a74{0} \u00a76nem \u00e9rv\u00e9nyes \u00a74{1}\u00a76-ra/re. -invalidHome=\u00a74Home\u00a7c {0} \u00a74doesn''t exist\! -invalidHomeName=\u00a74Invalid home name\! -invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. -invalidMob=\u00a74Hat\u00e1rozatlan mob t\u00edpus -invalidNumber=Invalid Number. -invalidPotion=\u00a74Invalid Potion. -invalidPotionMeta=\u00a74Invalid potion meta\: \u00a7c{0}\u00a74. -invalidSignLine=\u00a74Line\u00a7c {0} \u00a74on sign is invalid. -invalidSkull=\u00a74K\u00e9rlek j\u00e1t\u00e9kos fejet tarts a kezedben. +insufficientFunds=\u00a74Nem รกll rendelkezรฉsre elegendล‘ forrรกs. +invalidBanner=\u00a74ร‰rvรฉnytelen banner szintaxis. +invalidCharge=\u00a74ร‰rvรฉnytelen dรญj. +invalidFireworkFormat=\u00a76Ez az opci\u00f3\: \u00a74{0} \u00a76nem \u00e9rv\u00e9nyes \u00a74{1}\u00a76-ra/-re. +invalidHome=\u00a74Otthon\u00a7c {0} \u00a74nem lรฉtezik\! +invalidHomeName=\u00a74ร‰rvรฉnytelen otthon nรฉv\! +invalidItemFlagMeta=\u00a74ร‰rvรฉnytelen elem zรกszlรณ meta\: \u00a7c{0}\u00a74. +invalidMob=\u00a74Hat\u00e1rozatlan szรถrny t\u00edpus +invalidNumber=ร‰rvรฉnytelen szรกm. +invalidPotion=\u00a74ร‰rvรฉnytelen fล‘zet. +invalidPotionMeta=\u00a74ร‰rvรฉnytelen fล‘zet meta\: \u00a7c{0}\u00a74. +invalidSignLine=\u00a74Sor\u00a7c {0} \u00a74a tรกblรกn รฉrvรฉnytelen. +invalidSkull=\u00a74K\u00e9rlek, j\u00e1t\u00e9kos fejet tarts a kezedben. invalidWarpName=\u00a74Nincs ilyen warp\! -invalidWorld=\u00a74Invalid world. -inventoryClearFail=\u00a74{0}-nak/nek nincs \u00a7c{1} \u00a74db \u00a7c{2}\u00a74-ja/je. +invalidWorld=\u00a74ร‰rvรฉnytelen vilรกg. +inventoryClearFail=\u00a74{0}-nak/-nek nincs \u00a7c{1} \u00a74db \u00a7c{2}\u00a74-ja/-je. inventoryClearingAllArmor=\u00a76Az \u00f6sszes cucc \u00e9s felszerel\u00e9s t\u00f6r\u00f6lve lett {0}\u00a76 eszk\u00f6zt\u00e1r\u00e1b\u00f3l. inventoryClearingAllItems=\u00a76Az \u00f6sszes dolog t\u00f6r\u00f6lve lett {0} \u00a76eszk\u00f6zt\u00e1r\u00e1b\u00f3l. inventoryClearingAllStack=\u00a76T\u00f6r\u00f6lve minden \u00a7c{0} {1}\u00a76 eszk\u00f6zt\u00e1r\u00e1b\u00f3l. @@ -209,47 +209,47 @@ inventoryClearingStack=\u00a76Elt\u00e1vol\u00edtva \u00a7c{0} \u00a76db \u00a7c is=is isIpBanned=\u00a76IP \u00a7c{0} \u00a76m\u00e1r ki van bannolva. itemCannotBeSold=\u00a74Ezt nem adhatod el a szerveren. -itemMustBeStacked=\u00a74Item must be traded in stacks. A quantity of 2s would be two stacks, etc. +itemMustBeStacked=\u00a74A tรกrgyat kรถtegben kell รฉrtรฉkesรญteni. A 2s mennyisรฉge kรฉt stack lenne, stb. itemNames=\u00a76T\u00e1rgy r\u00f6vid nevei\:\u00a7r {0} itemNotEnough1=\u00a74Nincs el\u00e9g eladni val\u00f3 t\u00e1rgyad. -itemNotEnough2=\u00a76Ha elakarod adni az \u00f6sszes ilyen t\u00e1rgyat \u00edrd be /sell t\u00e1rgyn\u00e9v. -itemNotEnough3=\u00a76/sell itemname -1 will sell all but one item, etc. -itemsConverted=\u00a76Converted all items into blocks. -itemsCsvNotLoaded=Could not load items.csv\! -itemSellAir=T\u00e9nyleg elakartad adni a Leveg\u00f5t? Vegy\u00e9l a kezedbe valami t\u00e1rgyat. -itemsNotConverted=\u00a74You have no items that can be converted into blocks. -itemSold=\u00a7aSold for \u00a7c{0} \u00a7a({1} {2} at {3} each). -itemSoldConsole=\u00a7a{0} \u00a7asold {1} for \u00a7a{2} \u00a7a({3} items at {4} each). +itemNotEnough2=\u00a76Ha el akarod adni az \u00f6sszes ilyen t\u00e1rgyat \u00edrd be /sell t\u00e1rgyn\u00e9v. +itemNotEnough3=\u00a76/sell itemname -1 minden elemet elad, de csak egy tรฉtelt stb. +itemsConverted=\u00a76Minden elemet blokkokkรก alakรญtott. +itemsCsvNotLoaded=Nem sikerรผlt betรถlteni az items.csv\! +itemSellAir=T\u00e9nyleg el akartad adni a Leveg\u00f5t? Vegy\u00e9l a kezedbe valami t\u00e1rgyat. +itemsNotConverted=\u00a74Nincs olyan elem, amely blokkkรก alakรญthatรณ. +itemSold=\u00a7aEladva \u00a7c{0} \u00a7a({1} {2} {3} minden). +itemSoldConsole=\u00a7a{0} \u00a7aeladva {1} \u00a7a{2} \u00a7a({3} elem {4} minden). itemSpawn=\u00a76Lek\u00e9rt\u00e9l\u00a7c {0} \u00a76db \u00a7c {1}-t itemType=\u00a76T\u00e1rgy\:\u00a7c {0} \u00a76-\u00a7c {1} -jailAlreadyIncarcerated=\u00a74Person is already in jail\:\u00a7c {0} -jailList=\u00a76Jails\:\u00a7r {0} -jailMessage=\u00a74You do the crime, you do the time. +jailAlreadyIncarcerated=\u00a74A szemรฉly mรกr bรถrtรถnben van\:\u00a7c {0} +jailList=\u00a76Bรถrtรถnรถk\:\u00a7r {0} +jailMessage=\u00a74A bลฑncselekmรฉnyt megteszed, akkor az idล‘. jailNotExist=\u00a74Nincs ilyen b\u00f6rt\u00f6n. jailReleased=\u00a7c{0}\u00a76 kiengedve a b\u00f6rt\u00f6nb\u00f5l. jailReleasedPlayerNotify=\u00a76Kiengedtek a b\u00f6rt\u00f6nb\u0151l\! jailSentenceExtended=\u00a76B\u00f6rt\u00f6n ideje mostant\u00f3l\: {0} jailSet=\u00a7c{0} \u00a76 b\u00f6rt\u00f6n be\u00e1ll\u00edtva. -jumpError=\u00a74That would hurt your computer''s brain. +jumpError=\u00a74Ez bรกntani fogja a szรกmรญtรณgรฉp agyรกt. kickDefault=Ki lett\u00e9l kickelve. kickedAll=\u00a74\u00d6sszes j\u00e1t\u00e9kos kickelve a szerverr\u00f5l. kickExempt=\u00a74\u00d5t nem kickelheted. kill=\u00a7c{0}\u00a76 meg\u00f6lve. killExempt=\u00a74Nem \u00f6lheted meg \u00a7c{0}\u00a74-t. -kitContains=\u00a76Kit \u00a7c{0} \u00a76contains: +kitContains=\u00a76A csomag \u00a7c{0} \u00a76tartalmaz: kitCost=\ \u00a77\u00a7o({0})\u00a7r kitDelay=\u00a7m{0}\u00a7r -kitError=\u00a74There are no valid kits. -kitError2=\u00a74That kit is improperly defined. Contact an administrator. -kitGiveTo=\u00a76A(z)\u00a7c {0}\u00a76 csomag lek\u00e9rve \u00a7c{1}\u00a76-nak/nek. -kitInvFull=\u00a74Az eszk\u00f6zt\u00e1rad televan, \u00edgy a f\u00f6ldre kapod meg a csomagot. +kitError=\u00a74Nincs รฉrvรฉnyes csomag. +kitError2=\u00a74Ez a csomag nem megfelelล‘. Lรฉpj kapcsolatba egy rendszergazdรกval. +kitGiveTo=\u00a76A(z)\u00a7c {0}\u00a76 csomag lek\u00e9rve \u00a7c{1}\u00a76-nak/-nek. +kitInvFull=\u00a74Az eszk\u00f6zt\u00e1rad megtelt, \u00edgy a f\u00f6ldre kapod meg a csomagot. kitItem=\u00a76- \u00a7f{0} kitNotFound=\u00a74Nincs ilyen csomag. -kitOnce=\u00a74You can''t use that kit again. +kitOnce=\u00a74Nem tudod รบjra hasznรกlni a csomagot. kitReceive=\u00a76Megkaptad a(z)\u00a7c {0}\u00a76 csomagot. kits=\u00a76Csomagok\:\u00a7r {0} kitTimed=\u00a74Ezt a csomagot nem haszn\u00e1hatod m\u00e9g\u00a7c {0}\u00a74-ig. -leatherSyntax=\u00a76Leather Color Syntax\: color\:,, eg\: color\:255,0,0. +leatherSyntax=\u00a76Bล‘rszรญn szintaxis\: color\:,, eg\: color\:255,0,0. lightningSmited=\u00a76A vill\u00e1m les\u00fajtott r\u00e1d\! lightningUse=\u00a76Vill\u00e1m lesujt\u00e1sa\u00a7c {0}\u00a76-ra/re listAfkTag=\u00a77[AFK]\u00a7r @@ -257,7 +257,7 @@ listAmount=\u00a76Jelenleg \u00a7c{0}\u00a76 j\u00e1t\u00e9kos van fent a maxim\ listAmountHidden=\u00a76Jelenleg \u00a7c{0}\u00a76/{1}\u00a76 j\u00e1t\u00e9kos van fent a maxim\u00e1lis \u00a7c{2}\u00a76 j\u00e1t\u00e9kosb\u00f3l. listGroupTag={0}\u00a7r\: listHiddenTag=\u00a77[REJTETT]\u00a7r -loadWarpError=\u00a74Failed to load warp {0}. +loadWarpError=\u00a74Nem sikerรผlt a warp betรถltรฉse {0}. localFormat=[L]<{0}> {1} localNoOne= mailClear=\u00a76Hogy megjel\u00f6ld olvasottk\u00e9nt \u00edrd be a\u00a7c /mail clear \u00a76parancsot. @@ -266,120 +266,120 @@ mailDelay=T\u00fal sok lev\u00e9l lett elk\u00fcldve az utols\u00f3 percben. Max mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1} mailMessage={0} mailSent=\u00a76Lev\u00e9l elk\u00fcldve\! -mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\: +mailSentTo=\u00a7c{0}\u00a76 elkรผldtรผk a kรถvetkezล‘ levelet\: mailTooLong=\u00a74Az \u00fczeneted t\u00fal hossz\u00fa. Pr\u00f3b\u00e1ld 1000 karakter alatt. -markedAsAway=\u00a76You are now marked as away. -markedAsNotAway=\u00a76You are no longer marked as away. +markedAsAway=\u00a76Mรกr kijelรถlted, mint tรกvol. +markedAsNotAway=\u00a76Mรกr nem jelรถlted ki. markMailAsRead=\u00a76Hogy megjel\u00f6ld olvasottk\u00e9nt \u00edrd be a\u00a7c /mail clear \u00a76parancsot. matchingIPAddress=\u00a76Az al\u00e1bbi j\u00e1t\u00e9kosok csatlakoztak utolj\u00e1ra err\u0151l az IP c\u00edmr\u0151l\: -maxHomes=\u00a74You cannot set more than\u00a7c {0} \u00a74homes. +maxHomes=\u00a74Nem รกllรญthatsz be tรถbb\u00a7c {0} \u00a74otthont. maxMoney=\u00a74Ez a tranzakci\u00f3 meghaladja a be\u00e1ll\u00edtott maxim\u00e1lis tranzakci\u00f3 hat\u00e1r\u00e9rt\u00e9k\u00e9t. mayNotJail=\u00a74\u00d5t nem rakhatod b\u00f6rt\u00f6nbe\! mayNotJailOffline=\u00a74Nem b\u00f6rt\u00f6n\u00f6zhetsz be Offline j\u00e1t\u00e9kost. me=\u00e9n -minimumPayAmount=\u00a7cThe minimum amount you can pay is {0}. +minimumPayAmount=\u00a7cA minimรกlis รถsszeg, amit fizethetsz, {0}}. minute=perc minutes=perc missingItems=\u00a74Nincs \u00a7c{0} db {1}\u00a74-od. mobDataList=\u00a76\u00c9rv\u00e9nyes adatok\:\u00a7r {0} -mobsAvailable=\u00a76Mobok\:\u00a7r {0} -mobSpawnError=\u00a74Error while changing mob spawner. -mobSpawnLimit=Mob quantity limited to server limit. -mobSpawnTarget=\u00a74Target block must be a mob spawner. +mobsAvailable=\u00a76Szรถrnek\:\u00a7r {0} +mobSpawnError=\u00a74Hiba a szรถrny-idรฉzล‘ megvรกltoztatรกsa kรถzben. +mobSpawnLimit=A kiszolgรกlรณi limitre korlรกtozott szรถrny mennyisรฉg. +mobSpawnTarget=\u00a74A cรฉlblokknak szรถrny idรฉzล‘nek kell lennie. moneyRecievedFrom=\u00a7a{0}-t kapt\u00e1l {1}\u00a7a-t\u00f3l/t\u00f5l. moneySentTo=\u00a7a{0}-t k\u00fcldt\u00e9l {1}\u00a7a-nak/nek. month=h\u00f3nap months=h\u00f3nap -moreThanZero=\u00a74Quantities must be greater than 0. -moveSpeed=\u00a76Sebess\u00e9g tipus\: {0}, Sebess\u00e9g\:\u00a7c {1}\u00a76-re/ra {2}\u00a76-nak/nek. -msgDisabled=\u00a76Receiving messages \u00a7cdisabled\u00a76. -msgDisabledFor=\u00a76Receiving messages \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76. -msgEnabled=\u00a76Receiving messages \u00a7cenabled\u00a76. -msgEnabledFor=\u00a76Receiving messages \u00a7cenabled \u00a76for \u00a7c{0}\u00a76. +moreThanZero=\u00a74A mennyisรฉgeknek 0-nรกl nagyobbnak kell lenniรผk. +moveSpeed=\u00a76Sebess\u00e9g tรญpus\: {0}, Sebess\u00e9g\:\u00a7c {1}\u00a76-re/ra {2}\u00a76-nak/-nek. +msgDisabled=\u00a76รœzenetek fogadรกsa \u00a7cdisabled\u00a76. +msgDisabledFor=\u00a76รœzenetek fogadรกsa \u00a7cletiltva \u00a76 \u00a7c{0}\u00a76. +msgEnabled=\u00a76รœzenetek fogadรกsa \u00a7cengedรฉlyezve\u00a76. +msgEnabledFor=\u00a76รœzenetek fogadรกsa \u00a7cengedรฉlyezve \u00a76 \u00a7c{0}\u00a76. msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2} -msgIgnore=\u00a7c{0} \u00a74has messages disabled. +msgIgnore=\u00a7c{0} \u00a74az รผzenetek letiltva. multipleCharges=\u00a74Nem alkalmazhatsz t\u00f6bb t\u00f6ltetet enn\u00e9l a t\u00fczij\u00e1t\u00e9kn\u00e1l. -multiplePotionEffects=\u00a74You cannot apply more than one effect to this potion. +multiplePotionEffects=\u00a74Ezzel a bรกjitalal tรถbb hatรกs nem alkalmazhatรณ. mutedPlayer=\u00a76\u00a7c{0} \u00a76len\u00e9m\u00edtva. -mutedPlayerFor=\u00a76\u00a7c{0} \u00a76len\u00e9m\u00edtva\u00a7c {1}\u00a76-ra/re. -mutedUserSpeaks={0} tried to speak, but is muted. +mutedPlayerFor=\u00a76\u00a7c{0} \u00a76len\u00e9m\u00edtva\u00a7c {1}\u00a76-ra/-re. +mutedUserSpeaks={0} megprรณbรกlt beszรฉlni, de elnรฉmรญtva. muteExempt=\u00a74Nem n\u00e9m\u00edthatod \u00f5t. muteExemptOffline=\u00a74Nem n\u00e9m\u00edthatsz le Offline j\u00e1t\u00e9kost. muteNotify=\u00a7c{0} \u00a76len\u00e9m\u00edtotta \u00a7c{1}\u00a76-t. -muteNotifyFor=\u00a7c{0} \u00a76has muted player \u00a7c{1}\u00a76 for\u00a7c {2}\u00a76. +muteNotifyFor=\u00a7c{0} \u00a76jรกtรฉkos elnรฉmรญtva \u00a7c{1}\u00a76 \u00a7c {2}\u00a76. nearbyPlayers=\u00a76J\u00e1t\u00e9kosok k\u00f6zelbe\:\u00a7r {0} -negativeBalanceError=\u00a74User is not allowed to have a negative balance. -nickChanged=\u00a76Nick megv\u00e1ltoztatva. -nickDisplayName=\u00a74You have to enable change-displayname in Essentials config. +negativeBalanceError=\u00a74A felhasznรกlรณ nem jogosult negatรญv egyenlegre. +nickChanged=\u00a76A becenรฉv megv\u00e1ltoztatva. +nickDisplayName=\u00a74Engedรฉlyezned kell a change-displayname az Essentials konfigurรกciรณban. nickInUse=\u00a74Ez a n\u00e9v m\u00e1r haszn\u00e1ltban van. -nickNamesAlpha=\u00a74Nicknames must be alphanumeric. -nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. -nickNoMore=\u00a76Nincs t\u00f6bb\u00e9 nicked. -nickSet=\u00a76A nicked mostant\u00f3l\: \u00a7c{0}. -nickTooLong=\u00a76Ez a Nickn\u00e9v t\u00fal hossz\u00fa. +nickNamesAlpha=\u00a74A becenevek alfanumerikus karakterekbล‘l kell, hogy รกlljanak. +nickNamesOnlyColorChanges=\u00a74A beceneveknek csak a szรญneik vรกltoznak. +nickNoMore=\u00a76Nincs t\u00f6bb\u00e9 beceneved. +nickSet=\u00a76A beceneved mostant\u00f3l\: \u00a7c{0}. +nickTooLong=\u00a76Ez a becen\u00e9v t\u00fal hossz\u00fa. noAccessCommand=\u00a74Nincs jogod ehhez\!. noAccessPermission=\u00a74Nincs jogod a k\u00f6vetkez\u0151h\u00f6z\: \u00a7c{0}\u00a74. -noBreakBedrock=\u00a74You are not allowed to destroy bedrock. +noBreakBedrock=\u00a74Nincs engedรฉlyed kitrรถni az alapkล‘t. noDestroyPermission=\u00a74Nincs jogod, hogy ki\u00fcsd ezt\: \u00a7c{0}\u00a74. -noDurability=\u00a74This item does not have a durability. +noDurability=\u00a74Ez a tรฉtel nem rendelkezik tartรณssรกggal. noGodWorldWarning=\u00a74Vigy\u00e1zat\! Az Isten m\u00f3d ebben a vil\u00e1gba le van tiltva\! -noHelpFound=\u00a74No matching commands. -noHomeSetPlayer=\u00a76Player has not set a home. +noHelpFound=\u00a74Nincsenek megfelelล‘ parancsok. +noHomeSetPlayer=\u00a76A jรกtรฉkos nem รกllรญtott be otthont. noIgnored=\u00a76Nem hagysz figyelmen k\u00edv\u00fcl senkit. -noJailsDefined=\u00a76No jails defined. +noJailsDefined=\u00a76Nincsenek bรถrtรถnรถk. noKitGroup=\u00a74Nincs jogod ehhez a csomaghoz. -noKitPermission=\u00a74You need the \u00a7c{0}\u00a74 permission to use that kit. -noKits=\u00a76There are no kits available yet. +noKitPermission=\u00a74Szรผksรฉged van engedรฉlyre \u00a7c{0}\u00a74 a csomag hasznรกlatรกra. +noKits=\u00a76Mรฉg nincsenek csomagok. noLocationFound=\u00a74Nincs ilyen \u00e9rv\u00e9nyes hely. noMail=\u00a76Nincs leveled. -noMatchingPlayers=\u00a76No matching players found. +noMatchingPlayers=\u00a76Nincs megfelelล‘ jรกtรฉkos. noMetaFirework=\u00a74Nincs jogod, hogy alkalmazd ezt a t\u00fczij\u00e1t\u00e9k adatot. noMetaJson=JSON Metadata nem t\u00e1mogatott a Bukkit ezen verzi\u00f3j\u00e1ban. -noMetaPerm=\u00a74You do not have permission to apply \u00a7c{0}\u00a74 meta to this item. +noMetaPerm=\u00a74Nincs jogod a jelentkezรฉshez \u00a7c{0}\u00a74 meta erre a tรฉtelre. none=none noNewMail=\u00a76Nincs \u00faj leveled. -noPendingRequest=\u00a74You do not have a pending request. -noPerm=\u00a74You do not have the \u00a7c{0}\u00a74 permission. +noPendingRequest=\u00a74Nincs folyamatban lรฉvล‘ kรฉrelmed. +noPerm=\u00a74Nincs \u00a7c{0}\u00a74 jog. noPermissionSkull=\u00a74Nincs jogod megv\u00e1ltoztatni ezt a fejet. -noPermToAFKMessage=\u00a74You don''t have permission to set an AFK message. -noPermToSpawnMob=\u00a74You don''t have permission to spawn this mob. -noPlacePermission=\u00a74You do not have permission to place a block near that sign. -noPotionEffectPerm=\u00a74You do not have permission to apply potion effect \u00a7c{0} \u00a74to this potion. -noPowerTools=\u00a76You have no power tools assigned. -notAcceptingPay=\u00a74{0} \u00a74is not accepting payment. -notAllowedToQuestion=\u00a74You are not authorized to use question. -notAllowedToShout=\u00a74You are not authorized to shout. -notEnoughExperience=\u00a74You do not have enough experience. +noPermToAFKMessage=\u00a74Nincs jogod AFK รผzenet beรกllรญtรกsรกra. +noPermToSpawnMob=\u00a74Nincs jogod leidรฉzni ezt a szรถrnyet. +noPlacePermission=\u00a74Nincs jogod egy blokknak a tรกbla melletti elhelyezรฉsรฉre. +noPotionEffectPerm=\u00a74Nincs jogod a fล‘zethatรกs alkalmazรกsรกra \u00a7c{0} \u00a74ennรฉl a fล‘zetnรฉl. +noPowerTools=\u00a76Nincsenek hozzรกrendelve elektromos szerszรกmok. +notAcceptingPay=\u00a74{0} \u00a74nem fogad el fizetรฉst. +notAllowedToQuestion=\u00a74Nem vagy jogosult a kรฉrdรฉs hasznรกlatรกra. +notAllowedToShout=\u00a74Nincs jogosultsรกgod kiabรกlni. +notEnoughExperience=\u00a74Nincs elรฉg tapasztalatod. notEnoughMoney=\u00a74Erre nincs p\u00e9nzed. notFlying=nem rep\u00fcl nothingInHand=\u00a74Nincs semmi a kezedben. -notRecommendedBukkit=\u00a74* \! * Bukkit version is not the recommended build for Essentials. -notSupportedYet=Not supported yet. +notRecommendedBukkit=\u00a74* \! * A Bukkit verziรณ nem az Essentials ajรกnlott รฉpรญtรฉse. +notSupportedYet=Mรฉg nem tรกmogatott. now=most noWarpsDefined=\u00a76Nincs m\u00e9g egy warp se. -nuke=\u00a75May death rain upon them. -numberRequired=A number goes there, silly. -onlyDayNight=/time only supports day/night. +nuke=\u00a75Lehet halรกl esni rรกjuk. +numberRequired=Egy szรกm megy ott, buta. +onlyDayNight=/az idล‘ csak day/night tรกmogat. onlyPlayers=\u00a74Csak j\u00e1t\u00e9kon bel\u00fcl haszn\u00e1lhat\u00f3 a \u00a7c{0}\u00a74 parancs. onlyPlayerSkulls=\u00a74Csak j\u00e1t\u00e9kos fejnek tudod be\u00e1ll\u00edtani a tulajdonos\u00e1t (\u00a7c397\:3\u00a74). -onlySunStorm=\u00a74/weather only supports sun/storm. -openingDisposal=\u00a76Opening disposal menu... -orderBalances=\u00a76Egyenlegek \u00f6sszegy\u00fcjt\u00e9se\u00a7c {0} \u00a76j\u00e1t\u00e9kost\u00f3l, k\u00e9rlek v\u00e1rj... -oversizedTempban=\u00a74You may not ban a player for this period of time. -payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. -payConfirmToggleOn=\u00a76You will now be prompted to confirm payments. -payMustBePositive=\u00a74Amount to pay must be positive. -payToggleOff=\u00a76You are no longer accepting payments. -payToggleOn=\u00a76You are now accepting payments. +onlySunStorm=\u00a74/az idล‘jรกrรกs csak a sun/storm tรกmogatja. +openingDisposal=\u00a76Kezelรฉsi menรผ megnyitรกsa... +orderBalances=\u00a76Egyenlegek \u00f6sszegy\u00fcjt\u00e9se\u00a7c {0} \u00a76j\u00e1t\u00e9kost\u00f3l, k\u00e9rlek, v\u00e1rj... +oversizedTempban=\u00a74Nem tilthatsz ki egy jรกtรฉkost erre az idล‘re. +payConfirmToggleOff=\u00a76A tovรกbbiakban nem kรฉrik a kifizetรฉsek megerล‘sรญtรฉsรฉt. +payConfirmToggleOn=\u00a76Most a kifizetรฉsek megerล‘sรญtรฉsรฉre kรฉri. +payMustBePositive=\u00a74A fizetendล‘ รถsszegnek pozitรญvnak kell lennie. +payToggleOff=\u00a76Mรกr nem fogadod el a kifizetรฉseket. +payToggleOn=\u00a76Most elfogadod a kifizetรฉseket. pendingTeleportCancelled=\u00a74Folyamatban l\u00e9v\u0151 teleport\u00e1l\u00e1s megszak\u00edtva. -playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76. +playerBanIpAddress=\u00a76A jรกtรฉkos\u00a7c {0} \u00a76IP-re tiltva\u00a7c {1} \u00a76\: \u00a7c{2}\u00a76. playerBanned=\u00a7c{0} \u00a76kitiltotta\u00a7c {1}\u00a76-t Indok\: \u00a7c{2}\u00a76. playerInJail=\u00a74M\u00e1r bent van a(z)\u00a7c {0}\u00a74 b\u00f6rt\u00f6nbe. playerJailed=\u00a76\u00a7c{0} \u00a76beb\u00f6tr\u00f6n\u00f6zve. -playerJailedFor=\u00a76\u00a7c{0} \u00a76beb\u00f6rt\u00f6n\u00f6zve {1}-re/ra. +playerJailedFor=\u00a76\u00a7c{0} \u00a76beb\u00f6rt\u00f6n\u00f6zve {1}-re/-ra. playerKicked=\u00a7c{0} \u00a76 kickelte {1}-t. Indok\: {2}. playerMuted=\u00a76Ellett\u00e9l n\u00e9m\u00edtva\! -playerMutedFor=\u00a76Le lett\u00e9l n\u00e9m\u00edtva\u00a7c {0}-ra/re. +playerMutedFor=\u00a76Le lett\u00e9l n\u00e9m\u00edtva\u00a7c {0}-ra/-re. playerNeverOnServer=\u00a7c{0} \u00a74 m\u00e9g sose j\u00e1rt a szerveren. playerNotFound=\u00a74Nincs ilyen nev\u00fb j\u00e1t\u00e9kos. playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76. @@ -395,94 +395,94 @@ posYaw=\u00a76Fordul\u00e1s\: {0} (Forg\u00e1s) posZ=\u00a76Z\: {0} (+D\u00e9l <-> -\u00c9szak) potions=\u00a76Var\u00e1zsitalok\:\u00a7r {0}\u00a76. powerToolAir=\u00a74Nem csatolhatsz parancsot a leveg\u00f5h\u00f6z. -powerToolAlreadySet=\u00a74A(z)\u00a7c {0}\u00a74 parancs m\u00e1r bevan \u00e1ll\u00edtva \u00a7c{1}\u00a74-hoz/hez. -powerToolAttach=\u00a7c{0}\u00a76 berakva PowerToolnak a(z) {1}-ra/re. +powerToolAlreadySet=\u00a74A(z)\u00a7c {0}\u00a74 parancs m\u00e1r bevan \u00e1ll\u00edtva \u00a7c{1}\u00a74-hoz/-hez. +powerToolAttach=\u00a7c{0}\u00a76 berakva PowerToolnak a(z) {1}-ra/-re. powerToolClearAll=\u00a76\u00d6sszes PowerTool parancs ki\u00fcr\u00edtve. powerToolList=\u00a76\u00a7c{1}\u00a76-n a k\u00f6vetkez\u0151 parancsok vannak\: \u00a7c{0}\u00a76. powerToolListEmpty=\u00a74\u00a7c{0}\u00a74-hoz egy parancs sincs csatolva. -powerToolNoSuchCommandAssigned=\u00a74A(z)\u00a7c {0}\u00a74 parancs nincs be\u00e1ll\u00edtva \u00a7c{1}\u00a74-hoz/hez. +powerToolNoSuchCommandAssigned=\u00a74A(z)\u00a7c {0}\u00a74 parancs nincs be\u00e1ll\u00edtva \u00a7c{1}\u00a74-hoz/-hez. powerToolRemove=\u00a74A(z)\u00a7c {0}\u00a74 parancs lelett szedve \u00a7c{1}\u00a74-r\u00f3l/r\u0151l. powerToolRemoveAll=\u00a76\u00d6sszes parancs elt\u00e1vol\u00edtva \u00a7c{0}\u00a76-r\u00f3l/r\u0151l. powerToolsDisabled=\u00a76Az \u00f6sszes power tool-os eszk\u00f6z\u00f6d letiltva. powerToolsEnabled=\u00a76Az \u00f6sszes power tool-os eszk\u00f6z\u00f6d enged\u00e9lyezve. -pTimeCurrent=\u00a7c{0}\u00a76''s time is\u00a7c {1}\u00a76. -pTimeCurrentFixed=\u00a7c{0}\u00a76''s time is fixed to\u00a7c {1}\u00a76. -pTimeNormal=\u00a7c{0}\u00a76''s time is normal and matches the server. -pTimeOthersPermission=\u00a74You are not authorized to set other players'' time. -pTimePlayers=\u00a76These players have their own time\:\u00a7r -pTimeReset=\u00a76Player time has been reset for\: \u00a7c{0} -pTimeSet=\u00a76Player time is set to \u00a7c{0}\u00a76 for\: \u00a7c{1}. -pTimeSetFixed=\u00a76Player time is fixed to \u00a7c{0}\u00a76 for\: \u00a7c{1}. -pWeatherCurrent=\u00a7c{0}\u00a76''s weather is\u00a7c {1}\u00a76. -pWeatherInvalidAlias=\u00a74Invalid weather type -pWeatherNormal=\u00a7c{0}\u00a76''s weather is normal and matches the server. -pWeatherOthersPermission=\u00a74You are not authorized to set other players'' weather. -pWeatherPlayers=\u00a76These players have their own weather\:\u00a7r -pWeatherReset=\u00a76Player weather has been reset for\: \u00a7c{0} -pWeatherSet=\u00a76Player weather is set to \u00a7c{0}\u00a76 for\: \u00a7c{1}. +pTimeCurrent=\u00a7c{0}\u00a76idล‘\u00a7c {1}\u00a76. +pTimeCurrentFixed=\u00a7c{0}\u00a76 idล‘ rรถgzรญtve\u00a7c {1}\u00a76. +pTimeNormal=\u00a7c{0}\u00a76 ideje normรกlis รฉs megfelel a kiszolgรกlรณnak. +pTimeOthersPermission=\u00a74Nem vagy jogosult mรกs jรกtรฉkosok idล‘tartamรกra. +pTimePlayers=\u00a76Ezeknek a jรกtรฉkosoknak sajรกt idejรผk van\:\u00a7r +pTimeReset=\u00a76A jรกtรฉkos ideje vissza lett รกllรญtva\: \u00a7c{0} +pTimeSet=\u00a76A jรกtรฉkos ideje beรกllรญtva \u00a7c{0}\u00a76 \: \u00a7c{1}. +pTimeSetFixed=\u00a76A jรกtรฉkos ideje rรถgzรญtett \u00a7c{0}\u00a76 \: \u00a7c{1}. +pWeatherCurrent=\u00a7c{0}\u00a76 az idล‘jรกrรกs\u00a7c {1}\u00a76. +pWeatherInvalidAlias=\u00a74ร‰rvรฉnytelen idล‘jรกrรกs tรญpus +pWeatherNormal=\u00a7c{0}\u00a76 az idล‘jรกrรกs normรกlis รฉs megfelel a szervernek. +pWeatherOthersPermission=\u00a74Nem vagy jogosult a tรถbbi jรกtรฉkos idล‘jรกrรกsรกnak beรกllรญtรกsรกra. +pWeatherPlayers=\u00a76Ezek a jรกtรฉkosok sajรกt idล‘jรกrรกssal rendelkeznek\:\u00a7r +pWeatherReset=\u00a76A jรกtรฉkos idล‘jรกrรกsa vissza lett รกllรญtva\: \u00a7c{0} +pWeatherSet=\u00a76A jรกtรฉkos idล‘jรกrรกsรกnak beรกllรญtรกsa \u00a7c{0}\u00a76 \: \u00a7c{1}. questionFormat=\u00a72[K\u00e9rd\u00e9s]\u00a7r {0} radiusTooBig=\u00a74Ez a sug\u00e1r t\u00fal nagy\! A maximum\: {0}. readNextPage=\u00a76\u00cdrd be a\u00a7c /{0} {1} \u00a76 parancsot a k\u00f6vetkez\u00f5 oldal elolvas\u00e1s\u00e1hoz. -recentlyForeverAlone=\u00a74{0} recently went offline. +recentlyForeverAlone=\u00a74{0} a kรถzelmรบltban ment. recipe=\u00a76\u00a7c{0}\u00a76 receptje (\u00a7c{1}\u00a76 az \u00a7c{2}\u00a76-b\u00f3l/b\u0151l) recipeBadIndex=Nincs recept ennyihez. recipeFurnace=\u00a76\u00c9gess\: \u00a7c{0}\u00a76-t. recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X recipeGridItem=\u00a7c{0}X \u00a76is \u00a7c{1} recipeMore=\u00a76\u00cdrd be a /{0} \u00a7c{1}\u00a76 parancsot, hogy t\u00f6bb receptet l\u00e1thass \u00a7c{2}\u00a76-hoz. -recipeNone={0}-nak/nek nincs receptje. +recipeNone={0}-nak/-nek nincs receptje. recipeNothing=semmi recipeShapeless=\u00a76Egyes\u00edts \u00a7c{0} recipeWhere=\u00a76Hol\: {0} removed=\u00a76Elt\u00e1vol\u00edtva\u00a7c {0} \u00a76entit\u00e1s. repair=\u00a76Sikeresen megjav\u00edtottad a az al\u00e1bbi dolgaidat\: \u00a7c{0}. repairAlreadyFixed=\u00a74Ezt a t\u00e1rgyat m\u00e9g nem kell jav\u00edtanod. -repairEnchanted=\u00a74Nincs jogod, hogy enchantolt t\u00e1rgyakat jav\u00edts. +repairEnchanted=\u00a74Nincs jogod, hogy varรกzsolt t\u00e1rgyakat jav\u00edts. repairInvalidType=\u00a74Ez a t\u00e1rgy nem jav\u00edthat\u00f3. -repairNone=\u00a74Nincs olyan eszk\u00f6z\u00f6d/felszerel\u00e9sed amit jav\u00edtani k\u00e9ne. -requestAccepted=\u00a76Teleport\u00e1l\u00e1si k\u00e9relem elfogadva. +repairNone=\u00a74Nincs olyan eszk\u00f6z\u00f6d/felszerel\u00e9sed, amit jav\u00edtani k\u00e9ne. +requestAccepted=\u00a76A teleport\u00e1l\u00e1si k\u00e9relem elfogadva. requestAcceptedFrom=\u00a7c{0} \u00a76elfogadta a k\u00e9relmed. requestDenied=\u00a76Teleport\u00e1l\u00e1si k\u00e9relem elutas\u00edtva. requestDeniedFrom=\u00a7c{0} \u00a76elutas\u00edtotta a k\u00e9relmed. requestSent=\u00a76K\u00e9r\u00e9s elk\u00fcldve\u00a7c {0}\u00a76-nak/nek. -requestSentAlready=\u00a74You have already sent {0}\u00a74 a teleport request. -requestTimedOut=\u00a74Teleport k\u00e9relem kifutott az id\u00f5b\u00f5l. -requiredBukkit=\u00a76* \! * You need atleast build {0} of CraftBukkit, download it from http\://dl.bukkit.org/downloads/craftbukkit/ -resetBal=\u00a76Egyenleg vissza \u00e1ll\u00edtva \u00a7a{0}-ra/re \u00a76minden fentl\u00e9v\u0151 j\u00e1t\u00e9kosnak. +requestSentAlready=\u00a74Mรกr elkรผldted {0}\u00a74 a teleport kรฉrelmet. +requestTimedOut=\u00a74A teleportรกlรกs k\u00e9relem kifutott az id\u00f5b\u00f5l. +requiredBukkit=\u00a76* \! * Szรผksรฉged van a CraftBukkit รฉpรญtรฉsรฉhez {0}, letรถlted innen http\://dl.bukkit.org/downloads/craftbukkit/ +resetBal=\u00a76Egyenleg vissza \u00e1ll\u00edtva \u00a7a{0}-ra/-re \u00a76minden fentl\u00e9v\u0151 j\u00e1t\u00e9kosnak. resetBalAll=\u00a76Egyenleg vissza\u00e1ll\u00edtva \u00a7a{0}\u00a76-ra/re az \u00f6sszes j\u00e1t\u00e9kosnak. returnPlayerToJailError=\u00a74Hiba t\u00f6rt\u00e9nt amikor\u00a7c {0} \u00a74visszapr\u00f3b\u00e1lt t\u00e9rni a(z) \u00a7c{1}\u00a74 b\u00f6rt\u00f6nbe\! -runningPlayerMatch=\u00a76Running search for players matching ''\u00a7c{0}\u00a76'' (this could take a little while) +runningPlayerMatch=\u00a76A jรกtรฉkosok megfelelล‘ keresรฉsรฉnek futtatรกsa ''\u00a7c{0}\u00a76'' (ez eltarthat egy kicsit) second=m\u00e1sodperc seconds=m\u00e1sodperc seenAccounts=\u00a76J\u00e1t\u00e9kos ismerhet\u0151\u00a7c {0} \u00a76n\u00e9ven is seenOffline=\u00a76A \u00a7c{0} \u00a76nev\u0171 j\u00e1t\u00e9kos \u00a74nem el\u00e9rhet\u0151 \u00a76ennyi ideje\: \u00a7c{1}\u00a76. seenOnline=\u00a76A \u00a7c{0} \u00a76nev\u0171 j\u00e1t\u00e9kos \u00a74el\u00e9rhet\u0151 \u00a76ennyi ideje\: \u00a7c{1}\u00a76. -sellBulkPermission=\u00a76You do not have permission to bulk sell. -sellHandPermission=\u00a76You do not have permission to hand sell. +sellBulkPermission=\u00a76Nincs jogod a tรถmeges รฉrtรฉkesรญtรฉsre. +sellHandPermission=\u00a76Nincs jogod a kezedben lรฉvล‘ tรกrgy eladรกsรกra. serverFull=A szerver tele van\! serverTotal=\u00a76Szerver \u00f6sszesen\:\u00a7c {0} setBal=\u00a7aEgyenleged be\u00e1ll\u00edtva {0}-ra. setBalOthers=\u00a7aBe\u00e1ll\u00edtottad {0}\u00a7a egyenleg\u00e9t {1}-ra. -setSpawner=\u00a76Spawner \u00faj tipusa\:\u00a7c {0}. -sheepMalformedColor=\u00a74Malformed color. +setSpawner=\u00a76Idรฉzล‘ \u00faj tรญpusa\:\u00a7c {0}. +sheepMalformedColor=\u00a74Rosszformรกzott szรญn. shoutFormat=\u00a76[Ki\u00e1lt]\u00a7r {0} signFormatFail=\u00a74[{0}] signFormatSuccess=\u00a71[{0}] signFormatTemplate=[{0}] -signProtectInvalidLocation=\u00a74You are not allowed to create sign here. -similarWarpExist=\u00a74A warp with a similar name already exists. +signProtectInvalidLocation=\u00a74Nincs engedรฉlyed tรกblรกt lรฉtrehozni. +similarWarpExist=\u00a74Mรกr lรฉtezik hasonlรณ nรฉvvel rendelkezล‘ lรกnc. skullChanged=\u00a76Fej megv\u00e1ltoztatva \u00a7c{0}\u00a76 fej\u00e9re. -slimeMalformedSize=\u00a74Malformed size. -socialSpy=\u00a76SocialSpy \u00a7c{0}\u00a76-nak/nek\: \u00a7c{1} +slimeMalformedSize=\u00a74Hibรกs mรฉret. +socialSpy=\u00a76SocialSpy \u00a7c{0}\u00a76-nak/-nek\: \u00a7c{1} socialSpyMsgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a77{2} -socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(muted) \u00a7r +socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(nรฉmรญtva) \u00a7r socialSpyPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a7r -soloMob=\u00a74That mob likes to be alone. -spawned=spawnolva +soloMob=\u00a74A szรถrny szeretnek egyedรผl maradni. +spawned=idรฉzve spawnSet=\u00a76Kezd\u00f5pont be\u00e1ll\u00edtva a \u00a7c{0}\u00a76 csoportnak. -spectator=spectator +spectator=nรฉzล‘ sudoExempt=\u00a74Nem k\u00e9nyszer\u00edtheted \u00f5t. -sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1} +sudoRun=\u00a76Erล‘ltetรฉse\u00a7c {0} \u00a76to futtatรกs\:\u00a7r /{1} suicideMessage=\u00a76Viszl\u00e1t sz\u00e9p vil\u00e1g... suicideSuccess=\u00a76{0} \u00a76feladta az \u00e9let\u00e9t. survival=t\u00fal\u00e9l\u00f5 @@ -500,85 +500,85 @@ teleportDisabled=\u00a7c{0} \u00a74letiltotta, hogy r\u00e1 teleport\u00e1ljanak teleportHereRequest=\u00a7c{0}\u00a76 szeretn\u00e9, hogy hozz\u00e1 teleport\u00e1lj. teleporting=\u00a76Teleport\u00e1l\u00e1s... teleportInvalidLocation=A koordin\u00e1t\u00e1k \u00e9rt\u00e9ke nem lehet t\u00f6bb 30000000-n\u00e9l -teleportNewPlayerError=\u00a74Failed to teleport new player\! +teleportNewPlayerError=\u00a74Nem sikerรผlt teleportรกlni az รบj jรกtรฉkost\! teleportRequest=\u00a7c{0}\u00a76 hozz\u00e1d szeretne teleport\u00e1lni. -teleportRequestAllCancelled=\u00a76All outstanding teleport requests cancelled. -teleportRequestSpecificCancelled=\u00a76Outstanding teleport request with {0} cancelled. +teleportRequestAllCancelled=\u00a76Minden kiemelkedล‘ teleportรกlรกs kรฉrรฉs tรถrรถlve. +teleportRequestSpecificCancelled=\u00a76Kiemelkedล‘ teleportรกlรกsi kรฉrelem {0} tรถrรถlve. teleportRequestTimeoutInfo=\u00a76\u00a7c{0} m\u00e1sodperced\u00a76 van, hogy ezt elfogadd. teleportTop=\u00a76Teleport\u00e1l\u00e1s a legmagasabb pontra. -teleportToPlayer=\u00a76Teleport\u00e1l\u00e1s \u00a7c{0}\u00a76-hoz/hez. +teleportToPlayer=\u00a76Teleport\u00e1l\u00e1s \u00a7c{0}\u00a76-hoz/-hez. tempbanExempt=\u00a74Nem tempbannolhatod ezt a szem\u00e9lyt. tempbanExemptOffline=\u00a74Nem tempbannolhatsz Offline j\u00e1t\u00e9kost. -tempbanJoin=You are banned from this server for {0}. Reason: {1} -tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2} -thunder=\u00a76You\u00a7c {0} \u00a76thunder in your world. -thunderDuration=\u00a76You\u00a7c {0} \u00a76thunder in your world for\u00a7c {1} \u00a76seconds. -timeBeforeHeal=\u00a74Time before next heal\:\u00a7c {0}\u00a76. -timeBeforeTeleport=\u00a74Time before next teleport\:\u00a7c {0}\u00a76. +tempbanJoin=Ki lettรฉl tiltva a szerverrล‘l {0}. Oka: {1} +tempBanned=\u00a7cKi lettรฉl tiltva a szerverrล‘l {0}\:\n\u00a7r{2} +thunder=\u00a7c {0} \u00a76mennydรถrgรฉs a vilรกgban. +thunderDuration=\u00a7c {0} \u00a76mennydรถrgรถtt a vilรกgodban\u00a7c {1} \u00a76mรกsodpercre. +timeBeforeHeal=\u00a74A kรถvetkezล‘ รฉlet feltรถltรฉs\:\u00a7c {0}\u00a76. +timeBeforeTeleport=\u00a74A kรถvetkezล‘ teleportรกlรกs\:\u00a7c {0}\u00a76. timeFormat=\u00a7c{0}\u00a76 vagy \u00a7c{1}\u00a76 vagy \u00a7c{2}\u00a76 timeSetPermission=\u00a74Nincs jogod, hogy \u00e1ll\u00edtsd az id\u00f5t. -timeSetWorldPermission=\u00a74You are not authorized to set the time in world ''{0}''. -timeWorldCurrent=\u00a76The current time in\u00a7c {0} \u00a76is \u00a7c{1}\u00a76. +timeSetWorldPermission=\u00a74Nincs jogod beรกllรญtani az idล‘t a vilรกg ''{0}''. +timeWorldCurrent=\u00a76A jelenlegi idล‘\u00a7c {0} \u00a7c{1}\u00a76. timeWorldSet=\u00a76Id\u00f5 be\u00e1ll\u00edtva\u00a7c {0}\u00a76-re a \u00a7c{1}\u00a76 vil\u00e1gban. totalSellableAll=\u00a7aAz \u00f6sszes eladhat\u00f3 dolgod\u00e9rt \u00e9s blockjaid\u00e9rt \u00a7c{1}\u00a7a-t kapsz. totalSellableBlocks=\u00a7aAz \u00f6sszes eladhat\u00f3 blockjaid\u00e9rt \u00a7c{1}\u00a7a-t kapsz. -totalWorthAll=\u00a7aSold all items and blocks for a total worth of \u00a7c{1}\u00a7a. -totalWorthBlocks=\u00a7aSold all blocks for a total worth of \u00a7c{1}\u00a7a. +totalWorthAll=\u00a7aMinden tรกrgyat รฉs blokkot eladott egy teljes รฉrtรฉkre \u00a7c{1}\u00a7a. +totalWorthBlocks=\u00a7aEladtad az รถsszes blokkot, รถsszesen รฉrtรฉkben \u00a7c{1}\u00a7a. tps=\u00a76Jelenlegi TPS \= {0} tradeSignEmpty=\u00a74A t\u00e1bla nem tud neked adni \u00e1rut. tradeSignEmptyOwner=\u00a74A t\u00e1bl\u00e1b\u00f3l m\u00e9g nem v\u00e1s\u00e1rolt senki. -treeFailure=\u00a74Tree generation failure. Try again on grass or dirt. -treeSpawned=\u00a76Fa spawnolva. +treeFailure=\u00a74Fa termelรฉsi hiba. Prรณbรกlja รบjra a fรผvet vagy a piszkot. +treeSpawned=\u00a76Fa idรฉzve. true=\u00a7aigaz\u00a7r -typeTpacancel=\u00a76To cancel this request, type \u00a7c/tpacancel\u00a76. +typeTpacancel=\u00a76A kรฉrelem tรถrlรฉsรฉhez รญrd be \u00a7c/tpacancel\u00a76. typeTpaccept=\u00a76Hogy elfogadd \u00edrd be \u00a7c/tpaccept\u00a76. typeTpdeny=\u00a76Hogy elutas\u00edtsd \u00edrd be \u00a7c/tpdeny\u00a76. -typeWorldName=\u00a76You can also type the name of a specific world. -unableToSpawnItem=\u00a74Nem lehetett lespawnolni \u00a7c{0}\u00a74-t, mert ez nem spawnolhat\u00f3 t\u00e1rgy. -unableToSpawnMob=\u00a74Unable to spawn mob. -unignorePlayer=\u00a76You are not ignoring player\u00a7c {0} \u00a76anymore. +typeWorldName=\u00a76Beรญrhatod egy adott vilรกg nevรฉt is. +unableToSpawnItem=\u00a74Nem lehetett leidรฉzni \u00a7c{0}\u00a74-t, mert ez nem idรฉzhetล‘ t\u00e1rgy. +unableToSpawnMob=\u00a74Nem lehetett a szรถrnyet idรฉzni. +unignorePlayer=\u00a76Nem hagyod figyelmen kรญvรผl a jรกtรฉkosokat\u00a7c {0} \u00a76tรถbbรฉ. unknownItemId=\u00a74Ismeretlen t\u00e1rgy ID\:\u00a7r {0}\u00a74. -unknownItemInList=\u00a74Unknown item {0} in {1} list. +unknownItemInList=\u00a74Ismeretlen {0} elem a {1} listรกban. unknownItemName=\u00a74Ismeretlen t\u00e1rgy n\u00e9v\: {0}. unlimitedItemPermission=\u00a74Nincs jogod a v\u00e9gtelens\u00e9gre a k\u00f6vetkez\u0151 t\u00e1rgyn\u00e1l\: \u00a7c{0}\u00a74. unlimitedItems=\u00a76V\u00e9gtelen t\u00e1rgyak\:\u00a7r unmutedPlayer=\u00a7c {0}\u00a76-r\u00f3l fellett oldva a n\u00e9m\u00edt\u00e1s. unsafeTeleportDestination=\u00a74Ahova teleport\u00e1lni szeretn\u00e9l nem biztons\u00e1gos \u00e9s a bisztons\u00e1gos teleport kikapcsolva. unvanishedReload=\u00a74A reload k\u00f6vetkezt\u00e9ben mindenki l\u00e1tni fog. -upgradingFilesError=Error while upgrading the files. +upgradingFilesError=Hiba tรถrtรฉnt a fรกjlok frissรญtรฉse kรถzben. uptime=\u00a76M\u00fbk\u00f6d\u00e9si id\u00f5\:\u00a7c {0} userAFK=\u00a75{0} \u00a75most AFK \u00e9s nem bisztos hogy fog v\u00e1laszolni. -userAFKWithMessage=\u00a75{0} \u00a75most AFK \u00e9s nem bisztos hogy fog v\u00e1laszolni. {1} -userdataMoveBackError=Failed to move userdata/{0}.tmp to userdata/{1}\! -userdataMoveError=Failed to move userdata/{0} to userdata/{1}.tmp\! -userDoesNotExist=\u00a74The user\u00a7c {0} \u00a74does not exist. +userAFKWithMessage=\u00a75{0} \u00a75most AFK \u00e9s nem bisztos, hogy fog v\u00e1laszolni. {1} +userdataMoveBackError=Nem sikerรผlt az userdata/{0}.tmp รกthelyezรฉse a userdata/{1}\! +userdataMoveError=Nem sikerรผlt az userdata/{0} รกthelyezรฉse a userdata/{1}.tmp\! +userDoesNotExist=\u00a74A felhasznรกlรณ\u00a7c {0} \u00a74nem lรฉtezik. userIsAway=\u00a77* \u00a75{0}\u00a77 elment a g\u00e9pt\u0151l... userIsAwayWithMessage=\u00a77* \u00a75{0}\u00a77 elment a g\u00e9pt\u0151l... userIsNotAway=\u00a77* \u00a75{0} \u00a77visszaj\u00f6tt... userJailed=\u00a76Beb\u00f6rt\u00f6n\u00f6ztek\! userUnknown=\u00a74Figyelem\: ''\u00a7c{0}\u00a74'' m\u00e9g sose j\u00e1rt a szerveren. -usingTempFolderForTesting=Using temp folder for testing\: -vanish=\u00a76L\u00e1thatatlans\u00e1g {0}\u00a76-nak/nek\: {1} +usingTempFolderForTesting=Hล‘mappรกk hasznรกlata a tesztelรฉshez\: +vanish=\u00a76L\u00e1thatatlans\u00e1g {0}\u00a76-nak/-nek\: {1} vanished=\u00a76Sikeresen elt\u00fcnt\u00e9l a norm\u00e1lis j\u00e1t\u00e9kosok el\u00f5l \u00e9s a j\u00e1t\u00e9kbeli parancsokb\u00f3l. -versionMismatch=\u00a74Version mismatch\! Please update {0} to the same version. -versionMismatchAll=\u00a74Version mismatch\! Please update all Essentials jars to the same version. +versionMismatch=\u00a74Verziรณ eltรฉrรฉs\! Kรฉrjรผk, frissรญtse {0} ugyanarra a verziรณra. +versionMismatchAll=\u00a74Verziรณ eltรฉrรฉs\! Kรฉrjรผk, frissรญtse az รถsszes Essentials jart ugyanarra a verziรณra. voiceSilenced=\u00a76El vagy n\u00e9m\u00edtva\! walking=s\u00e9ta -warpDeleteError=\u00a74Problem deleting the warp file. +warpDeleteError=\u00a74Problรฉma a warp fรกjl tรถrlรฉsรฉvel. warpingTo=\u00a76Warpol\u00e1s a(z)\u00a7c {0}\u00a76 helyre. warpList={0} warpListPermission=\u00a74Nincs jogod, hogy ki list\u00e1zd a Warpokat. warpNotExist=\u00a74Nincs ilyen warp. -warpOverwrite=\u00a74You cannot overwrite that warp. +warpOverwrite=\u00a74Nem lehet felรผlรญrni a warpot. warps=\u00a76Teleportok\:\u00a7r {0} warpsCount=\u00a76Van\u00a7c {0} \u00a76warp. Ez az \u00a7c{1}.\u00a76 oldal a \u00a7c{2}\u00a76-b\u00f3l/b\u0151l. warpSet=\u00a76Warp\u00a7c {0} \u00a76be\u00e1ll\u00edtva. -warpUsePermission=\u00a74Nincs jogod oda Warpolni. +warpUsePermission=\u00a74Nincs jogod oda warpolni. weatherInvalidWorld=A vil\u00e1g {0} nem tal\u00e1lhat\u00f3\! weatherStorm=\u00a76Be\u00e1ll\u00edtottad az id\u00f5t \u00a7ces\u00f5sre\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. -weatherStormFor=\u00a76You set the weather to \u00a7cstorm\u00a76 in\u00a7c {0} \u00a76for {1} seconds. +weatherStormFor=\u00a76Beรกllรญtottad az idล‘jรกrรกst \u00a7cesล‘sre\u00a7c {0}\u00a76 vilรกgban {1} mรกsodpercre. weatherSun=\u00a76Be\u00e1ll\u00edtottad az id\u00f5t \u00a7cnaposra\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. -weatherSunFor=\u00a76You set the weather to \u00a7csun\u00a76 in\u00a7c {0} \u00a76for {1} seconds. +weatherSunFor=\u00a76Beรกllรญtottad az idล‘jรกrรกst \u00a7cnaposra\u00a7c {0}\u00a76 vilรกgban \u00a76 {1} mรกsodpercre. whoisAFK=\u00a76 - AFK\:\u00a7r {0} whoisAFKSince=\u00a76 - AFK\:\u00a7r {0} (Since {1}) whoisBanned=\u00a76 - Bannolva\:\u00a7r {0} @@ -588,20 +588,20 @@ whoisGamemode=\u00a76 - J\u00e1t\u00e9km\u00f3d\:\u00a7r {0} whoisGeoLocation=\u00a76 - Helyezked\u00e9s\:\u00a7r {0} whoisGod=\u00a76 - Isten m\u00f3d\:\u00a7r {0} whoisHealth=\u00a76 - \u00c9let\:\u00a7r {0}/20 -whoisHunger=\u00a76 - \u00c9hs\u00e9g\:\u00a7r {0}/20 (+{1} saturation) +whoisHunger=\u00a76 - \u00c9hs\u00e9g\:\u00a7r {0}/20 (+{1} telรญtettsรฉg) whoisIPAddress=\u00a76 - IP C\u00edm\:\u00a7r {0} whoisJail=\u00a76 - B\u00f6rt\u00f6n\:\u00a7r {0} whoisLocation=\u00a76 - Helye\:\u00a7r ({0}, {1}, {2}, {3}) whoisMoney=\u00a76 - P\u00e9nz\:\u00a7r {0} whoisMuted=\u00a76 - N\u00e9m\u00edtva\:\u00a7r {0} -whoisNick=\u00a76 - Nick\:\u00a7r {0} +whoisNick=\u00a76 - Becenรฉv\:\u00a7r {0} whoisOp=\u00a76 - OP\:\u00a7r {0} -whoisPlaytime=\u00a76 - Playtime\:\u00a7r {0} -whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0} +whoisPlaytime=\u00a76 - Jรกtรฉkidล‘\:\u00a7r {0} +whoisTempBanned=\u00a76 - Ban lejรกr:\u00a7r {0} whoisTop=\u00a76 \=\=\=\=\=\= KiIs\u00d6\:\u00a7c {0} \u00a76\=\=\=\=\=\= whoisUuid=\u00a76 - UUID\:\u00a7r {0} -worth=\u00a7aStack of {0} worth \u00a7c{1}\u00a7a ({2} item(s) at {3} each) -worthMeta=\u00a7aStack of {0} with metadata of {1} worth \u00a7c{2}\u00a7a ({3} item(s) at {4} each) +worth=\u00a7aStackelรฉs {0} รฉrdemes \u00a7c{1}\u00a7a ({2} elem(ek) {3} minden) +worthMeta=\u00a7aStackelรฉs {0} az {1} รฉrtรฉkลฑ metaadatokkal \u00a7c{2}\u00a7a ({3} elem(ek) {4} minden) worthSet=\u00a76\u00c1r be\u00e1ll\u00edtva year=\u00e9v years=\u00e9v From fe7b6097c977679f7a4b820251807b212c583f43 Mon Sep 17 00:00:00 2001 From: md678685 Date: Sat, 17 Feb 2018 17:42:58 +0000 Subject: [PATCH 033/333] Fix kit reloading (#1855) --- Essentials/src/com/earth2me/essentials/Kits.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Kits.java b/Essentials/src/com/earth2me/essentials/Kits.java index de38fb4d5..92b3f70e5 100644 --- a/Essentials/src/com/earth2me/essentials/Kits.java +++ b/Essentials/src/com/earth2me/essentials/Kits.java @@ -21,13 +21,13 @@ public class Kits implements IConf { public Kits(final IEssentials essentials) { config = new EssentialsConf(new File(essentials.getDataFolder(), "kits.yml")); config.setTemplateName("/kits.yml"); - config.load(); - kits = _getKits(); + reloadConfig(); } @Override public void reloadConfig() { + config.load(); kits = _getKits(); } From 4e8e7bec3f424129512b9040f856b47fa9cb33ea Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 7 Mar 2018 03:25:51 +0000 Subject: [PATCH 034/333] Add /ess version subcommand (#1514) --- .../commands/Commandessentials.java | 61 +++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java index 12f3d59ac..433ac7e79 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java @@ -15,14 +15,12 @@ import org.bukkit.Server; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginDescriptionFile; +import org.bukkit.plugin.PluginManager; import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.UUID; +import java.util.*; import static com.earth2me.essentials.I18n.tl; @@ -35,6 +33,12 @@ public class Commandessentials extends EssentialsCommand { private transient int taskid; private final transient Map noteBlocks = new HashMap(); + private final List versionPlugins = Arrays.asList( + "Vault", + "LuckPerms", + "PermissionsEx" + ); + @Override public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { if (args.length == 0) { @@ -55,6 +59,8 @@ public class Commandessentials extends EssentialsCommand { run_uuidconvert(server, sender, commandLabel, args); } else if (args[0].equalsIgnoreCase("uuidtest")) { run_uuidtest(server, sender, commandLabel, args); + } else if (args[0].equalsIgnoreCase("version")) { + run_version(server, sender, commandLabel, args); } else { run_reload(server, sender, commandLabel, args); } @@ -307,6 +313,46 @@ public class Commandessentials extends EssentialsCommand { sender.sendMessage("Offline Mode UUID: " + offlineuuid.toString()); } + private void run_version(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { + if (sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.version")) return; + + boolean isMismatched = false; + boolean isVaultInstalled = false; + final PluginManager pm = server.getPluginManager(); + final String essVer = pm.getPlugin("Essentials").getDescription().getVersion(); + + sender.sendMessage("Server version: " + server.getBukkitVersion() + " " + server.getVersion()); + sender.sendMessage("EssentialsX version: " + essVer); + + for (Plugin plugin : pm.getPlugins()) { + final PluginDescriptionFile desc = plugin.getDescription(); + String name = desc.getName(); + String version = desc.getVersion(); + + if (name.startsWith("Essentials") && !name.equalsIgnoreCase("Essentials")) { + if (!version.equalsIgnoreCase(essVer)) { + version = "\u00a7c" + version; + isMismatched = true; + } + sender.sendMessage(name.replace("Essentials", "EssentialsX") + " version: " + version); + } + + if (versionPlugins.contains(name)) { + sender.sendMessage(name + " version: " + version); + } + + if (name.equals("Vault")) isVaultInstalled = true; + } + + if (isMismatched) { + sender.sendMessage(tl("versionMismatchAll")); + } + + if (!isVaultInstalled) { + sender.sendMessage("Vault is not installed - chat and permissions may not work."); + } + } + @Override protected List getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { if (args.length == 1) { @@ -320,6 +366,7 @@ public class Commandessentials extends EssentialsCommand { options.add("cleanup"); //options.add("uuidconvert"); //options.add("uuidtest"); + options.add("version"); return options; } else if (args[0].equalsIgnoreCase("debug")) { // No args @@ -349,6 +396,8 @@ public class Commandessentials extends EssentialsCommand { if (args.length == 2) { return getPlayers(server, sender); } + } else if (args[0].equalsIgnoreCase("version")) { + // No args } else { // No args } From 43e520a03e740ecd2c31d11cabc15dd4cd819308 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 7 Mar 2018 07:56:03 +0000 Subject: [PATCH 035/333] Update issue template for new version command --- .github/ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 02f951cbb..fda5ea8b7 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -27,7 +27,7 @@ Otherwise, if you are reporting a bug, read on: ### Information -EssentialsX version (run `/essversion`): +EssentialsX version (run `/ess version`): Server software (run `/version`): From 7e40d13947ed7bfd8495f2edfb450fd401e3d33b Mon Sep 17 00:00:00 2001 From: games647 Date: Tue, 13 Mar 2018 16:05:27 +0100 Subject: [PATCH 036/333] Update lombok and remove antrun to fix compiling with JDK9 * Lombok: Older version resulted in NoSuchFieldEx: pid (fixed since 1.16.8) * JDK9 no longer has a tools.jar because of it's modular system, but ant is no longer required. It was introduced in 3e9a2377a861d53f385900d9532c32b90b0304fd for GroupManager. Now GM is no longer maintained and removed in * 5ca02e65963b41b261f297ea4dfa50f2a153f79b (calling the build.xml) * fa0bbde23651eff31845edd1fed918b8fe430e0e (removing the remaining module) --- .../src/com/earth2me/essentials/Settings.java | 2 +- pom.xml | 25 +------------------ 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index b85aab2aa..5f283f6b0 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1418,4 +1418,4 @@ public class Settings implements net.ess3.api.ISettings { public boolean isDirectHatAllowed() { return config.getBoolean("allow-direct-hat", true); } -} \ No newline at end of file +} diff --git a/pom.xml b/pom.xml index e369c413c..4b2297075 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ org.projectlombok lombok - 1.12.2 + 1.16.20 provided @@ -83,29 +83,6 @@ 1.7 - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - validate - - run - - - - - - com.sun - tools - 1.5.0 - system - ${java.home}/../lib/tools.jar - - - false - org.apache.maven.plugins maven-dependency-plugin From d24fbc9f55976f0767a04d247e19de4f1a1479ca Mon Sep 17 00:00:00 2001 From: games647 Date: Tue, 13 Mar 2018 16:20:02 +0100 Subject: [PATCH 037/333] Remove final modifier to fix illegal reflective access warning Java 9 runtimes report warnings for reflective access on JRE classes (in this case Field.modifiers). Future versions of Java may deny the access completely. Since we access our own code here, we could just remove the final modifier. With it's current visibility (of private) it's unlikely that it will be modified from somewhere else except our Settings class. --- Essentials/src/com/earth2me/essentials/Settings.java | 4 ---- .../src/com/earth2me/essentials/utils/NumberUtil.java | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 5f283f6b0..fbca35f22 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1338,11 +1338,7 @@ public class Settings implements net.ess3.api.ISettings { try { Field field = NumberUtil.class.getDeclaredField("PRETTY_FORMAT"); field.setAccessible(true); - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, currencyFormat); - modifiersField.setAccessible(false); field.setAccessible(false); } catch (NoSuchFieldException | IllegalAccessException e) { ess.getLogger().severe("Failed to apply custom currency format: " + e.getMessage()); diff --git a/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java b/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java index c4459f34c..3d2a5cef5 100644 --- a/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java +++ b/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java @@ -13,12 +13,12 @@ import static com.earth2me.essentials.I18n.tl; public class NumberUtil { - static DecimalFormat twoDPlaces = new DecimalFormat("#,###.##"); - static DecimalFormat currencyFormat = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.US)); + private static DecimalFormat twoDPlaces = new DecimalFormat("#,###.##"); + private static DecimalFormat currencyFormat = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.US)); // This field is likely to be modified in com.earth2me.essentials.Settings when loading currency format. // This ensures that we can supply a constant formatting. - static final NumberFormat PRETTY_FORMAT = NumberFormat.getInstance(Locale.US); + private static NumberFormat PRETTY_FORMAT = NumberFormat.getInstance(Locale.US); static { twoDPlaces.setRoundingMode(RoundingMode.HALF_UP); From 06f04b8fba569d23cd54927b057d039f41902784 Mon Sep 17 00:00:00 2001 From: md678685 Date: Thu, 15 Mar 2018 18:51:17 +0000 Subject: [PATCH 038/333] Update issue template to match actual command (#1892) Update the issue template to accommodate for the actual `/ess version` command's output. --- .github/ISSUE_TEMPLATE.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index fda5ea8b7..bbe3cacfd 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -27,9 +27,10 @@ Otherwise, if you are reporting a bug, read on: ### Information -EssentialsX version (run `/ess version`): +Full output of `/ess version`: + + -Server software (run `/version`): Server log (upload `logs/latest.log` to [Gist](https://gist.github.com/)): From 0d5da063fbc6ed67f15b2c6ef65bb290e33e4d69 Mon Sep 17 00:00:00 2001 From: Luck Date: Wed, 21 Mar 2018 04:42:12 +0000 Subject: [PATCH 039/333] Upload createkit configs to hastebin instead of GitHub Gist (#1916) --- .../essentials/commands/Commandcreatekit.java | 52 ++++--------------- 1 file changed, 11 insertions(+), 41 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java b/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java index c0b103ff2..5d6459087 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandcreatekit.java @@ -2,9 +2,8 @@ package com.earth2me.essentials.commands; import com.google.common.base.Charsets; import com.google.common.io.CharStreams; -import com.google.common.reflect.TypeToken; import com.google.gson.Gson; -import com.google.gson.stream.JsonWriter; +import com.google.gson.JsonObject; import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; @@ -24,12 +23,10 @@ import org.yaml.snakeyaml.representer.Representer; import java.io.InputStreamReader; import java.io.OutputStream; -import java.io.StringWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -37,8 +34,8 @@ import static com.earth2me.essentials.I18n.tl; public class Commandcreatekit extends EssentialsCommand { - private static final String PASTE_URL = "https://api.github.com/gists"; - private static final String SHORTENER_URL = "https://git.io"; + private static final String PASTE_URL = "https://hastebin.com/"; + private static final String PASTE_UPLOAD_URL = PASTE_URL + "documents"; private static final Gson GSON = new Gson(); private final ExecutorService executorService = Executors.newSingleThreadExecutor(); @@ -83,34 +80,22 @@ public class Commandcreatekit extends EssentialsCommand { String fileContents = "# Copy the kit code below into the kits section in your config.yml file\n"; fileContents += yaml.dump(config.getValues(false)); - gist(user.getSource(), kitname, delay, fileContents); + uploadPaste(user.getSource(), kitname, delay, fileContents); } } - /** - * SEE https://developer.github.com/v3/gists/#create-a-gist - */ - private void gist(final CommandSource sender, final String kitName, final long delay, final String contents) { + private void uploadPaste(final CommandSource sender, final String kitName, final long delay, final String contents) { executorService.submit(new Runnable() { @Override public void run() { try { - HttpURLConnection connection = (HttpURLConnection) new URL(PASTE_URL).openConnection(); + HttpURLConnection connection = (HttpURLConnection) new URL(PASTE_UPLOAD_URL).openConnection(); connection.setRequestMethod("POST"); connection.setDoInput(true); connection.setDoOutput(true); + connection.setRequestProperty("User-Agent", "EssentialsX plugin"); try (OutputStream os = connection.getOutputStream()) { - StringWriter sw = new StringWriter(); - new JsonWriter(sw).beginObject() - .name("description").value(sender.getSender().getName() + ": /createkit " + kitName) - .name("public").value(false) - .name("files") - .beginObject().name("kit.yml") - .beginObject().name("content").value(contents) - .endObject() - .endObject() - .endObject(); - os.write(sw.toString().getBytes()); + os.write(contents.getBytes(Charsets.UTF_8)); } // Error if (connection.getResponseCode() >= 400) { @@ -120,25 +105,10 @@ public class Commandcreatekit extends EssentialsCommand { return; } - // Read URl - Map map = GSON.fromJson(new InputStreamReader(connection.getInputStream(), Charsets.UTF_8), - new TypeToken>() {}.getType()); - String pasteUrl = map.get("html_url"); + // Read URL + JsonObject object = GSON.fromJson(new InputStreamReader(connection.getInputStream(), Charsets.UTF_8), JsonObject.class); + String pasteUrl = PASTE_URL + object.get("key").getAsString(); connection.disconnect(); - - /* ================================ - * >> Shorten URL to fit in chat - * ================================ */ - { - connection = (HttpURLConnection) new URL(SHORTENER_URL).openConnection(); - connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - connection.setDoOutput(true); - pasteUrl = "url=" + pasteUrl; - try (OutputStream os = connection.getOutputStream()) { - os.write(pasteUrl.getBytes()); - } - pasteUrl = connection.getHeaderField("Location"); - } String separator = tl("createKitSeparator"); String delayFormat = "0"; From 95ac4a4853006abff908b13918cb5c7dfdd72c77 Mon Sep 17 00:00:00 2001 From: Max Lee Date: Wed, 21 Mar 2018 05:50:42 +0100 Subject: [PATCH 040/333] Extra permissions for /seen and /whois information (#735) * Implemented separate permissions for seen extras * Add an extra permission to the whois command too. IPs are sensitive information that should only be accessible to an as small as possible amount of people --- .../essentials/commands/Commandseen.java | 26 ++++++++++--------- .../essentials/commands/Commandwhois.java | 4 ++- Essentials/src/plugin.yml | 5 ++++ 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java index f9bae3311..1efa4ca1b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java @@ -28,16 +28,16 @@ public class Commandseen extends EssentialsCommand { @Override protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { - seen(server, sender, commandLabel, args, true, true, true); + seen(server, sender, commandLabel, args, true, true, true, true); } @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - seen(server, user.getSource(), commandLabel, args, user.isAuthorized("essentials.seen.banreason"), user.isAuthorized("essentials.seen.extra"), user.isAuthorized("essentials.seen.ipsearch")); + seen(server, user.getSource(), commandLabel, args, user.isAuthorized("essentials.seen.banreason"), user.isAuthorized("essentials.seen.ip"), user.isAuthorized("essentials.seen.location"), user.isAuthorized("essentials.seen.ipsearch")); } protected void seen(final Server server, final CommandSource sender, final String commandLabel, final String[] args, - final boolean showBan, final boolean extra, final boolean ipLookup) throws Exception { + final boolean showBan, final boolean showIp, final boolean showLocation, final boolean ipLookup) throws Exception { if (args.length < 1) { throw new NotEnoughArgumentsException(); } @@ -80,23 +80,23 @@ public class Commandseen extends EssentialsCommand { if (user == null) { throw new PlayerNotFoundException(); } - showSeenMessage(server, sender, user, showBan, extra); + showSeenMessage(server, sender, user, showBan, showIp, showLocation); } }); } else { - showSeenMessage(server, sender, player, showBan, extra); + showSeenMessage(server, sender, player, showBan, showIp, showLocation); } } - private void showSeenMessage(Server server, CommandSource sender, User player, boolean showBan, boolean extra) throws Exception { + private void showSeenMessage(Server server, CommandSource sender, User player, boolean showBan, boolean showIp, boolean showLocation) throws Exception { if (player.getBase().isOnline() && canInteractWith(sender, player)) { - seenOnline(server, sender, player, showBan, extra); + seenOnline(server, sender, player, showBan, showIp, showLocation); } else { - seenOffline(server, sender, player, showBan, extra); + seenOffline(server, sender, player, showBan, showIp, showLocation); } } - private void seenOnline(final Server server, final CommandSource sender, final User user, final boolean showBan, final boolean extra) throws Exception { + private void seenOnline(final Server server, final CommandSource sender, final User user, final boolean showBan, final boolean showIp, final boolean showLocation) throws Exception { user.setDisplayNick(); sender.sendMessage(tl("seenOnline", user.getDisplayName(), DateUtil.formatDateDiff(user.getLastLogin()))); @@ -123,12 +123,12 @@ public class Commandseen extends EssentialsCommand { if (location != null && (!(sender.isPlayer()) || ess.getUser(sender.getPlayer()).isAuthorized("essentials.geoip.show"))) { sender.sendMessage(tl("whoisGeoLocation", location)); } - if (extra) { + if (showIp) { sender.sendMessage(tl("whoisIPAddress", user.getBase().getAddress().getAddress().toString())); } } - private void seenOffline(final Server server, final CommandSource sender, User user, final boolean showBan, final boolean extra) throws Exception { + private void seenOffline(final Server server, final CommandSource sender, User user, final boolean showBan, final boolean showIp, final boolean showLocation) throws Exception { user.setDisplayNick(); if (user.getLastLogout() > 0) { sender.sendMessage(tl("seenOffline", user.getName(), DateUtil.formatDateDiff(user.getLastLogout()))); @@ -163,10 +163,12 @@ public class Commandseen extends EssentialsCommand { if (location != null && (!(sender.isPlayer()) || ess.getUser(sender.getPlayer()).isAuthorized("essentials.geoip.show"))) { sender.sendMessage(tl("whoisGeoLocation", location)); } - if (extra) { + if (showIp) { if (!user.getLastLoginAddress().isEmpty()) { sender.sendMessage(tl("whoisIPAddress", user.getLastLoginAddress())); } + } + if (showLocation) { final Location loc = user.getLogoutLocation(); if (loc != null) { sender.sendMessage(tl("whoisLocation", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java index af002af5b..1b25c5ed9 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java @@ -41,7 +41,9 @@ public class Commandwhois extends EssentialsCommand { if (!ess.getSettings().isEcoDisabled()) { sender.sendMessage(tl("whoisMoney", NumberUtil.displayCurrency(user.getMoney(), ess))); } - sender.sendMessage(tl("whoisIPAddress", user.getBase().getAddress().getAddress().toString())); + if (!sender.isPlayer() || ess.getUser(sender.getPlayer()).isAuthorized("essentials.whois.ip")) { + sender.sendMessage(tl("whoisIPAddress", user.getBase().getAddress().getAddress().toString())); + } final String location = user.getGeoLocation(); if (location != null && (!sender.isPlayer() || ess.getUser(sender.getPlayer()).isAuthorized("essentials.geoip.show"))) { sender.sendMessage(tl("whoisGeoLocation", location)); diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 095c9da84..a71f191f2 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -535,3 +535,8 @@ permissions: essentials.gamemode: true essentials.gamemode.others: true essentials.gamemode.all: true + essentials.seen.extra: + default: op + children: + essentials.seen.ip: true + essentials.seen.location: true \ No newline at end of file From d3c4c2ba6aa1cbb0ef26ceafeff047d68e3cca3c Mon Sep 17 00:00:00 2001 From: Johnny Cao <5037004+AgentTroll@users.noreply.github.com> Date: Tue, 20 Mar 2018 21:51:16 -0700 Subject: [PATCH 041/333] Fixes #1866 (#1867) --- .../src/com/earth2me/essentials/commands/Commandmail.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java index f95458303..2a067ce0e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java @@ -81,7 +81,8 @@ public class Commandmail extends EssentialsCommand { if (!user.isAuthorized("essentials.mail.sendall")) { throw new Exception(tl("noPerm", "essentials.mail.sendall")); } - ess.runTaskAsynchronously(new SendAll(tl("mailFormat", user.getName(), FormatUtil.stripFormat(getFinalArg(args, 1))))); + ess.runTaskAsynchronously(new SendAll(tl("mailFormat", user.getName(), + FormatUtil.formatMessage(user, "essentials.mail", StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 1))))))); user.sendMessage(tl("mailSent")); return; } From c7000846cd3100d79434e893da49f2d2bb326155 Mon Sep 17 00:00:00 2001 From: games647 Date: Wed, 21 Mar 2018 11:16:16 +0100 Subject: [PATCH 042/333] Replace Reflection with setter implementation --- .../src/com/earth2me/essentials/Settings.java | 18 ++---------------- .../earth2me/essentials/utils/NumberUtil.java | 7 ++++++- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index fbca35f22..1bdb39641 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -16,8 +16,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.inventory.ItemStack; import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; @@ -1333,20 +1331,8 @@ public class Settings implements net.ess3.api.ISettings { DecimalFormat currencyFormat = new DecimalFormat(currencyFormatString, decimalFormatSymbols); currencyFormat.setRoundingMode(RoundingMode.FLOOR); - // Updates NumberUtil#PRETTY_FORMAT field so that all of Essentials - // can follow a single format. - try { - Field field = NumberUtil.class.getDeclaredField("PRETTY_FORMAT"); - field.setAccessible(true); - field.set(null, currencyFormat); - field.setAccessible(false); - } catch (NoSuchFieldException | IllegalAccessException e) { - ess.getLogger().severe("Failed to apply custom currency format: " + e.getMessage()); - if (isDebug()) { - e.printStackTrace(); - } - } - + // Updates NumberUtil#PRETTY_FORMAT field so that all of Essentials can follow a single format. + NumberUtil.internalSetPrettyFormat(currencyFormat); return currencyFormat; } diff --git a/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java b/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java index 3d2a5cef5..f554ed6b3 100644 --- a/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java +++ b/Essentials/src/com/earth2me/essentials/utils/NumberUtil.java @@ -11,8 +11,8 @@ import java.util.Locale; import static com.earth2me.essentials.I18n.tl; - public class NumberUtil { + private static DecimalFormat twoDPlaces = new DecimalFormat("#,###.##"); private static DecimalFormat currencyFormat = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.US)); @@ -30,6 +30,11 @@ public class NumberUtil { PRETTY_FORMAT.setMaximumFractionDigits(2); } + // this method should only be called by Essentials + public static void internalSetPrettyFormat(NumberFormat prettyFormat) { + PRETTY_FORMAT = prettyFormat; + } + public static String shortCurrency(final BigDecimal value, final IEssentials ess) { return ess.getSettings().getCurrencySymbol() + formatAsCurrency(value); } From 1c398f819ee2cb1ade2d3506f6690ea01774af72 Mon Sep 17 00:00:00 2001 From: RikoDEV Date: Sun, 25 Mar 2018 22:39:14 +0200 Subject: [PATCH 043/333] Update messages_pl.properties (#1901) @RikoDEV Smaller corrections and supplementing the missing translations. --- Essentials/src/messages_pl.properties | 98 +++++++++++++-------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index bed7f0933..f97b3ed88 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -20,10 +20,10 @@ antiBuildPlace=\u00a74Nie masz uprawnie\u0144, aby postawi\u0107 {0} tutaj. antiBuildUse=\u00a74Nie masz uprawnie\u0144, aby u\u017Cy\u0107ย {0}. autoAfkKickReason=Zosta\u0142e\u015B wyrzucony z serwera za nie ruszanie si\u0119 przez wi\u0119cej ni\u017C {0} minut. backAfterDeath=\u00a77U\u017Cyj komendy /back aby powr\u00F3ci\u0107 na miejsce swojej \u015Bmierci. -backupDisabled=\u00a74Zewnetrzny skrypt backupu nie zosta\u0142 skonfigurowany. -backupFinished=\u00a77Backup zako\u0144czony. -backupStarted=\u00a77Backup rozpocz\u0119ty. -backUsageMsg=\u00a77Transportowano Cie do poprzedniej lokacji. +backupDisabled=\u00a74Zewn\u0119trzny skrypt kopi zapasowej nie zosta\u0142 skonfigurowany. +backupFinished=\u00a77Kopia zapasowa zako\u0144czona. +backupStarted=\u00a77Kopia zapasowa rozpocz\u0119ta. +backUsageMsg=\u00a77Transportowano Ci\u0119 do poprzedniej lokacji. balance=\u00a7aStan konta\:\u00a7c {0} balanceOther=\u00a7aStan konta gracza \u00a77{0} \u00a7awynosi\:\u00a7c {1} balanceTop=\u00a77Najbogatsi gracze ({0}) @@ -41,15 +41,15 @@ bigTreeSuccess=\u00a77Stworzono du\u017Ce drzewo. blockList=\u00a77Essentials przekazuje nast\u0119puj\u0105ce polecenie do innej wtyczki\: bookAuthorSet=\u00a77Ustawiono autora ksi\u0105\u017Cki na {0} . bookLocked=\u00a7cKsi\u0105\u017Cka jest teraz zablokowana. -bookTitleSet=\u00a77Ustawiono tytul ksi\u0105\u017Cki na {0} . +bookTitleSet=\u00a77Ustawiono tytu\u0142 ksi\u0105\u017Cki na {0} . broadcast=\u00a7r\u00a77[\u00a74Og\u0142oszenie\u00a77]\u00a7a {0} buildAlert=\u00a74Nie mo\u017Cesz tu budowa\u0107 bukkitFormatChanged=Format wersji Bukkita jest zmieniony. Wersja nie jest sprawdzana. burnMsg=\u00a77Podpaliles\u00a7c ย {0} \u00a77na \u00a7c{1} sekund\u00a77. -cannotStackMob=\u00a74Nie masz uprawnie\u0144. by stackowac wiele mob\u00F3w. +cannotStackMob=\u00a74Nie masz uprawnie\u0144. by \u0142\u0105czyฤ‡ wiele mob\u00F3w. canTalkAgain=\u00a77Zn\u00F3w mo\u017Cesz m\u00F3wi\u0107. cantFindGeoIpDB=Nie mo\u017Cna znale\u017A\u0107 bazy danych GeoIP\! -cantGamemode=\u00a74Nie masz permisji do zmiany trybu gry na {0} +cantGamemode=\u00a74Nie masz uprawnie\u0144 do zmiany trybu gry na {0} cantReadGeoIpDB=Odczytywanie bazy danych GeoIP zawiod\u0142o\! cantSpawnItem=\u00a74Nie mo\u017Cesz stworzy\u0107 przedmiotu\u00a7c {0}\u00a74. chatTypeAdmin=[A] @@ -64,10 +64,10 @@ commandFailed=Komenda {0} zawiod\u0142a. commandHelpFailedForPlugin=B\u0142\u0105d podczas uzyskiwania pomocy dla\: {0} commandNotLoaded=\u00a74Komenda {0} nie jest za\u0142adowana\! compassBearing=\u00a77L\u00F3\u017Cko\: ย {0} ({1} stopni). -configFileMoveError=Nie uda\u0142o sie przenie\u015B\u0107 config.yml do lokalizacji backupa. +configFileMoveError=Nie uda\u0142o sie przenie\u015B\u0107 config.yml do lokalizacji kopi zapasowej. configFileRenameError=Nie uda\u0142o sie zmieni\u0107 nazwy tymczasowego pliku na config.yml -confirmClear=\u00a77To \u00a7lCONFIRM\u00a77 inventory clear, please repeat command: \u00a76{0} -confirmPayment=\u00a77Aby \u00a7lpotwierdzi\u0107\u00a77 p\u0142atno\u015B\u0107 \u00a76{0}\u00a77, wpisz ponownie: \u00a76{1} +confirmClear=\u00a77Aby \u00a7lPOTWIERDZI\u0106\u00a77 wyczyszczenie ekwipunku, wpisz ponownie \u00a76{0} +confirmPayment=\u00a77Aby \u00a7lPOTWIERDZI\u0106\u00a77 p\u0142atno\u015B\u0107 \u00a76{0}\u00a77, wpisz ponownie: \u00a76{1} connectedPlayers=\u00a77Aktywni gracze\u00a7r connectionFailed=B\u0142\u0105d podczas otwierania po\u0142\u0105czenia. cooldownWithMessage=Odczekaj\: {0} @@ -106,7 +106,7 @@ dontMoveMessage=\u00a77Teleportacja nast\u0105pi za\u00a7a {0}\u00a77. Prosz\u01 downloadingGeoIp=Pobieranie bazy danych GeoIP... To mo\u017Ce zaj\u0105\u0107 chwile (kraj\: 1.7 MB, miasto\: 30MB) duplicatedUserdata=Kopiowanie danych uzytkownika\: {0} i {1} durability=\u00a76Temu narz\u0119dziu pozosta\u0142o \u00a7c{0}\u00a76 u\u017cy\u0107 -editBookContents=\u00a7eNie mo\u017Cesz teraz edytowac tej ksi\u0105\u017Cki. +editBookContents=\u00a7eNie mo\u017Cesz teraz edytowa\u0107 tej ksi\u0105\u017Cki. enabled=w\u0142\u0105czone enableUnlimited=\u00a76Przyznano nielimitowan\u0105 ilo\u015b\u0107\u00a7c {0} \u00a76dla {1}. enchantmentApplied=\u00a77Ulepszenie\u00a7c {0} \u00a77zosta\u0142o przyznane przedmiotowi w twoim r\u0119ku. @@ -116,16 +116,16 @@ enchantmentRemoved=\u00a77Ulepszenie\u00a7c {0} \u00a77zosta\u0142o usuni\u0119t enchantments=\u00a77Ulepszenia\:\u00a7r {0} errorCallingCommand=B\u0142\u0105d wywo\u0142ywania komendy /{0} errorWithMessage=\u00a7cB\u0142\u0105d\:\u00a74 {0} -essentialsHelp1=Plik jest uszkodzony i Essentials nie mo\u017Ce go otworzyc.ย Essentials jest teraz wy\u0142\u0105czone. Jesli nie mo\u017Cesz samemu naprawic pliku, idz na ย http\://tiny.cc/EssentialsChat -essentialsHelp2=Plik jest uszkodzony i Essentials nie mo\u017Ce go otworzyc.ย Essentials jest teraz wy\u0142\u0105czone. Jesli nie mo\u017Cesz samemu naprawic pliku, wpisz /essentialshelp w grze lub wejdz na http\://tiny.cc/EssentialsChat +essentialsHelp1=Plik jest uszkodzony i Essentials nie mo\u017Ce go otworzyc.ย Essentials jest teraz wy\u0142\u0105czone. Jesli nie mo\u017Cesz samemu naprawi\u0107 pliku, id\u017A na ย http\://tiny.cc/EssentialsChat +essentialsHelp2=Plik jest uszkodzony i Essentials nie mo\u017Ce go otworzyc.ย Essentials jest teraz wy\u0142\u0105czone. Jesli nie mo\u017Cesz samemu naprawi\u0107 pliku, wpisz /essentialshelp w grze lub wejd\u017A na http\://tiny.cc/EssentialsChat essentialsReload=\u00a76Essentials prze\u0142adowa\u0142\u00a7c {0}. -exp=\u00a7c{0} \u00a77ma\u00a7c {1} \u00a77doswiadczenia (poziom\u00a7c {2}\u00a77), potrzebuje\u00a7c {3} \u00a77wi\u0119cej doswiadczenia do nastepnego poziomu. -expSet=\u00a7c{0} \u00a77teraz ma\u00a7c {1} \u00a77doswiadczenia. +exp=\u00a7c{0} \u00a77ma\u00a7c {1} \u00a77do\u015Bwiadczenia (poziom\u00a7c {2}\u00a77), potrzebuje\u00a7c {3} \u00a77wi\u0119cej do\u015Bwiadczenia do nast\u0119pnego poziomu. +expSet=\u00a7c{0} \u00a77teraz ma\u00a7c {1} \u00a77do\u015Bwiadczenia. extinguish=\u00a77Zosta\u0142e\u015B ugaszony. extinguishOthers=\u00a77Ugasi\u0142e\u015B {0}\u00a77. -failedToCloseConfig=B\u0142\u0105d podczas zamykania configu {0} -failedToCreateConfig=B\u0142\u0105d podczas tworzenia configu {0} -failedToWriteConfig=B\u0142\u0105d podczas pisania configu {0} +failedToCloseConfig=B\u0142\u0105d podczas zamykania konfiguracji {0} +failedToCreateConfig=B\u0142\u0105d podczas tworzenia konfiguracji {0} +failedToWriteConfig=B\u0142\u0105d podczas pisania konfiguracji {0} false=\u00a74nie\u00a7r feed=\u00a77Tw\u00F3j g\u0142\u00F3d zosta\u0142 zaspokojony. feedOther=\u00a76Zaspokoi\u0142e\u015b apetyt {0}\u00a76. @@ -191,7 +191,7 @@ invalidCharge=\u00a74Nieprawid\u0142owa op\u0142ata. invalidFireworkFormat=\u00a76Opcja \u00a74{0} \u00a76nie jest prawid\u0142ow\u0105 warto\u015bci\u0105 dla \u00a74{1}\u00a76. invalidHome=\u00a74Dom\u00a7c {0} \u00a74nie istnieje. invalidHomeName=\u00a74Niepoprawna nazwa domu. -invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74. +invalidItemFlagMeta=\u00a74Niepoprawny tag meta itemflag\: \u00a7c{0}\u00a74. invalidMob=\u00a74Niepoprawny typ moba. invalidNumber=Niepoprawna liczba. invalidPotion=\u00a74Niepoprawna mikstura. @@ -204,11 +204,11 @@ inventoryClearFail=\u00a74Gracz {0} \u00a74nie posiada\u00a7c {1} {2}\u00a74. inventoryClearingAllArmor=\u00a76Wyczyszczono zbroj\u0119 oraz wszystkie przedmioty z ekwipunku {0}\u00a76.ย  inventoryClearingAllItems=\u00a76Wyczyszczono wszystkie przedmioty z ekwipunku {0}\u00a76. inventoryClearingAllStack=\u00a76Wyczyszczono wszystkie \u00a7c {0} \u00a76z {1}\u00a76. -inventoryClearingFromAll=\u00a76Czyszczenie ekwipunku wszystkich graczy... +inventoryClearingFromAll=\u00a76Czyszczenie ekwipunk\u00F3w wszystkich graczy... inventoryClearingStack=\u00a76Usun\u0105\u0142e\u015b\u00a7c {0} {1} \u00a76graczowi {2}\u00a76. is=jest isIpBanned=\u00a77IP \u00a7c{0} \u00a77jest zbanowany. -itemCannotBeSold=\u00a7rNie mo\u017Cesz sprzedac tego przedmiotu serwerowi. +itemCannotBeSold=\u00a7rNie mo\u017Cesz sprzeda\u0107 tego przedmiotu serwerowi. itemMustBeStacked=\u00a74Przedmiotem handluje si\u0119 w stackach. Wielko\u015B\u0107 2s to dwa stacki itd. itemNames=\u00a77Kr\u00F3tka nazwa\:\u00a7r {0} itemNotEnough1=\u00a74Masz za ma\u0142o tego przedmiotu, aby go sprzeda\u0107. @@ -285,12 +285,12 @@ mobDataList=\u00a76Prawid\u0142owe dane moba\:\u00a7r {0} mobsAvailable=\u00a77Moby\: {0} mobSpawnError=\u00a74B\u0142\u0105d podczas zmiany spawnera. mobSpawnLimit=Ilo\u015B\u0107 mob\u00F3w ograniczona do limitu serwera. -mobSpawnTarget=\u00a74Blok musi byc spawnerem. +mobSpawnTarget=\u00a74Blok musi by\u0107 spawnerem. moneyRecievedFrom=\u00a7a{0} otrzymane od {1} moneySentTo=\u00a7a{0} zosta\u0142o wys\u0142ane do {1} month=miesiac months=miesi\u0119cy -moreThanZero=\u00a74Ilo\u015B\u0107 musi byc wi\u0119ksza ni\u017C 0. +moreThanZero=\u00a74Ilo\u015B\u0107 musi by\u0107 wi\u0119ksza ni\u017C 0. moveSpeed=\u00a76Zmieni\u0142e\u015b szybko\u015b\u0107 {0}nia dla\u00a76 {2}\u00a76 na\u00a7c {1}\u00a76. msgDisabled=\u00a76Odbieranie wiadomo\u015Bci \u00a7cwy\u0142\u0105czone\u00a76. msgDisabledFor=\u00a76Odbieranie wiadomo\u015Bci \u00a7cwy\u0142\u0105czone \u00a76dla \u00a7c{0}\u00a76. @@ -298,7 +298,7 @@ msgEnabled=\u00a76Odbieranie wiadomo\u015Bci \u00a7cw\u0142\u0105czone\u00a76. msgEnabledFor=\u00a76Odbieranie wiadomo\u015Bci \u00a7cw\u0142\u0105czone \u00a76dla \u00a7c{0}\u00a76. msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2} msgIgnore=\u00a7c{0} \u00a74ma wy\u0142\u0105czone wiadomo\u015Bci prywatne. -multipleCharges=\u00a74Nie mo\u017Cesz ustawic wi\u0119cej ni\u017C jeden ladunek dla tej fajerwerki. +multipleCharges=\u00a74Nie mo\u017Cesz ustawic wi\u0119cej ni\u017C jeden \u0142adunek dla tej fajerwerki. multiplePotionEffects=\u00a74Nie mo\u017Cesz ustawic wi\u0119cej ni\u017C jeden efekt dla tej mikstury. mutedPlayer=\u00a76Gracz\u00a7c {0} \u00a76zosta\u0142 wyciszony. mutedPlayerFor=\u00a76Gracz\u00a7c {0} \u00a76zosta\u0142 wyciszony za\u00a7c {1}\u00a76. @@ -310,10 +310,10 @@ muteNotifyFor=\u00a7c{0} \u00a76wyciszy\u0142 gracza \u00a7c{1}\u00a76 na\u00a7c nearbyPlayers=\u00a77Gracze w pobli\u017Cu\:\u00a7r {0} negativeBalanceError=\u00a74Gracz nie mo\u017Ce mie\u0107 ujemnego stanu konta. nickChanged=\u00a77Nick gracza zosta\u0142 zmieniony. -nickDisplayName=\u00a74Musisz w\u0142\u0105czy\u0107 change-displayname w configu Essential. +nickDisplayName=\u00a74Musisz w\u0142\u0105czy\u0107 change-displayname w konfiguracji EssentialsX. nickInUse=\u00a74Ten pseudonim jest ju\u017C w u\u017Cyciu. nickNamesAlpha=\u00a74Pseudonimy musz\u0105 by\u0107 alfanumeryczne. -nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. +nickNamesOnlyColorChanges=\u00a74Tylko kolory pseudonim\u00F3w mog\u0105 zosta\u0107 zmienione. nickNoMore=\u00a77Nie masz ju\u017C pseudonimu. nickSet=\u00a76Tw\u00F3j nowy nick\: \u00a7c{0}\u00a76. nickTooLong=\u00a74Ten pseudonim jest za d\u0142ugi. @@ -323,12 +323,12 @@ noBreakBedrock=\u00a74Nie masz uprawnie\u0144 do niszczenia bedrocka. noDestroyPermission=\u00a74Nie jeste\u015b uprawniony do niszczenia tego {0}. noDurability=\u00a74Ten przedmiot nie jest wytrzyma\u0142y. noGodWorldWarning=\u00a74Uwaga\! Godmode jest wy\u0142\u0105czony w tym \u015Bwiecie\!. -noHelpFound=\u00a74Nie ma odpowiadajacych komend. +noHelpFound=\u00a74Nie ma odpowiadaj\u0105cych komend. noHomeSetPlayer=\u00a77Gracz nie ma ustawionego domu. noIgnored=\u00a77Nikogo nie ignorujesz. noJailsDefined=\u00a76Nie zdefiniowano \u017Cadnych wi\u0119zie\u0144. noKitGroup=\u00a74Nie masz dost\u0119pu do tego zestawu. -noKitPermission=\u00a74Musisz posiadac uprawnienia \u00a7c{0}\u00a74 aby u\u017Cywa\u0107 tego zestawu. +noKitPermission=\u00a74Musisz posiada\u0107 uprawnienia \u00a7c{0}\u00a74 aby u\u017Cywa\u0107 tego zestawu. noKits=\u00a77Nie ma jeszcze dost\u0119pnych zestaw\u00F3w. noLocationFound=\u00a74Nie znaleziono prawid\u0142owej lokalizacji. noMail=\u00a77Nie masz \u017Cadnych wiadomosci. @@ -374,10 +374,10 @@ payToggleOn=\u00a76Akceptujesz ju\u017C wp\u0142aty. pendingTeleportCancelled=\u00a74Oczekuj\u0105ce zapytanie teleportacji odrzucone. playerBanIpAddress=\u00a76Gracz\u00a7c {0} \u00a76zbanowa\u0142 adres IP\u00a7c {1} \u00a76za\: \u00a7c{2}\u00a76. playerBanned=\u00a7c{0} \u00a76zbanowa\u0142\u00a7c {1} \u00a76za {2}. -playerInJail=\u00a74Gracz jest ju\u017C w wiezieniu \u00a7c{0}\u00a77. -playerJailed=\u00a77Gracz\u00a7c {0} \u00a77zosta\u0142 wtracony do wi\u0119zienia. -playerJailedFor=\u00a77Gracz\u00a7c {0} \u00a77zosta\u0142 wtracony do wi\u0119zienia na {1}. -playerKicked=\u00a77Gracz\u00a7c {0} \u00a77wyrzucil {1} za {2}. +playerInJail=\u00a74Gracz jest ju\u017C w wi\u0119zieniu \u00a7c{0}\u00a77. +playerJailed=\u00a77Gracz\u00a7c {0} \u00a77zosta\u0142 wtr\u0105cony do wi\u0119zienia. +playerJailedFor=\u00a77Gracz\u00a7c {0} \u00a77zosta\u0142 wtr\u0105cony do wi\u0119zienia na {1}. +playerKicked=\u00a77Gracz\u00a7c {0} \u00a77wyrzuci\u0142 gracza {1} za {2}. playerMuted=\u00a77Zosta\u0142e\u015B wyciszony. playerMutedFor=\u00a77Zosta\u0142e\u015B wyciszony na\u00a7c {0}. playerNeverOnServer=\u00a74Gracz\u00a7c {0} \u00a74nigdy nie by\u0142 na tym serwerze. @@ -404,12 +404,12 @@ powerToolNoSuchCommandAssigned=\u00a74Komenda \u00a7c{0}\u00a74 nie jest przypis powerToolRemove=\u00a76Usuni\u0119to komende \u00a7c{0}\u00a76 z {1}. powerToolRemoveAll=\u00a76Usuni\u0119to wszystkie komendy z {0}. powerToolsDisabled=\u00a77Wszystkie twoje podpi\u0119cia zosta\u0142y zdezaktywowane. -powerToolsEnabled=\u00a77Wszystkie twojee podpi\u0119cia zosta\u0142y aktywowane. +powerToolsEnabled=\u00a77Wszystkie twoje podpi\u0119cia zosta\u0142y aktywowane. pTimeCurrent=Czas \u00a7e{0} u00a7f to {1}. pTimeCurrentFixed=\u00a77Czas \u00a7c{0}\u00a77 przywr\u00F3cony do\u00a7c {1}\u00a77. pTimeNormal=\u00a77Czas gracza \u00a7c{0}\u00a77 jest normalny i odpowiada serwerowemu. pTimeOthersPermission=\u00a74Nie masz uprawnie\u0144 do zmiany czasu innym. -pTimePlayers=\u00a77Ci gracze b\u0119d\u0105 mie\u0107 wlasny czas\:\u00a7r +pTimePlayers=\u00a77Ci gracze b\u0119d\u0105 mie\u0107 w\u0142asny czas\:\u00a7r pTimeReset=\u00a77Czas gracza zosta\u0142 zresetowany dla \u00a7c{0} pTimeSet=\u00a77Czas gracza ustawiony na \u00a7c{0}\u00a77 dla\: \u00a7c{1}. pTimeSetFixed=\u00a77Czas gracza przywr\u00F3cony do \u00a7c{0}\u00a77 dla \u00a7c{1}. @@ -418,12 +418,12 @@ pWeatherInvalidAlias=\u00a74Niepoprawny typ pogody pWeatherNormal=\u00a7c{0}\u00a77 pogoda jest normalna i pasuje do serwera. pWeatherOthersPermission=\u00a74Nie masz uprawnie\u0144, by zmieni\u0107 pogod\u0119 pozosta\u0142ym graczom. pWeatherPlayers=\u00a77Ci gracze maj\u0105 w\u0142asn\u0105 pogod\u0119\:\u00a7r -pWeatherReset=\u00a77Gracz zresetowal pogod\u0119 dla\: \u00a7c{0} +pWeatherReset=\u00a77Gracz zresetowa\u0142 pogod\u0119 dla\: \u00a7c{0} pWeatherSet=\u00a77Gracz ustawil pogod\u0119 \u00a7c{0}\u00a77 dla\: \u00a7c{1}. questionFormat=\u00a72[Pytanie]\u00a7r {0} radiusTooBig=\u00a74Zasi\u0119g jest zbyt du\u017cy\! Maksymalny zasi\u0119g to {0}. readNextPage=\u00a77Wpisz\u00a7c /{0} {1} \u00a77aby przeczyta\u0107 nast\u0119pn\u0105 strone. -recentlyForeverAlone=\u00a74{0} recently went offline. +recentlyForeverAlone=\u00a74{0} niedawno wszed\u0142 w tryb offline. recipe=\u00a76Receptura dla \u00a7c{0}\u00a76 ({1} z {2}) recipeBadIndex=Nie ma receptury dla tego numeru. recipeFurnace=\u00a76Przepal \u00a7c{0} @@ -436,8 +436,8 @@ recipeShapeless=\u00a77Kombinacja \u00a7c{0} recipeWhere=\u00a77Gdzie\: {0} removed=\u00a77Usuni\u0119to\u00a7c {0} \u00a77podmiot\u00F3w. repair=\u00a76Naprawi\u0142e\u015b pomy\u015blnie swoje\: \u00a7c{0}. -repairAlreadyFixed=\u00a74Ten przedmiot nie potrzebuje naprawy -repairEnchanted=\u00a74Nie masz zezwolenia do naprawiania ulepszonych przedmiot\u00F3w. +repairAlreadyFixed=\u00a74Ten przedmiot nie potrzebuje naprawy. +repairEnchanted=\u00a74Nie masz uprawnie\u0144 na naprawiania ulepszonych przedmiot\u00F3w. repairInvalidType=\u00a74Ten przedmiot nie mo\u017Ce byc naprawiony. repairNone=\u00a74\u017badne twoje przedmioty nie potrzebuj\u0105 naprawy. requestAccepted=\u00a77Pro\u015Bba o teleportacje - zaakceptowano. @@ -517,13 +517,13 @@ timeBeforeHeal=\u00a77Czas przed nast\u0119pnym uzdrowieniem\:\u00a7c {0}\u00a77 timeBeforeTeleport=\u00a77Czas przed nast\u0119pnym teleportem\:\u00a7c {0}. timeFormat=\u00a7c{0}\u00a76 lub \u00a7c{1}\u00a76 lub \u00a7c{2}\u00a76 timeSetPermission=\u00a74Nie masz uprawnie\u0144 do ustawiania czasu. -timeSetWorldPermission=\u00a74You are not authorized to set the time in world ''{0}''. +timeSetWorldPermission=\u00a74Nie masz uprawnie\u0144 do zmiany czasu w \u015Bwiecie {0}. timeWorldCurrent=\u00a77Obecny czas\u00a7c {0} \u00a77to \u00a7c{1}\u00a77. timeWorldSet=\u00a77Ustawiono czas\u00a7c {0} \u00a77w\: \u00a7c{1}\u00a77. totalSellableAll=\u00a7aCa\u0142kowita warto\u015b\u0107 wszystkich sprzedawalnych przedmiot\u00f3w i blok\u00f3w wynosi \u00a7c{1}\u00a7a. totalSellableBlocks=\u00a7aCa\u0142kowita warto\u015b\u0107 wszystkich sprzedawalnych blok\u00f3w wynosi \u00a7c{1}\u00a7a. -totalWorthAll=\u00a7aSprzedano wszystkie twoje bloki i przedmioty za kwote {1}. -totalWorthBlocks=\u00a7aSprzedano wszystkie twoje bloki za kwote {1}. +totalWorthAll=\u00a7aSprzedano wszystkie twoje bloki i przedmioty za kwot\u0119 {1}. +totalWorthBlocks=\u00a7aSprzedano wszystkie twoje bloki za kwot\u0119 {1}. tps=\u00a77Aktualne TPS \= {0} tradeSignEmpty=\u00a74Tabliczka handlowa nie jest dla Ciebie dost\u0119pna. tradeSignEmptyOwner=\u00a74Nie ma nic do pobrania z tej tabliczki. @@ -560,21 +560,21 @@ userUnknown=\u00a74Ostrze\u017Cenie\: Gracz \u00a7c{0}\u00a74 nigdy nie by\u0142 usingTempFolderForTesting=U\u017Cywam tymczasowego folderu dla testu\: vanish=\u00a76Vanish dla {0}\u00a76\: {1} vanished=\u00a77Ju\u017C jeste\u015B niewidoczny. -versionMismatch=\u00a74Niepoprawna wersja\! Prosze zaktualizowac {0} do tej samej wersji co inne pliki. -versionMismatchAll=\u00a74Niepoprawna wersja\! Prosze zaktualizowac wszystkie pliki Essentials do tej samej wersji. +versionMismatch=\u00a74Niepoprawna wersja\! Prosz\u0119 zaktualizowa\u0107 {0} do tej samej wersji co inne pliki. +versionMismatchAll=\u00a74Niepoprawna wersja\! Prosz\u0119 zaktualizowa\u0107 wszystkie pliki Essentials do tej samej wersji. voiceSilenced=\u00a77Twe usta zosta\u0142y zaszyte. walking=chodzi -warpDeleteError=\u00a74Wyst\u0105pi\u0142 problem podczas usuwania pliku z Warpami. +warpDeleteError=\u00a74Wyst\u0105pi\u0142 problem podczas usuwania pliku z warpami. warpingTo=\u00a77Teleportuje do\u00a7c {0}\u00a77. warpList={0} -warpListPermission=\u00a74Nie masz pozwolenia na sprawdzenie listy Warp\u00c3\u00b3w.. +warpListPermission=\u00a74Nie masz pozwolenia na sprawdzenie listy warp\u00c3\u00b3w.. warpNotExist=\u00a74Ten warp nie istnieje. warpOverwrite=\u00a74Nie mo\u017Cesz nadpisac tego warpa. warps=Warpy\: {0} warpsCount=\u00a76Jest\u00a7c {0} \u00a76warp\u00f3w. Wy\u015bwietlanie strony {1} z {2}. warpSet=\u00a77Warp\u00a7c {0} \u00a77stworzony. -warpUsePermission=\u00a74Nie masz pozwolenie na korzystanie z tego Warpa. -weatherInvalidWorld=\u015aลšwiat o nazwie {0} nie zosta\u0142 odnaleziony\! +warpUsePermission=\u00a74Nie masz pozwolenia na korzystanie z tego warpu. +weatherInvalidWorld=\u015Awiat o nazwie {0} nie zosta\u0142 odnaleziony\! weatherStorm=\u00a77Ustawi\u0142e\u015B \u00a7cburze\u00a77 w\u00a7c {0}\u00a77. weatherStormFor=\u00a77Ustawi\u0142e\u015B \u00a7cburze\u00a77 w\u00a7c {0} \u00a77na {1} sekund. weatherSun=\u00a77Ustawi\u0142e\u015B \u00a7cbezchmurn\u0105\u00a77 pogode w\u00a7c {0}\u00a77. @@ -598,11 +598,11 @@ whoisNick=\u00a77 - Nick\:\u00a7r {0} whoisOp=\u00a77 - OP\:\u00a7r {0} whoisPlaytime=\u00a76 - Czas gry\:\u00a7r {0} whoisTempBanned=\u00a76 - Ban wygasa:\u00a7r {0} -whoisTop=\u00a76 \=\=\=\=\=\= WhoIs\:\u00a7c {0} \u00a76\=\=\=\=\=\= +whoisTop=\u00a76 \=\=\=\=\=\= Informacje\:\u00a7c {0} \u00a76\=\=\=\=\=\= whoisUuid=\u00a76 - UUID\:\u00a7r {0} worth=\u00a7aStack {0} jest warty \u00a7c{1}\u00a7a ({2}rzedmiot(y) po {3} ka\u017Cdy) worthMeta=\u00a7aStack {0} z metadata {1} jest warty \u00a7c{2}\u00a7a ({3} przedmiot(y) po {4} ka\u017Cdy) -worthSet=\u00a77Cena przedmiotu ustawiona. +worthSet=\u00a77Cena przedmiotu zosta\u0142a ustawiona. year=rok years=lat youAreHealed=\u00a77Zosta\u0142e\u015B uleczony. From 9f6d0fa2d63980f8f8bb16e744469f90a1f348d6 Mon Sep 17 00:00:00 2001 From: Thomas D Date: Sun, 25 Mar 2018 23:02:28 +0200 Subject: [PATCH 044/333] Update messages_nl.properties (#1888) @DutchUser * Update messages_nl.properties Changed English lines to Dutch. * Update messages_nl.properties * Update messages_nl.properties * Update messages_nl.properties * Update messages_nl.properties * Update messages_nl.properties --- Essentials/src/messages_nl.properties | 70 +++++++++++++-------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index d3f9d4fd0..d0df38319 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -12,7 +12,7 @@ alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} bij\: {3} alertPlaced=geplaatst\: alertUsed=gebruikt\: alphaNames=\u00a74Speler namen kunnen alleen uit letters, cijfers en onderstreepjes bestaan. -antiBuildBreak=\u00a74U heeft geen toestemming om {0} blokken breken. +antiBuildBreak=\u00a74U heeft geen toestemming om {0} blokken breken. antiBuildCraft=\u00a74U mag hier geen\u00a7c {0} \u00a74maken. antiBuildDrop=\u00a74U mag hier geen\u00a7c {0} \u00a74laten vallen. antiBuildInteract=\u00a74U mag geen {0} gebruiken. @@ -30,8 +30,8 @@ balanceTop=\u00a77 Top saldo ({0}) banExempt=\u00a77U kunt deze speler niet verbannen. banExemptOffline=\u00a74U mag geen spelers verbannen die offline zijn. banFormat=Verbannen\: {0} -banIpJoin=Your IP address is banned from this server. Reason: {0} -banJoin=You are banned from this server. Reason: {0} +banIpJoin=Jouw IP adress is verbannen van deze server, met als reden: {0} +banJoin=Je bent van de server verbannen, met als reden: {0} bed=\u00a7obed\u00a7r bedMissing=\u00a74Uw bed is niet ingesteld, ontbreekt of is geblokkeerd. bedNull=\u00a7mbed\u00a7r @@ -57,25 +57,25 @@ chatTypeLocal=[L] chatTypeSpy=[Spion] cleaned=Gebruikersbestanden opgeschoont. cleaning=Opschonen van gebruikersbestanden. -clearInventoryConfirmToggleOff=\u00a76You will no longer be prompted to confirm inventory clears. -clearInventoryConfirmToggleOn=\u00a76You will now be prompted to confirm inventory clears. -commandCooldown=\u00a7cYou cannot type that command for {0}. +clearInventoryConfirmToggleOff=\u00a76Je zult niet langer meer gevraagd worden voor een bevestiging bij het legen van je inventaris. +clearInventoryConfirmToggleOn=\u00a76Je zult worden gevraagd voor een bevestiging bij het legen van je inventaris. +commandCooldown=\u00a7cJe kan deze command niet typen voor {0}. commandFailed=Opdracht {0} is mislukt\: commandHelpFailedForPlugin=Fout bij het verkrijgen van hulp voor\: {0}. commandNotLoaded=\u00a7cOpdracht {0} is fout geladen. compassBearing=\u00a77Ligging\: {0} ({1} graden). configFileMoveError=Het verplaatsen van config.yml naar de backup locatie is mislukt. configFileRenameError=Fout bij het hernoemen van de tijdelijke map naar config.yml -confirmClear=\u00a77To \u00a7lCONFIRM\u00a77 inventory clear, please repeat command: \u00a76{0} -confirmPayment=\u00a77To \u00a7lCONFIRM\u00a77 payment of \u00a76{0}\u00a77, please repeat command: \u00a76{1} +confirmClear=\u00a77Om het leeghalen van je intventaris te \u00a7lBEVESTIGEN\u00a77, herhaal de command: \u00a76{0} +confirmPayment=\u00a77Om de betaling van \u00a76{0}\u00a77 te \u00a7lBEVESTIGEN\u00a77, herhaal de command: \u00a76{1} connectedPlayers=\u00a76Spelers online\u00a7r connectionFailed=Fout bij het verbinden. cooldownWithMessage=\u00a7cAfkoeltijd\: {0} coordsKeyword={0}, {1}, {2} corruptNodeInConfig=\u00a74Waarschuwing\: Uw configuratiebestand bevat een fout {0}. couldNotFindTemplate=Het sjabloon kon niet worden gevonden {0}. -createdKit=\u00a76Created kit \u00a7c{0} \u00a76with \u00a7c{1} \u00a76entries and delay \u00a7c{2} -createKitFailed=\u00a74Error occurred whilst creating kit {0}. +createdKit=\u00a76Kit \u00a7c{0} \u00a76gemaakt met \u00a7c{1} \u00a76items en met \u00a7c{2} \u00a76seconden afkoeltijd. +createKitFailed=\u00a74Fout opgetreden tijdens het maken van kit {0}. createKitSeparator=\u00a7m----------------------- createKitSuccess=\u00a76Created Kit: \u00a7f{0}\n\u00a76Delay: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Copy contents in the link above into your config.yml. creatingConfigFromTemplate=Bezig met aanmaken van een config vanaf sjabloon\: {0} @@ -152,7 +152,7 @@ giveSpawnFailure=\u00a74Niet genoeg ruimte, \u00a7c{0} \u00a7c{1} \u00a74is verl godDisabledFor=\u00a7cuitgezet\u00a76 voor\u00a7c {0}\n godEnabledFor=\u00a7aingeschakeld\u00a76 voor\u00a7c {0}. godMode=\u00a76God modus\u00a7c {0}\u00a76. -groupDoesNotExist=\u00a74Er is niemand on-line in deze groep\! +groupDoesNotExist=\u00a74Er is niemand online in deze groep\! groupNumber=\u00a7c{0}\u00a7f online, voor de volledige lijst type\u00a7c /{1} {2} hatArmor=\u00a74Fout, u kunt dit voorwerp niet als hoed gebruiken\! hatEmpty=\u00a74Je draagt geen hoed. @@ -266,7 +266,7 @@ mailDelay=Er zijn teveel mails verzonden in een minuut. Het maximale aantal beri mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1} mailMessage={0} mailSent=\u00a76Bericht verzonden\! -mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\: +mailSentTo=\u00a7c{0}\u00a76 is de volgende mail gestuurd\: mailTooLong=\u00a74Mail bericht te lang. Probeer om het onder 1000 tekens te houden. markedAsAway=\u00a76U staat nu als afwezig gemarkeerd. markedAsNotAway=\u00a76U staat niet meer als afwezig gemarkeerd. @@ -277,7 +277,7 @@ maxMoney=\u00a74Deze transactie overschrijdt het balans van dit account. mayNotJail=\u00a7cU mag die speler niet in de gevangenis zetten. mayNotJailOffline=\u00a74Je mag geen spelers in de gevangenis zetten wanneer zij offline zijn. me=ik -minimumPayAmount=\u00a7cThe minimum amount you can pay is {0}. +minimumPayAmount=\u00a7cDe minimaal betaal hoeveelheld moet {0} zijn. minute=minuut minutes=minuten missingItems=\u00a74Je hebt geen\u00a7c{0}x {1}\u00a74.\n @@ -297,7 +297,7 @@ msgDisabledFor=\u00a76Berichten ontvangen \u00a7cuitgeschakelt \u00a76voor \u00a msgEnabled=\u00a76Berichten ontvangen \u00a7caingeschakelt\u00a76. msgEnabledFor=\u00a76Berichten ontvangen \u00a7cingeschakelt \u00a76voor \u00a7c{0}\u00a76. msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2} -msgIgnore=\u00a7c{0} \u00a74has messages disabled. +msgIgnore=\u00a7c{0} \u00a74heeft berichten uitstaan. multipleCharges=\u00a74U kunt niet meer dan \u00e9\u00e9n lading aan dit vuurwerk toevoegen. multiplePotionEffects=\u00a74U kunt niet meer dan \u00e9\u00e9n effect aan dit toverdrankje toevoegen. mutedPlayer=\u00a76Speler\u00a7c {0} \u00a76gedempt. @@ -313,7 +313,7 @@ nickChanged=Bijnaam veranderd. nickDisplayName=\u00a74U moet ''change-displayname'' inschakelen in de Essentials configuratie. nickInUse=\u00a7cDie naam is al in gebruik. nickNamesAlpha=\u00a7cBijnamen moeten alfanumeriek zijn. -nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed. +nickNamesOnlyColorChanges=\u00a74Met een nickname kun je enkel hun kleur aanpassen. nickNoMore=\u00a76U heeft geen bijnaam meer. nickSet=\u00a76Jou bijnaam is nu \u00a7c{0}\u00a76.\n nickTooLong=\u00a74Die bijnaam is te lang. @@ -341,12 +341,12 @@ noNewMail=\u00a77U heeft geen nieuwe berichten. noPendingRequest=\u00a74U heeft geen afwachtende aanvragen. noPerm=\u00a74U heeft de \u00a7c{0}\u00a74 toestemming niet. noPermissionSkull=\u00a76Je hebt geen permissie om die schedel aan te passen. -noPermToAFKMessage=\u00a74You don''t have permission to set an AFK message. +noPermToAFKMessage=\u00a74Je bent geen recht om een afwezigheid bericht te geven noPermToSpawnMob=\u00a74U heeft geen toestemming om deze mob te spawnen. noPlacePermission=\u00a74U heeft geen toestemming om een blok naast dat bord te plaatsen. noPotionEffectPerm=\u00a74U heeft geen toestemming om het \u00a7c{0} \u00a74effect aan deze toverdrank toe te voegen. noPowerTools=\u00a76U heeft geen powertools toegewezen. -notAcceptingPay=\u00a74{0} \u00a74is not accepting payment. +notAcceptingPay=\u00a74{0} \u00a74accepteert geen betalingen. notAllowedToQuestion=\u00a74U bent niet bevoegd om de vraag functie te gebruiken. notAllowedToShout=\u00a74U bent niet bevoegd om de roep functie te gebruiken. notEnoughExperience=\u00a74U heeft niet genoeg experience. @@ -366,15 +366,15 @@ onlySunStorm=\u00a74/weather ondersteunt alleen sun/storm. openingDisposal=\u00a76Opening disposal menu... orderBalances=\u00a76Saldo''s bestellen van\u00a7c {0} \u00a76gebruikers, een moment geduld alstublieft... oversizedTempban=\u00a74U kunt een speler niet verbannen voor deze lange period van tijd. -payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments. -payConfirmToggleOn=\u00a76You will now be prompted to confirm payments. -payMustBePositive=\u00a74Amount to pay must be positive. -payToggleOff=\u00a76You are no longer accepting payments. -payToggleOn=\u00a76You are now accepting payments. +payConfirmToggleOff=\u00a76Je zal niet meer worden gevraagd om betalingen te bevestigen. +payConfirmToggleOn=\u00a76Je zal worden gevraagd om betalingen te bevestigen. +payMustBePositive=\u00a74De aantal wat je wilt betalen moet positief zijn. +payToggleOff=\u00a76Je accepteert niet langer betalingen. +payToggleOn=\u00a76Je accepteert betalen weer. pendingTeleportCancelled=\u00a74Afwachtende teleportatie afgelast. playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76. -playerBanned=&4Speler &c{0} &6is gebanned voor &4{2} -playerInJail=&4De speler is al in de gevangenis &c{0}&4. +playerBanned=\u00a74Speler \u00a7c{0} \u00a74is verbannen voor {2} +playerInJail=\u00a74De speler is al in de gevangenis \u00a7c{0}\u00a74. playerJailed=\u00a76Speler\u00a7c {0} \u00a76is in de gevangenis gezet. playerJailedFor=\u00a76Speler\u00a7c {0} \u00a76is in de gevangenis gezet voor {1}. playerKicked=\u00a76Speler\u00a7c {0} \u00a76schopt {1} van de server voor {2}. @@ -382,7 +382,7 @@ playerMuted=\u00a76U bent gedempt\! playerMutedFor=\u00a76U bent gedempt voor\u00a7c {0}. playerNeverOnServer=\u00a74Speler\u00a7c {0} \u00a74is nooit op deze server geweest. playerNotFound=\u00a74Speler niet gevonden. -playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76. +playerTempBanned=\u00a76Speler \u00a7c{0}\u00a76 verbande\u00a7c {1}\u00a76 tijdelijk voor \u00a7c{2}\u00a76. Reden: \u00a7c{3}\u00a76. playerUnbanIpAddress=\u00a76Speler\u00a7c {0} \u00a76Verwijderde ban op IP\: {1}. playerUnbanned=\u00a76Speler\u00a7c {0} \u00a76verwijderde ban van {1}. playerUnmuted=\u00a76Speler mag weer praten. @@ -423,7 +423,7 @@ pWeatherSet=\u00a76Speler weer is ingesteld op \u00a7c{0}\u00a76 voor\: \u00a7c{ questionFormat=\u00a77[Vraag]\u00a7f {0} radiusTooBig=\u00a74Straal is te groot\! Maximale straal is {0}. readNextPage=Type /{0} {1} om de volgende pagina te lezen. -recentlyForeverAlone=\u00a74{0} recently went offline. +recentlyForeverAlone=\u00a74{0} is kort geleden offline gegaan. recipe=\u00a76Recept voor \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 van \u00a7c{2}\u00a76) recipeBadIndex=Er is geen recept met dat nummer. recipeFurnace=\u00a76Smelt\: \u00a7c{0}\u00a76. @@ -445,7 +445,7 @@ requestAcceptedFrom=\u00a7c{0} \u00a76accepteerde uw teleportatie aanvraag. requestDenied=\u00a77Teleporteer aanvraag geweigerd. requestDeniedFrom=\u00a7c{0} \u00a76heeft uw teleportatie aanvraag geweigerd. requestSent=\u00a77Aanvraag verstuurd naar {0}\u00a77. -requestSentAlready=\u00a74You have already sent {0}\u00a74 a teleport request. +requestSentAlready=\u00a74Je hebt {0}\u00a74 al een teleport verzoek gestuurd. requestTimedOut=\u00a7cTeleportatie verzoek is verlopen. requiredBukkit=\u00a76* \! * U heeft op zijn minst build {0} van CraftBukkit nodig, download het vanaf http\://dl.bukkit.org/downloads/craftbukkit/ resetBal=\u00a76Balans is gereset naar \u00a7c{0} \u00a76voor alle online spelers. @@ -509,15 +509,15 @@ teleportTop=\u00a77Bezig met teleporteren naar het hoogste punt. teleportToPlayer=\u00a76Teleporteren naar \u00a7c{0}\u00a76. tempbanExempt=\u00a74U kunt deze speler niet tijdelijk verbannen. tempbanExemptOffline=\u00a74Je mag geen spelers tijdelijk verbannen wanneer zij offline zijn. -tempbanJoin=You are banned from this server for {0}. Reason: {1} -tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2} +tempbanJoin=Je bent verbannen van de server voor {0}, met als reden: {1} +tempBanned=\u00a7cJe bent tijdelijk verbannen voor {0}\:\n\u00a7r{2} thunder=\u00a76U heeft onweer\u00a7c {0} \u00a76in uw wereld. thunderDuration=\u00a76U heeft onweer \u00a7c{0}\u00a76 in uw wereld voor \u00a7c{1}\u00a76 seconde(n). timeBeforeHeal=\u00a74Afkoeltijd tot de volgende genezing\:\u00a7c {0}\u00a76. timeBeforeTeleport=\u00a74Afkoeltijd tot de volgende teleportatie\:\u00a7c {0}\u00a76. timeFormat=\u00a7c{0}\u00a76 of \u00a7c{1}\u00a76 of \u00a7c{2}\u00a76 timeSetPermission=\u00a74U bent niet bevoegd om de tijd te veranderen. -timeSetWorldPermission=\u00a74You are not authorized to set the time in world ''{0}''. +timeSetWorldPermission=\u00a74U bent niet bevoegd om de tijd te veranderen in wereld ''{0}''. timeWorldCurrent=\u00a76De huidige tijd in \u00a7c{0}\u00a76 is \u00a7c{1}\u00a76. timeWorldSet=\u00a76De tijd was veranderd naar \u00a7c{0}\u00a76 in\: \u00a7c{1}\u00a76. totalSellableAll=\u00a7aDe totale waarde van alle verkoopbare voorwerpen en blokken is \u00a7c {1} \u00a7a. @@ -530,7 +530,7 @@ tradeSignEmptyOwner=\u00a74Er is niets te innen bij dit handelsbord. treeFailure=\u00a74Fout bij het genereren van de boom. Probeer het opnieuw op gras of aarde. treeSpawned=\u00a76Boom gegenereerd. true=\u00a7ajuist\u00a7r -typeTpacancel=\u00a76To cancel this request, type \u00a7c/tpacancel\u00a76. +typeTpacancel=\u00a76Om dit te annuleren, typ \u00a7c/tpacancel\u00a76. typeTpaccept=\u00a76Om te accepteren, typ \u00a7c/tpaccept\u00a76. typeTpdeny=\u00a76Om te weigeren, typ \u00a7c/tpdeny\u00a76. typeWorldName=\u00a76U kunt ook de naam van een specifieke wereld typen. @@ -547,8 +547,8 @@ unsafeTeleportDestination=\u00a74De teleportatie bestemming is onveilig en telep unvanishedReload=\u00a74Een herlading heeft u geforceerd om zichtbaar te worden. upgradingFilesError=Fout tijdens het upgraden van de bestanden. uptime=\u00a76Tijd dat de server aanstaat\:\u00a7c {0} -userAFK=\u00a75{0} \u00a75is AFK, en zal mogelijk niet reageren. -userAFKWithMessage=\u00a75{0} \u00a75is AFK, en zal mogelijk niet reageren. {1} +userAFK=\u00a75{0} is AFK, en zal mogelijk niet reageren. +userAFKWithMessage=\u00a75{0} is AFK, en zal mogelijk niet reageren. {1} userdataMoveBackError=Fout bij het verplaasten van userdata/{0}.tmp naar userdata/{1} userdataMoveError=Fout bij het verplaasten van userdata/{0} naar userdata/{1}.tmp userDoesNotExist=Speler {0} bestaat niet. @@ -596,8 +596,8 @@ whoisMoney=\u00a76 - Geld\:\u00a7f {0} whoisMuted=\u00a76 - Gedempt\:\u00a7f {0} whoisNick=\u00a76 - Bijnaam\:\u00a7f {0} whoisOp=\u00a76 - OP\:\u00a7f {0} -whoisPlaytime=\u00a76 - Playtime\:\u00a7r {0} -whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0} +whoisPlaytime=\u00a76 - Speeltijd\:\u00a7r {0} +whoisTempBanned=\u00a76 - Ban is voorbij in:\u00a7r {0} whoisTop=\u00a76 \=\=\=\=\=\= WhoIs\:\u00a7f {0} \u00a76\=\=\=\=\=\= whoisUuid=\u00a76 - UUID\:\u00a7r {0} worth=\u00a7aStapel {0} met waarde \u00a7c{1}\u00a7a ({2} voorwerp(en) voor {3} per stuk) From 61c1485083b953ea2897142d2f960364e2f4b6fc Mon Sep 17 00:00:00 2001 From: md678685 Date: Sun, 25 Mar 2018 22:12:36 +0100 Subject: [PATCH 045/333] Replace vanishedPlayers list with set (#1796) * Replace vanishedPlayers list with set Not sure if there is any particular reason to keep it ordered, but for now I've used a LinkedHashSet. * Change return of new method from Set to Collection Also makes return of old method an unmodifiable list, but this is just as breaking as just changing the method return type as far as I can see --- Essentials/src/com/earth2me/essentials/Essentials.java | 9 ++++++--- .../earth2me/essentials/EssentialsPlayerListener.java | 7 +++++-- Essentials/src/com/earth2me/essentials/IEssentials.java | 1 + Essentials/src/com/earth2me/essentials/User.java | 4 ++-- Essentials/src/net/ess3/api/IEssentials.java | 4 ++++ 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 69c9fafed..e15d39e02 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -66,13 +66,11 @@ import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPluginLoader; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitTask; import org.yaml.snakeyaml.error.YAMLException; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -101,7 +99,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient I18n i18n; private transient Metrics metrics; private transient EssentialsTimer timer; - private final transient List vanishedPlayers = new ArrayList<>(); + private final transient Set vanishedPlayers = new LinkedHashSet<>(); private transient Method oldGetOnlinePlayers; private transient SpawnerProvider spawnerProvider; private transient SpawnEggProvider spawnEggProvider; @@ -820,6 +818,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { @Override public List getVanishedPlayers() { + return Collections.unmodifiableList(new ArrayList<>(vanishedPlayers)); + } + + @Override + public Collection getVanishedPlayersNew() { return vanishedPlayers; } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 86b31f6aa..641c79306 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -233,11 +233,14 @@ public class EssentialsPlayerListener implements Listener { user.setDisplayNick(); updateCompass(user); - if (!ess.getVanishedPlayers().isEmpty() && !user.isAuthorized("essentials.vanish.see")) { - for (String p : ess.getVanishedPlayers()) { + if (!ess.getVanishedPlayersNew().isEmpty() && !user.isAuthorized("essentials.vanish.see")) { + for (String p : ess.getVanishedPlayersNew()) { Player toVanish = ess.getServer().getPlayerExact(p); if (toVanish != null && toVanish.isOnline()) { user.getBase().hidePlayer(toVanish); + if (ess.getSettings().isDebug()) { + ess.getLogger().info("Hiding vanished player: " + p); + } } } } diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java index 31a31808e..216f3ce94 100644 --- a/Essentials/src/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/IEssentials.java @@ -95,6 +95,7 @@ public interface IEssentials extends Plugin { EssentialsTimer getTimer(); + @Deprecated List getVanishedPlayers(); Collection getOnlinePlayers(); diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index a3213b595..1d58000f8 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -715,7 +715,7 @@ public class User extends UserData implements Comparable, IMessageRecipien } } setHidden(true); - ess.getVanishedPlayers().add(getName()); + ess.getVanishedPlayersNew().add(getName()); if (isAuthorized("essentials.vanish.effect")) { this.getBase().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, false)); } @@ -724,7 +724,7 @@ public class User extends UserData implements Comparable, IMessageRecipien p.showPlayer(getBase()); } setHidden(false); - ess.getVanishedPlayers().remove(getName()); + ess.getVanishedPlayersNew().remove(getName()); if (isAuthorized("essentials.vanish.effect")) { this.getBase().removePotionEffect(PotionEffectType.INVISIBILITY); } diff --git a/Essentials/src/net/ess3/api/IEssentials.java b/Essentials/src/net/ess3/api/IEssentials.java index 3946d0f0e..1e76dda17 100644 --- a/Essentials/src/net/ess3/api/IEssentials.java +++ b/Essentials/src/net/ess3/api/IEssentials.java @@ -3,8 +3,12 @@ package net.ess3.api; import net.ess3.nms.PotionMetaProvider; import net.ess3.nms.SpawnEggProvider; +import java.util.Collection; + public interface IEssentials extends com.earth2me.essentials.IEssentials { + Collection getVanishedPlayersNew(); + SpawnEggProvider getSpawnEggProvider(); PotionMetaProvider getPotionMetaProvider(); From ecd6c5f81a89df87960be4b9f0650584d03e1181 Mon Sep 17 00:00:00 2001 From: Minecrell Date: Mon, 26 Mar 2018 09:15:55 +0200 Subject: [PATCH 046/333] Avoid using ServerListPingEvent workaround on fixed Paper builds (#1925) Fixes #1924 PaperMC/Paper#884 has been fixed in recent Paper builds (1368+), which means the workaround is no longer necessary. Disable it when running a fixed build. --- .../essentials/EssentialsServerListener.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsServerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsServerListener.java index b82586629..87e735f1e 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsServerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsServerListener.java @@ -25,15 +25,20 @@ public class EssentialsServerListener implements Listener { public EssentialsServerListener(final IEssentials ess) { this.ess = ess; - setSampleText = ReflUtil.getMethodCached(ServerListPingEvent.class, "setSampleText", List.class); - getSampleText = ReflUtil.getMethodCached(ServerListPingEvent.class, "getSampleText"); - if (setSampleText != null && getSampleText != null) { - ess.getLogger().info("Using Paper 1.12+ ServerListPingEvent methods"); - isPaperSample = true; - } else { - ess.getLogger().info("Using Spigot 1.7.10+ ServerListPingEvent iterator"); - isPaperSample = false; + + if (ReflUtil.getClassCached("com.destroystokyo.paper.event.server.PaperServerListPingEvent") == null) { + // This workaround is only necessary for older Paper builds + setSampleText = ReflUtil.getMethodCached(ServerListPingEvent.class, "setSampleText", List.class); + getSampleText = ReflUtil.getMethodCached(ServerListPingEvent.class, "getSampleText"); + if (setSampleText != null && getSampleText != null) { + ess.getLogger().info("Using Paper 1.12+ ServerListPingEvent methods"); + isPaperSample = true; + return; + } } + + ess.getLogger().info("Using Spigot 1.7.10+ ServerListPingEvent iterator"); + isPaperSample = false; } @EventHandler(priority = EventPriority.LOWEST) From a468ec5e0837bb696a0601be5244b7f96a810eac Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Mon, 26 Mar 2018 00:24:10 -0700 Subject: [PATCH 047/333] Default setting to be enabled confirm commands by default with commented out list of possible options --- .../src/com/earth2me/essentials/ISettings.java | 2 +- .../src/com/earth2me/essentials/Settings.java | 14 +++++++------- Essentials/src/config.yml | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 98a28d179..367b4dbae 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -303,7 +303,7 @@ public interface ISettings extends IConf { boolean isDirectHatAllowed(); - List getDefaultDisabledConfirmCommands(); + List getDefaultEnabledConfirmCommands(); boolean isConfirmCommandEnabledByDefault(String commandName); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index d94385d3f..c3ff346c5 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -532,7 +532,7 @@ public class Settings implements net.ess3.api.ISettings { npcsInBalanceRanking = _isNpcsInBalanceRanking(); currencyFormat = _getCurrencyFormat(); unprotectedSigns = _getUnprotectedSign(); - defaultDisabledConfirmCommands = _getDefaultDisabledConfirmCommands(); + defaultEnabledConfirmCommands = _getDefaultEnabledConfirmCommands(); } private List itemSpawnBl = new ArrayList(); @@ -1420,10 +1420,10 @@ public class Settings implements net.ess3.api.ISettings { return config.getBoolean("allow-direct-hat", true); } - private List defaultDisabledConfirmCommands; + private List defaultEnabledConfirmCommands; - private List _getDefaultDisabledConfirmCommands() { - List commands = config.getStringList("default-disabled-confirm-commands"); + private List _getDefaultEnabledConfirmCommands() { + List commands = config.getStringList("default-enabled-confirm-commands"); for (int i = 0; i < commands.size(); i++) { commands.set(i, commands.get(i).toLowerCase()); } @@ -1431,12 +1431,12 @@ public class Settings implements net.ess3.api.ISettings { } @Override - public List getDefaultDisabledConfirmCommands() { - return defaultDisabledConfirmCommands; + public List getDefaultEnabledConfirmCommands() { + return defaultEnabledConfirmCommands; } @Override public boolean isConfirmCommandEnabledByDefault(String commandName) { - return !getDefaultDisabledConfirmCommands().contains(commandName.toLowerCase()); + return getDefaultEnabledConfirmCommands().contains(commandName.toLowerCase()); } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 4053edc5a..656298e7c 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -516,9 +516,9 @@ allow-bulk-buy-sell: true # This has no effect if the MOTD command or permission are disabled. delay-motd: 0 -# A list of commands that should have their complementary confirm commands disabled by default. +# A list of commands that should have their complementary confirm commands enabled by default. # This is empty by default, for the latest list of valid commands see the latest source config.yml. -default-disabled-confirm-commands: +default-enabled-confirm-commands: #- pay #- clearinventory From 823f1c2ee3b117781b901214656bd32432b35d17 Mon Sep 17 00:00:00 2001 From: Rodrigo Aguilar <30542429+itsgatto@users.noreply.github.com> Date: Mon, 26 Mar 2018 01:50:42 -0600 Subject: [PATCH 048/333] cancel-afk-on-interact and cancel-afk-on-move are now separate settings (#1804) --- .../essentials/EssentialsEntityListener.java | 6 ++--- .../essentials/EssentialsPlayerListener.java | 24 +++++++++---------- .../src/com/earth2me/essentials/Settings.java | 2 +- .../src/com/earth2me/essentials/User.java | 14 ++++++++++- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index e3e4ea396..97630f72b 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -47,7 +47,7 @@ public class EssentialsEntityListener implements Listener { event.setCancelled(true); } } - attacker.updateActivity(true); + attacker.updateActivityOnInteract(true); } else if (eAttack instanceof Projectile && eDefend instanceof Player) { final Projectile projectile = (Projectile) event.getDamager(); //This should return a ProjectileSource on 1.7.3 beta + @@ -55,7 +55,7 @@ public class EssentialsEntityListener implements Listener { if (shooter instanceof Player) { final User attacker = ess.getUser((Player) shooter); onPlayerVsPlayerDamage(event, (Player) eDefend, attacker); - attacker.updateActivity(true); + attacker.updateActivityOnInteract(true); } } } @@ -194,7 +194,7 @@ public class EssentialsEntityListener implements Listener { if (event.getEntity() instanceof Player) { final User user = ess.getUser((Player) event.getEntity()); if (user.isAfk()) { - user.updateActivity(true); + user.updateActivityOnInteract(true); } } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 641c79306..d67e8d9c6 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -99,7 +99,7 @@ public class EssentialsPlayerListener implements Listener { } } - user.updateActivity(true); + user.updateActivityOnInteract(true); user.setDisplayNick(); } @@ -124,8 +124,8 @@ public class EssentialsPlayerListener implements Listener { final Location from = event.getFrom(); final Location origTo = event.getTo(); final Location to = origTo.clone(); - if (ess.getSettings().cancelAfkOnMove() && origTo.getY() >= from.getBlockY() + 1) { - user.updateActivity(true); + if (origTo.getY() >= from.getBlockY() + 1) { + user.updateActivityOnMove(true); return; } to.setX(from.getX()); @@ -138,10 +138,10 @@ public class EssentialsPlayerListener implements Listener { } return; } - final Location afk = user.getAfkPosition(); - if (afk == null || !event.getTo().getWorld().equals(afk.getWorld()) || afk.distanceSquared(event.getTo()) > 9) { - user.updateActivity(true); - } + final Location afk = user.getAfkPosition(); + if (afk == null || !event.getTo().getWorld().equals(afk.getWorld()) || afk.distanceSquared(event.getTo()) > 9) { + user.updateActivityOnMove(true); + } } @EventHandler(priority = EventPriority.HIGHEST) @@ -176,7 +176,7 @@ public class EssentialsPlayerListener implements Listener { } } - user.updateActivity(false); + user.updateActivityOnInteract(false); if (!user.isHidden()) { user.setLastLogout(System.currentTimeMillis()); } @@ -214,7 +214,7 @@ public class EssentialsPlayerListener implements Listener { final long currentTime = System.currentTimeMillis(); dUser.checkMuteTimeout(currentTime); - dUser.updateActivity(false); + dUser.updateActivityOnInteract(false); dUser.stopTransaction(); class DelayJoinTask implements Runnable { @@ -488,7 +488,7 @@ public class EssentialsPlayerListener implements Listener { } final User user = ess.getUser(player); if (update) { - user.updateActivity(broadcast); + user.updateActivityOnInteract(broadcast); } if (ess.getSettings().isCommandCooldownsEnabled() && pluginCommand != null @@ -611,7 +611,7 @@ public class EssentialsPlayerListener implements Listener { } break; } - ess.getUser(event.getPlayer()).updateActivity(true); + ess.getUser(event.getPlayer()).updateActivityOnInteract(true); } // This method allows the /jump lock feature to work, allows teleporting while flying #EasterEgg @@ -777,7 +777,7 @@ public class EssentialsPlayerListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerFishEvent(final PlayerFishEvent event) { final User user = ess.getUser(event.getPlayer()); - user.updateActivity(true); + user.updateActivityOnInteract(true); } private final class PlayerListenerPre1_12 implements Listener { diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index c3ff346c5..56b4e50d5 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -489,7 +489,7 @@ public class Settings implements net.ess3.api.ISettings { disableItemPickupWhileAfk = _getDisableItemPickupWhileAfk(); registerBackInListener = _registerBackInListener(); cancelAfkOnInteract = _cancelAfkOnInteract(); - cancelAfkOnMove = _cancelAfkOnMove() && cancelAfkOnInteract; + cancelAfkOnMove = _cancelAfkOnMove(); getFreezeAfkPlayers = _getFreezeAfkPlayers(); afkListName = _getAfkListName(); isAfkListName = !afkListName.equalsIgnoreCase("none"); diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 1d58000f8..f6f502b17 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -545,7 +545,7 @@ public class User extends UserData implements Comparable, IMessageRecipien } public void updateActivity(final boolean broadcast) { - if (isAfk() && ess.getSettings().cancelAfkOnInteract()) { + if (isAfk()) { setAfk(false); if (broadcast && !isHidden()) { setDisplayNick(); @@ -558,6 +558,18 @@ public class User extends UserData implements Comparable, IMessageRecipien lastActivity = System.currentTimeMillis(); } + public void updateActivityOnMove(final boolean broadcast) { + if(ess.getSettings().cancelAfkOnMove()) { + updateActivity(broadcast); + } + } + + public void updateActivityOnInteract(final boolean broadcast) { + if(ess.getSettings().cancelAfkOnInteract()) { + updateActivity(broadcast); + } + } + public void checkActivity() { // Graceful time before the first afk check call. if (System.currentTimeMillis() - lastActivity <= 10000) { From 613e852ffd828b85b7e3fdbcb06be3c6cfdce3c5 Mon Sep 17 00:00:00 2001 From: md678685 Date: Thu, 29 Mar 2018 04:00:19 +0100 Subject: [PATCH 049/333] Implement new versioning as per #1873 (#1882) --- Essentials/pom.xml | 3 +- Essentials/src/config.yml | 2 +- Essentials/src/items.csv | 2 +- Essentials/src/messages.properties | 2 +- Essentials/src/messages_cs.properties | 2 +- Essentials/src/messages_da.properties | 2 +- Essentials/src/messages_de.properties | 2 +- Essentials/src/messages_en.properties | 2 +- Essentials/src/messages_es.properties | 2 +- Essentials/src/messages_et.properties | 2 +- Essentials/src/messages_fi.properties | 2 +- Essentials/src/messages_fr.properties | 2 +- Essentials/src/messages_hu.properties | 2 +- Essentials/src/messages_it.properties | 2 +- Essentials/src/messages_ko.properties | 2 +- Essentials/src/messages_lt.properties | 2 +- Essentials/src/messages_nl.properties | 2 +- Essentials/src/messages_pl.properties | 2 +- Essentials/src/messages_pt.properties | 2 +- Essentials/src/messages_pt_BR.properties | 2 +- Essentials/src/messages_ro.properties | 2 +- Essentials/src/messages_ru.properties | 2 +- Essentials/src/messages_sv.properties | 2 +- Essentials/src/messages_tr.properties | 2 +- Essentials/src/messages_zh_HK.properties | 2 +- Essentials/src/messages_zh_TW.properties | 2 +- Essentials/src/plugin.yml | 2 +- EssentialsAntiBuild/pom.xml | 6 ++- EssentialsAntiBuild/src/plugin.yml | 2 +- EssentialsChat/pom.xml | 6 ++- EssentialsChat/src/plugin.yml | 2 +- EssentialsGeoIP/pom.xml | 3 +- EssentialsGeoIP/src/plugin.yml | 2 +- EssentialsProtect/pom.xml | 6 ++- EssentialsProtect/src/plugin.yml | 2 +- EssentialsSpawn/pom.xml | 6 ++- EssentialsSpawn/src/plugin.yml | 2 +- EssentialsXMPP/pom.xml | 5 ++- EssentialsXMPP/src/plugin.yml | 2 +- pom.xml | 49 +++++++++++++++++------- 40 files changed, 96 insertions(+), 52 deletions(-) diff --git a/Essentials/pom.xml b/Essentials/pom.xml index c2e2b8480..a379e1b11 100644 --- a/Essentials/pom.xml +++ b/Essentials/pom.xml @@ -6,7 +6,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 EssentialsX @@ -19,6 +19,7 @@ + EssentialsX-${full.version} org.apache.maven.plugins diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 656298e7c..28fcf6ca1 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -13,7 +13,7 @@ # If you have problems join the Essentials help support channel: http://tiny.cc/EssentialsChat -# Version ${project.version}-b${build.number} +# Version ${full.version} # KITS ARE NOW IN THE kits.yml FILE diff --git a/Essentials/src/items.csv b/Essentials/src/items.csv index 59d002a19..1e7c1c124 100644 --- a/Essentials/src/items.csv +++ b/Essentials/src/items.csv @@ -1,4 +1,4 @@ -#version: ${project.version}-b${build.number} +#version: ${full.version} #If you change this file, it will not be automatically updated after the next release. #item,id,metadata stone,1,0 diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 445906201..a293abe8c 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index 31edbdc0f..2c10905f8 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 5c178f4ca..f69ec0a1d 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index 8ded9339f..efed95086 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index b386f4ca9..17835e5e3 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index 507cb8c8f..ac36b6e0a 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_et.properties b/Essentials/src/messages_et.properties index 0df4b13b7..e199f2647 100644 --- a/Essentials/src/messages_et.properties +++ b/Essentials/src/messages_et.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index 33087fc37..013654088 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index be27265c0..be6ebc459 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.com -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Dรฉbut des traductions # EssentialsX a รฉtรฉ traduit par la communautรฉ franรงaise. diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 9d6efd6b7..b2662cd07 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: montlikadani diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index 7e8a13c53..5fce18109 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_ko.properties b/Essentials/src/messages_ko.properties index bc45c86ad..aab15a57a 100644 --- a/Essentials/src/messages_ko.properties +++ b/Essentials/src/messages_ko.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_lt.properties b/Essentials/src/messages_lt.properties index c64a79cde..c5da9797e 100644 --- a/Essentials/src/messages_lt.properties +++ b/Essentials/src/messages_lt.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index d0df38319..4b48d3138 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index f97b3ed88..74f548600 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # Updated by RikoDEV diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index 6fe3630dc..0f3cc45dc 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_pt_BR.properties b/Essentials/src/messages_pt_BR.properties index 066002650..31f430f0b 100644 --- a/Essentials/src/messages_pt_BR.properties +++ b/Essentials/src/messages_pt_BR.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_ro.properties b/Essentials/src/messages_ro.properties index 09f81faf6..1fa807e1d 100644 --- a/Essentials/src/messages_ro.properties +++ b/Essentials/src/messages_ro.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_ru.properties b/Essentials/src/messages_ru.properties index 399a79dea..f284ce3a3 100644 --- a/Essentials/src/messages_ru.properties +++ b/Essentials/src/messages_ru.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_sv.properties b/Essentials/src/messages_sv.properties index 3b424aed2..81d6e3763 100644 --- a/Essentials/src/messages_sv.properties +++ b/Essentials/src/messages_sv.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_tr.properties b/Essentials/src/messages_tr.properties index 7b159e7cc..3671f50a9 100644 --- a/Essentials/src/messages_tr.properties +++ b/Essentials/src/messages_tr.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_zh_HK.properties b/Essentials/src/messages_zh_HK.properties index ec99552b5..eace2bd48 100644 --- a/Essentials/src/messages_zh_HK.properties +++ b/Essentials/src/messages_zh_HK.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/messages_zh_TW.properties b/Essentials/src/messages_zh_TW.properties index 6b6934f09..0b33c114d 100644 --- a/Essentials/src/messages_zh_TW.properties +++ b/Essentials/src/messages_zh_TW.properties @@ -1,5 +1,5 @@ #X-Generator: crowdin.net -#version: ${project.version}-b${build.number} +#version: ${full.version} # Single quotes have to be doubled: '' # Translations start here # by: diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index a71f191f2..6012c5727 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -2,7 +2,7 @@ name: Essentials main: com.earth2me.essentials.Essentials # Note to developers: This next line cannot change, or the automatic versioning system will break. -version: ${project.version}-b${build.number} +version: ${full.version} website: http://tiny.cc/EssentialsCommands description: Provides an essential, core set of commands for Bukkit. softdepend: [Vault] diff --git a/EssentialsAntiBuild/pom.xml b/EssentialsAntiBuild/pom.xml index 17a4bedd7..a88daebef 100644 --- a/EssentialsAntiBuild/pom.xml +++ b/EssentialsAntiBuild/pom.xml @@ -6,7 +6,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 EssentialsXAntiBuild @@ -18,6 +18,10 @@ + + EssentialsXAntiBuild-${full.version} + + net.ess3 diff --git a/EssentialsAntiBuild/src/plugin.yml b/EssentialsAntiBuild/src/plugin.yml index 46ab53bc3..0971ee521 100644 --- a/EssentialsAntiBuild/src/plugin.yml +++ b/EssentialsAntiBuild/src/plugin.yml @@ -2,7 +2,7 @@ name: EssentialsAntiBuild main: com.earth2me.essentials.antibuild.EssentialsAntiBuild # Note to developers: This next line cannot change, or the automatic versioning system will break. -version: ${project.version}-b${build.number} +version: ${full.version} website: http://tiny.cc/EssentialsCommands description: Provides build protection. authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, Iaccidentally] diff --git a/EssentialsChat/pom.xml b/EssentialsChat/pom.xml index 75d59c5e5..21d2add63 100644 --- a/EssentialsChat/pom.xml +++ b/EssentialsChat/pom.xml @@ -6,7 +6,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 EssentialsXChat @@ -18,6 +18,10 @@ + + EssentialsXChat-${full.version} + + net.ess3 diff --git a/EssentialsChat/src/plugin.yml b/EssentialsChat/src/plugin.yml index b11702e8e..5f855228b 100644 --- a/EssentialsChat/src/plugin.yml +++ b/EssentialsChat/src/plugin.yml @@ -2,7 +2,7 @@ name: EssentialsChat main: com.earth2me.essentials.chat.EssentialsChat # Note to developers: This next line cannot change, or the automatic versioning system will break. -version: ${project.version}-b${build.number} +version: ${full.version} website: http://tiny.cc/EssentialsCommands description: Provides chat control features for Essentials. Requires Permissions. authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Okamosy, Iaccidentally] diff --git a/EssentialsGeoIP/pom.xml b/EssentialsGeoIP/pom.xml index bd818fc82..c6e12c94d 100644 --- a/EssentialsGeoIP/pom.xml +++ b/EssentialsGeoIP/pom.xml @@ -6,7 +6,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 EssentialsXGeoIP @@ -43,6 +43,7 @@ + EssentialsXGeoIP-${full.version} org.apache.maven.plugins diff --git a/EssentialsGeoIP/src/plugin.yml b/EssentialsGeoIP/src/plugin.yml index e8cb6bf6d..2976c2996 100644 --- a/EssentialsGeoIP/src/plugin.yml +++ b/EssentialsGeoIP/src/plugin.yml @@ -2,7 +2,7 @@ name: EssentialsGeoIP main: com.earth2me.essentials.geoip.EssentialsGeoIP # Note to developers: This next line cannot change, or the automatic versioning system will break. -version: ${project.version}-b${build.number} +version: ${full.version} website: http://tiny.cc/EssentialsCommands description: Shows the country or city of a user on login and /whois. authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, kjiang] diff --git a/EssentialsProtect/pom.xml b/EssentialsProtect/pom.xml index e2068125c..5c00c4b0d 100644 --- a/EssentialsProtect/pom.xml +++ b/EssentialsProtect/pom.xml @@ -6,7 +6,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 EssentialsXProtect @@ -18,6 +18,10 @@ + + EssentialsXProtect-${full.version} + + net.ess3 diff --git a/EssentialsProtect/src/plugin.yml b/EssentialsProtect/src/plugin.yml index 14e6b2820..00a61573b 100644 --- a/EssentialsProtect/src/plugin.yml +++ b/EssentialsProtect/src/plugin.yml @@ -2,7 +2,7 @@ name: EssentialsProtect main: com.earth2me.essentials.protect.EssentialsProtect # Note to developers: This next line cannot change, or the automatic versioning system will break. -version: ${project.version}-b${build.number} +version: ${full.version} website: http://tiny.cc/EssentialsCommands description: Provides protection for various parts of the world. authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits] diff --git a/EssentialsSpawn/pom.xml b/EssentialsSpawn/pom.xml index 4d71dd8a9..de96a0f97 100644 --- a/EssentialsSpawn/pom.xml +++ b/EssentialsSpawn/pom.xml @@ -6,7 +6,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 EssentialsXSpawn @@ -18,6 +18,10 @@ + + EssentialsXSpawn-${full.version} + + net.ess3 diff --git a/EssentialsSpawn/src/plugin.yml b/EssentialsSpawn/src/plugin.yml index 06c9dac7d..3e83aa950 100644 --- a/EssentialsSpawn/src/plugin.yml +++ b/EssentialsSpawn/src/plugin.yml @@ -2,7 +2,7 @@ name: EssentialsSpawn main: com.earth2me.essentials.spawn.EssentialsSpawn # Note to developers: This next line cannot change, or the automatic versioning system will break. -version: ${project.version}-b${build.number} +version: ${full.version} website: http://tiny.cc/EssentialsCommands description: Provides spawn control commands, utilizing Essentials. authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits] diff --git a/EssentialsXMPP/pom.xml b/EssentialsXMPP/pom.xml index a127be087..e4aba18ae 100644 --- a/EssentialsXMPP/pom.xml +++ b/EssentialsXMPP/pom.xml @@ -6,7 +6,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 EssentialsXXMPP @@ -31,7 +31,10 @@ + + + EssentialsXXMPP-${full.version} org.apache.maven.plugins diff --git a/EssentialsXMPP/src/plugin.yml b/EssentialsXMPP/src/plugin.yml index cdcd9c149..4c82ada31 100644 --- a/EssentialsXMPP/src/plugin.yml +++ b/EssentialsXMPP/src/plugin.yml @@ -2,7 +2,7 @@ name: EssentialsXMPP main: com.earth2me.essentials.xmpp.EssentialsXMPP # Note to developers: This next line cannot change, or the automatic versioning system will break. -version: ${project.version}-b${build.number} +version: ${full.version} website: http://ess.khhq.net/wiki/XMPP description: Provides xmpp communication. authors: diff --git a/pom.xml b/pom.xml index e369c413c..1500206ef 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ net.ess3 EssentialsXParent - 2.0.1 + 2.15.0 pom @@ -200,19 +200,11 @@ TeamCity - ${build.number} - - - GMBuildVer - ${GMVer} + ${full.version} $${build.number} - ${build.number} - - - $${GMVer} - ${GMVer} + ${full.version} @@ -250,6 +242,31 @@ true + + pl.project13.maven + git-commit-id-plugin + 2.2.4 + + + + revision + + + + + + false + + true + true + false + + + true + + + + @@ -266,8 +283,14 @@ - SNAPSHOT - GMBuildVer UTF-8 + + + 2.15.0 + + + ${git.closest.tag.commit.count} + + ${release.version}.${build.number} From b2a528097118d00b23c3c1b6996a41b7b09d1e1a Mon Sep 17 00:00:00 2001 From: md678685 Date: Thu, 29 Mar 2018 22:19:19 +0100 Subject: [PATCH 050/333] Avoid build version being overridden by Jenkins (#1936) --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 1500206ef..3efbf97d1 100644 --- a/pom.xml +++ b/pom.xml @@ -289,8 +289,8 @@ 2.15.0 - ${git.closest.tag.commit.count} + ${git.closest.tag.commit.count} - ${release.version}.${build.number} + ${release.version}.${build.version} From b29f98c525c49647828b96c4986ee55dd28b92b4 Mon Sep 17 00:00:00 2001 From: Joseph Hirschfeld Date: Sun, 29 Apr 2018 07:49:49 -0700 Subject: [PATCH 051/333] [Feature] Add world specific /back dest. perms (#1948) @Ichbinjoe Adds world specific perms for whether a player may use /back to teleport back to a given world. Adds logic to default essentials.back.into. permissions for loaded worlds to true to maintain backwards compatibility. --- .../com/earth2me/essentials/Essentials.java | 19 +++++++++++++++++++ .../essentials/commands/Commandback.java | 12 ++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index e15d39e02..d49761f49 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -60,6 +60,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldUnloadEvent; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.InvalidDescriptionException; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; @@ -246,6 +248,9 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { Economy.setEss(this); execTimer.mark("RegHandler"); + for (World w : Bukkit.getWorlds()) + addDefaultBackPermissionsToWorld(w); + metrics = new Metrics(this); if (!metrics.isOptOut()) { getLogger().info("Starting Metrics. Opt-out using the global bStats config."); @@ -867,6 +872,18 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { return potionMetaProvider; } + private static void addDefaultBackPermissionsToWorld(World w) { + String permName = "essentials.back.into." + w.getName(); + + Permission p = Bukkit.getPluginManager().getPermission(permName); + if (p == null) { + p = new Permission(permName, + "Allows access to /back when the destination location is within world " + w.getName(), + PermissionDefault.TRUE); + Bukkit.getPluginManager().addPermission(p); + } + } + private static class EssentialsWorldListener implements Listener, Runnable { private transient final IEssentials ess; @@ -876,6 +893,8 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { @EventHandler(priority = EventPriority.LOW) public void onWorldLoad(final WorldLoadEvent event) { + addDefaultBackPermissionsToWorld(event.getWorld()); + ess.getJails().onReload(); ess.getWarps().reloadConfig(); for (IConf iConf : ((Essentials) ess).confList) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandback.java b/Essentials/src/com/earth2me/essentials/commands/Commandback.java index 618c84e7a..4e28ac0bb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandback.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandback.java @@ -17,9 +17,17 @@ public class Commandback extends EssentialsCommand { if (user.getLastLocation() == null) { throw new Exception(tl("noLocationFound")); } - if (user.getWorld() != user.getLastLocation().getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + user.getLastLocation().getWorld().getName())) { - throw new Exception(tl("noPerm", "essentials.worlds." + user.getLastLocation().getWorld().getName())); + + String lastWorldName = user.getLastLocation().getWorld().getName(); + + if (user.getWorld() != user.getLastLocation().getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + lastWorldName)) { + throw new Exception(tl("noPerm", "essentials.worlds." + lastWorldName)); } + + if (!user.isAuthorized("essentials.back.into." + lastWorldName)) { + throw new Exception(tl("noPerm", "essentials.back.into." + lastWorldName)); + } + final Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); user.getTeleport().back(charge); From 3237632eb4a17000e078882ec1d560f43fc396d8 Mon Sep 17 00:00:00 2001 From: md678685 Date: Fri, 18 May 2018 09:23:20 +0100 Subject: [PATCH 052/333] Fix versioning of NMS modules (#1971) Resolves numerous build errors that emerged in 613e852ffd828b85b7e3fdbcb06be3c6cfdce3c5 and for some reason didn't cause a build error on ender.zone, but did everywhere else. Fixes #1970 --- Essentials/pom.xml | 12 ++++++------ nms/1_8_R1Provider/pom.xml | 4 ++-- nms/1_8_R2Provider/pom.xml | 4 ++-- nms/LegacyProvider/pom.xml | 4 ++-- nms/NMSProvider/pom.xml | 2 +- nms/ReflectionProvider/pom.xml | 4 ++-- nms/UpdatedMetaProvider/pom.xml | 4 ++-- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Essentials/pom.xml b/Essentials/pom.xml index a379e1b11..d4031d2cc 100644 --- a/Essentials/pom.xml +++ b/Essentials/pom.xml @@ -83,19 +83,19 @@ net.ess3 NMSProvider - 2.0.1 + 2.15.0 compile net.ess3 UpdatedMetaProvider - 2.0.1 + 2.15.0 compile net.ess3 1_8_R1Provider - 2.0.1 + 2.15.0 compile @@ -107,7 +107,7 @@ net.ess3 1_8_R2Provider - 2.0.1 + 2.15.0 compile @@ -119,13 +119,13 @@ net.ess3 LegacyProvider - 2.0.1 + 2.15.0 compile net.ess3 ReflectionProvider - 2.0.1 + 2.15.0 compile diff --git a/nms/1_8_R1Provider/pom.xml b/nms/1_8_R1Provider/pom.xml index 8bacf56b9..03bbc2a9f 100644 --- a/nms/1_8_R1Provider/pom.xml +++ b/nms/1_8_R1Provider/pom.xml @@ -5,7 +5,7 @@ EssentialsXParent net.ess3 - 2.0.1 + 2.15.0 ../../pom.xml 4.0.0 @@ -30,7 +30,7 @@ net.ess3 NMSProvider - 2.0.1 + 2.15.0 \ No newline at end of file diff --git a/nms/1_8_R2Provider/pom.xml b/nms/1_8_R2Provider/pom.xml index f40bc218a..d4b6d1681 100644 --- a/nms/1_8_R2Provider/pom.xml +++ b/nms/1_8_R2Provider/pom.xml @@ -5,7 +5,7 @@ EssentialsXParent net.ess3 - 2.0.1 + 2.15.0 ../../pom.xml 4.0.0 @@ -30,7 +30,7 @@ net.ess3 NMSProvider - 2.0.1 + 2.15.0 \ No newline at end of file diff --git a/nms/LegacyProvider/pom.xml b/nms/LegacyProvider/pom.xml index e862140e7..8cd2b15da 100644 --- a/nms/LegacyProvider/pom.xml +++ b/nms/LegacyProvider/pom.xml @@ -5,7 +5,7 @@ EssentialsXParent net.ess3 - 2.0.1 + 2.15.0 ../../pom.xml 4.0.0 @@ -16,7 +16,7 @@ net.ess3 NMSProvider - 2.0.1 + 2.15.0 \ No newline at end of file diff --git a/nms/NMSProvider/pom.xml b/nms/NMSProvider/pom.xml index 00bebbaa1..19c3e7c29 100644 --- a/nms/NMSProvider/pom.xml +++ b/nms/NMSProvider/pom.xml @@ -5,7 +5,7 @@ EssentialsXParent net.ess3 - 2.0.1 + 2.15.0 ../../pom.xml 4.0.0 diff --git a/nms/ReflectionProvider/pom.xml b/nms/ReflectionProvider/pom.xml index 101327ba5..3c9a17aee 100644 --- a/nms/ReflectionProvider/pom.xml +++ b/nms/ReflectionProvider/pom.xml @@ -5,7 +5,7 @@ EssentialsXParent net.ess3 - 2.0.1 + 2.15.0 ../../pom.xml 4.0.0 @@ -23,7 +23,7 @@ net.ess3 NMSProvider - 2.0.1 + 2.15.0 \ No newline at end of file diff --git a/nms/UpdatedMetaProvider/pom.xml b/nms/UpdatedMetaProvider/pom.xml index 9ed83fb85..b6b949c5b 100644 --- a/nms/UpdatedMetaProvider/pom.xml +++ b/nms/UpdatedMetaProvider/pom.xml @@ -5,7 +5,7 @@ EssentialsXParent net.ess3 - 2.0.1 + 2.15.0 ../../pom.xml 4.0.0 @@ -23,7 +23,7 @@ net.ess3 NMSProvider - 2.0.1 + 2.15.0 \ No newline at end of file From 030eb3375b650ec769bb7b92255fb41a4682fdc7 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Sat, 26 May 2018 21:34:31 +0200 Subject: [PATCH 053/333] Block ignite only for PvP, not for PvE (#1967) @Brokkonaut Players with god mode enabled could not ignite mobs with bows while only igniting players should be blocked. --- .../src/com/earth2me/essentials/EssentialsEntityListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 97630f72b..fbf5abfd9 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -124,7 +124,7 @@ public class EssentialsEntityListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onEntityCombustByEntity(final EntityCombustByEntityEvent event) { - if (event.getCombuster() instanceof Arrow) { + if (event.getCombuster() instanceof Arrow && event.getEntity() instanceof Player) { Arrow combuster = (Arrow) event.getCombuster(); if (combuster.getShooter() instanceof Player) { final User srcCombuster = ess.getUser(((Player) combuster.getShooter()).getUniqueId()); From 2ff29dab80902cf2de5ef4280fc63ec65e58d784 Mon Sep 17 00:00:00 2001 From: montlikadani Date: Sat, 26 May 2018 21:40:45 +0200 Subject: [PATCH 054/333] Update Commanddeljail.java (#2002) @montlikadani When the user entered a word to delete the jail, deleted it, but removed anything because no jail existed. --- .../src/com/earth2me/essentials/commands/Commanddeljail.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java b/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java index 4d0d2ef16..01643e81d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java @@ -19,6 +19,10 @@ public class Commanddeljail extends EssentialsCommand { throw new NotEnoughArgumentsException(); } + if (ess.getJails().getJail(args[0]) == null) { + throw new Exception(tl("jailNotExist")); + } + ess.getJails().removeJail(args[0]); sender.sendMessage(tl("deleteJail", args[0])); } From 817caf299fc8076d2a2481a3caadb174598c2077 Mon Sep 17 00:00:00 2001 From: FlashLight34 Date: Sat, 26 May 2018 15:42:51 -0400 Subject: [PATCH 055/333] setwarp owner uuid in yml file (#1961) @FlashLight34 * Update Warps.java its not a real change i dont know if user.getuuid() exist or onother possible cmd maybe * Update Warps.java * Update Commandsetwarp.java * Update Warps.java * Update Warps.java * Update Commandsetwarp.java * Update Warps.java * Update Warps.java * Update Commandsetwarp.java * Update Warps.java --- .../src/com/earth2me/essentials/Warps.java | 24 ++++++++++++++++--- .../essentials/commands/Commandsetwarp.java | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Warps.java b/Essentials/src/com/earth2me/essentials/Warps.java index bff2f970f..785d6b4c7 100644 --- a/Essentials/src/com/earth2me/essentials/Warps.java +++ b/Essentials/src/com/earth2me/essentials/Warps.java @@ -6,13 +6,11 @@ import net.ess3.api.InvalidNameException; import net.ess3.api.InvalidWorldException; import org.bukkit.Location; import org.bukkit.Server; - import java.io.File; import java.io.IOException; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; - import static com.earth2me.essentials.I18n.tl; @@ -57,6 +55,11 @@ public class Warps implements IConf, net.ess3.api.IWarps { @Override public void setWarp(String name, Location loc) throws Exception { + setWarp(null, name, loc); + } + + @Override + public void setWarp(User user, String name, Location loc) throws Exception { String filename = StringUtil.sanitizeFileName(name); EssentialsConf conf = warpPoints.get(new StringIgnoreCase(name)); if (conf == null) { @@ -69,13 +72,28 @@ public class Warps implements IConf, net.ess3.api.IWarps { } conf.setProperty(null, loc); conf.setProperty("name", name); + if (user != null) conf.setProperty("lastowner", user.getBase().getUniqueId().toString()); try { conf.saveWithError(); } catch (IOException ex) { throw new IOException(tl("invalidWarpName")); } } - + + @Override + public UUID getLastOwner(String warp) throws WarpNotFoundException { + EssentialsConf conf = warpPoints.get(new StringIgnoreCase(warp)); + if (conf == null) { + throw new WarpNotFoundException(); + } + UUID uuid = null; + try { + uuid = UUID.fromString(conf.getString("lastowner")); + } + catch (Exception ex) {} + return uuid; + } + @Override public void removeWarp(String name) throws Exception { EssentialsConf conf = warpPoints.get(new StringIgnoreCase(name)); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java index 796fa1fb4..a6cf878f6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java @@ -36,7 +36,7 @@ public class Commandsetwarp extends EssentialsCommand { } if (warpLoc == null || user.isAuthorized("essentials.warp.overwrite." + StringUtil.safeString(args[0]))) { - warps.setWarp(args[0], loc); + warps.setWarp(user, args[0], loc); } else { throw new Exception(tl("warpOverwrite")); } From 7298393ec9832c852c0f4661b5213608b7798629 Mon Sep 17 00:00:00 2001 From: Xeyame <34656654+Xeyame@users.noreply.github.com> Date: Sat, 26 May 2018 21:43:31 +0200 Subject: [PATCH 056/333] Add permission to bypass other's msgtoggle (#1955) @Xeyame * Add permission to bypass other's msgtoggle Also thanks to MD for helping me with the code :) * Correct comment * Remove checking for console in favour of the already existing IUser check * Fix comments, again * Re add isIgnoreMsg() check Accidently removed it, sorry * Combine 2 checks --- .../messaging/SimpleMessageRecipient.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java b/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java index 612daeb69..b5a2fb7dc 100644 --- a/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java +++ b/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java @@ -17,7 +17,7 @@ import java.lang.ref.WeakReference; *
  • {@link IMessageRecipient#getReplyRecipient()}
  • *
  • {@link IMessageRecipient#setReplyRecipient(IMessageRecipient)}
  • * - * + * * The given {@code parent} must implement the following methods to prevent overflow: *
      *
    • {@link IMessageRecipient#sendMessage(String)}
    • @@ -25,14 +25,14 @@ import java.lang.ref.WeakReference; *
    • {@link IMessageRecipient#getDisplayName()}
    • *
    • {@link IMessageRecipient#isReachable()}
    • *
    - * + * * The reply-recipient is wrapped in a {@link WeakReference}. */ public class SimpleMessageRecipient implements IMessageRecipient { private final IEssentials ess; private final IMessageRecipient parent; - + private long lastMessageMs; private WeakReference replyRecipient; @@ -42,7 +42,7 @@ public class SimpleMessageRecipient implements IMessageRecipient { } return recipient instanceof User ? (User) recipient : null; } - + public SimpleMessageRecipient(IEssentials ess, IMessageRecipient parent) { this.ess = ess; this.parent = parent; @@ -117,13 +117,12 @@ public class SimpleMessageRecipient implements IMessageRecipient { if (!isReachable()) { return MessageResponse.UNREACHABLE; } - + User user = getUser(this); boolean afk = false; if (user != null) { - if (user.isIgnoreMsg() - && !(sender instanceof Console)) { // Console must never be ignored. - return MessageResponse.MESSAGES_IGNORED; + if (user.isIgnoreMsg() && sender instanceof IUser && !((IUser) sender).isAuthorized("essentials.msgtoggle.bypass")) { // Don't ignore console and senders with permission + return MessageResponse.MESSAGES_IGNORED; } afk = user.isAfk(); // Check whether this recipient ignores the sender, only if the sender is not the console. @@ -138,7 +137,7 @@ public class SimpleMessageRecipient implements IMessageRecipient { // If this recipient doesn't have a reply recipient, initiate by setting the first // message sender to this recipient's replyRecipient. long timeout = ess.getSettings().getLastMessageReplyRecipientTimeout() * 1000; - if (getReplyRecipient() == null || !getReplyRecipient().isReachable() + if (getReplyRecipient() == null || !getReplyRecipient().isReachable() || System.currentTimeMillis() - this.lastMessageMs > timeout) { setReplyRecipient(sender); } From 967bb44d94c56dd929a0241c6e08376d6b823a8e Mon Sep 17 00:00:00 2001 From: FlashLight34 Date: Sun, 27 May 2018 02:33:37 -0400 Subject: [PATCH 057/333] Update IWarps.java (#2017) @FlashLight34 Maybe the compilation fails because that :P --- .../com/earth2me/essentials/api/IWarps.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/api/IWarps.java b/Essentials/src/com/earth2me/essentials/api/IWarps.java index 207b2afdb..ab94d2187 100644 --- a/Essentials/src/com/earth2me/essentials/api/IWarps.java +++ b/Essentials/src/com/earth2me/essentials/api/IWarps.java @@ -54,6 +54,25 @@ public interface IWarps extends IConf { */ void setWarp(String name, Location loc) throws Exception; + /** + * Set a warp + * + * @param user - User of warp + * @param name - Name of warp + * @param loc - Location of warp + * + * @throws Exception + */ + void setWarp(User user, String name, Location loc) throws Exception; + + /** + * Gets Lastowner UUID + * + * @param name - Name of warp + * + * @throws WarpNotFoundException + */ + UUID getLastOwner(String warp) throws WarpNotFoundException; /** * Check to see if the file is empty * From 3d60aa17476c67c8244d45f07d2b4289da2bd09b Mon Sep 17 00:00:00 2001 From: md678685 Date: Mon, 28 May 2018 20:21:23 +0100 Subject: [PATCH 058/333] Fix build errors (#2018) Fixes build errors caused by the warp owner PRs (#1961 and #2017) --- Essentials/src/com/earth2me/essentials/Warps.java | 2 +- Essentials/src/com/earth2me/essentials/api/IWarps.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Warps.java b/Essentials/src/com/earth2me/essentials/Warps.java index 785d6b4c7..f66fce9d5 100644 --- a/Essentials/src/com/earth2me/essentials/Warps.java +++ b/Essentials/src/com/earth2me/essentials/Warps.java @@ -59,7 +59,7 @@ public class Warps implements IConf, net.ess3.api.IWarps { } @Override - public void setWarp(User user, String name, Location loc) throws Exception { + public void setWarp(IUser user, String name, Location loc) throws Exception { String filename = StringUtil.sanitizeFileName(name); EssentialsConf conf = warpPoints.get(new StringIgnoreCase(name)); if (conf == null) { diff --git a/Essentials/src/com/earth2me/essentials/api/IWarps.java b/Essentials/src/com/earth2me/essentials/api/IWarps.java index ab94d2187..3a5dcb7f1 100644 --- a/Essentials/src/com/earth2me/essentials/api/IWarps.java +++ b/Essentials/src/com/earth2me/essentials/api/IWarps.java @@ -1,11 +1,13 @@ package com.earth2me.essentials.api; import com.earth2me.essentials.IConf; +import com.earth2me.essentials.IUser; import com.earth2me.essentials.commands.WarpNotFoundException; import org.bukkit.Location; import java.io.File; import java.util.Collection; +import java.util.UUID; public interface IWarps extends IConf { @@ -63,7 +65,7 @@ public interface IWarps extends IConf { * * @throws Exception */ - void setWarp(User user, String name, Location loc) throws Exception; + void setWarp(IUser user, String name, Location loc) throws Exception; /** * Gets Lastowner UUID From 45c806128a4eb170455642f432566d8ca76dcc2b Mon Sep 17 00:00:00 2001 From: montlikadani Date: Thu, 31 May 2018 20:23:48 +0200 Subject: [PATCH 059/333] Updated the messages_hu.properties file --- Essentials/src/messages_hu.properties | 518 +++++++++++++------------- 1 file changed, 259 insertions(+), 259 deletions(-) diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index b2662cd07..ed12273eb 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -17,121 +17,121 @@ antiBuildCraft=\u00a74Nincs jogod, hogy a k\u00f6vetkez\u0151t k\u00e9sz\u00edts antiBuildDrop=\u00a74Nincs jogod, hogy eldobd a k\u00f6vetkez\u0151t\:\u00a7c {0}\u00a74. antiBuildInteract=\u00a74Nincs jogod, hogy interakci\u00f3ba l\u00e9pj a\u00a7c {0}\u00a74-val/-vel. antiBuildPlace=\u00a74Nincs jogod, hogy lehelyezed\u00a7c {0} \u00a74ide. -antiBuildUse=\u00a74NIncs jogod, hogy haszn\u00e1ld a k\u00f6vetkez\u0151t\:\u00a7c {0}\u00a74. +antiBuildUse=\u00a74Nincs jogod, hogy haszn\u00e1ld a k\u00f6vetkez\u0151t\:\u00a7c {0}\u00a74. autoAfkKickReason=Kickelve lett\u00e9l {0} perc AFK miatt\! backAfterDeath=\u00a76Meghalt\u00e1l\! A \u00a74/back\u00a76 paranccsal visszajuthatsz hal\u00e1lod sz\u00ednhely\u00e9re. -backupDisabled=\u00a74A ment\u00e9s nincs k\u00e9sz -backupFinished=\u00a76Biztons\u00e1gi ment\u00e9s k\u00e9sz. -backupStarted=\u00a76Biztons\u00e1gi ment\u00e9s elkezdve. +backupDisabled=\u00a74A ment\u00e9s nincs k\u00e9sz. +backupFinished=\u00a76A biztons\u00e1gi ment\u00e9s k\u00e9sz. +backupStarted=\u00a76A biztons\u00e1gi ment\u00e9s elkezdve. backUsageMsg=\u00a76Visszat\u00e9r\u00e9s az el\u0151z\u0151 helyre. balance=\u00a7aEgyenleged\:\u00a7c {0} balanceOther={0}\u00a7a egyenlege\:\u00a7c {1} balanceTop=\u00a76Legmagasabb egyenlegek ({0}) banExempt=\u00a74Nem tilthatod ki ezt a j\u00e1t\u00e9kost. -banExemptOffline=\u00a74Nem bannolhatsz Offline j\u00e1t\u00e9kost. +banExemptOffline=\u00a74Nem bannolhatsz offline j\u00e1t\u00e9kost. banFormat=\u00a74Kitiltva\:\n\u00a7r{0} -banIpJoin=Az IP cรญmed kitiltva a szerverrล‘l. Oka: {0} -banJoin=Ki lettรฉl tiltva a szerverrล‘l. Oka: {0} +banIpJoin=IP c\u00edmedr\u0151l lett\u00e9l kitiltva a szerverr\u0151l. Oka: {0} +banJoin=Ki lett\u00e9l tiltva a szerverr\u0151l. Oka: {0} bed=\u00a7o\u00e1gy\u00a7r bedMissing=\u00a74Az \u00e1gyad nincs be\u00e1ll\u00edtva vagy eltorlaszolt\u00e1k. bedNull=\u00a7m\u00e1gy\u00a7r bedSet=\u00a76\u00c1gyi kezd\u00f5hely be\u00e1ll\u00edtva\! bigTreeFailure=\u00a74Nagy fa gener\u00e1l\u00e1si hiba\! Pr\u00f3b\u00e1ld \u00fajra f\u00fcv\u00f6n vagy f\u00f6ld\u00f6n. -bigTreeSuccess=\u00a76Nagy fa legener\u00e1lva. +bigTreeSuccess=\u00a76Nagy fa gener\u00e1lva. blockList=\u00a76Az Essentials \u00e1tengedte a k\u00f6vetkez\u0151 parancsokat egy m\u00e1sik pluginnak\: bookAuthorSet=\u00a76Mostant\u00f3l a k\u00f6nyv \u00edr\u00f3ja\: {0}. bookLocked=\u00a76K\u00f6nyv lez\u00e1rva. bookTitleSet=\u00a76A k\u00f6nyv c\u00edme mostant\u00f3l\: {0}. broadcast=\u00a7r\u00a76[\u00a74K\u00f6zvet\u00edt\u00e9s\u00a76]\u00a7a {0} buildAlert=\u00a74Nincs jogod, hogy \u00e9p\u00edts. -bukkitFormatChanged=A Bukkit verziรณformรกtuma megvรกltozott. Nem ellenล‘rzรถtt verziรณ. -burnMsg=\u00a76Be\u00e1ll\u00edtottad\u00a7c {0}\u00a76-nak/nek a t\u00fczet\u00a7c {1} m\u00e1sodpercre\u00a76. -cannotStackMob=\u00a74Nincs jogod tรถbb szรถrnyet stackelni. +bukkitFormatChanged=A Bukkit verzi\u00f3form\u00e1tuma megv\u00e1ltozott. Nem ellen\u0151rz\u00f6tt verzi\u00f3. +burnMsg=\u00a76Be\u00e1ll\u00edtottad\u00a7c {0}\u00a76-nak/-nek a t\u00fczet\u00a7c {1} m\u00e1sodpercre\u00a76. +cannotStackMob=\u00a74Nincs jogod t\u00f6bb mobot stackelni. canTalkAgain=\u00a76Besz\u00e9lhetsz \u00fajra. cantFindGeoIpDB=A GeoIP adatb\u00e1zisa nem tal\u00e1lhat\u00f3\! -cantGamemode=\u00a74Nincs jogod megvรกltoztani a jรกtรฉk mรณdot {0} +cantGamemode=\u00a74Nincs jogod megv\u00e1ltoztani a j\u00e1t\u00e9k m\u00f3dot {0} cantReadGeoIpDB=Nem tudom beolvasni a GeoIP adatb\u00e1zist\! -cantSpawnItem=\u00a74Nincs jogod, hogy lek\u00e9rd a k\u00f6vetkez\u0151 cuccot\:\u00a7c {0}\u00a74. +cantSpawnItem=\u00a74Nincs jogod, hogy lek\u00e9rd a k\u00f6vetkez\u0151 t\u00e1rgyat\:\u00a7c {0}\u00a74. chatTypeAdmin=[A] chatTypeLocal=[L] chatTypeSpy=\u00a72[K\u00e9m]\u00a7r cleaned=J\u00e1t\u00e9kos f\u00e1jlok t\u00f6r\u00f6lve. cleaning=J\u00e1t\u00e9kos f\u00e1jlok tiszt\u00edt\u00e1sa. -clearInventoryConfirmToggleOff=\u00a76Az eszkรถztรกr tรถrlรฉse nem lesz รฉrvรฉnyben. -clearInventoryConfirmToggleOn=\u00a76Most meg kell adnod az eszkรถztรกr tรถrlรฉsรฉt. -commandCooldown=\u00a7cEzt a parancsot nem รญrhatod {0}. +clearInventoryConfirmToggleOff=\u00a76Az eszk\u00f6zt\u00e1r t\u00f6rl\u00e9se nem lesz \u00e9rv\u00e9nyben. +clearInventoryConfirmToggleOn=\u00a76Most meg kell adnod az eszk\u00f6zt\u00e1r t\u00f6rl\u00e9s\u00e9t. +commandCooldown=\u00a7cEzt a parancsot nem \u00edrhatod {0}. commandFailed=Parancs {0} sikertelen\: -commandHelpFailedForPlugin=Hiba a seg\u00edts\u00e9g lek\u00e9r\u00e9sben a(z) {0} pluginban -commandNotLoaded=\u00a74Parancs {0} nincs bet\u00f6ltve. -compassBearing=\u00a76Ir\u00e1ny\: {0} ({1} fok). -configFileMoveError=Nem sikerรผlt รกthelyezni a config.yml fรกjlt a mentรฉsi helyre. -configFileRenameError=Nem sikerรผlt รกtnevezni a temp fรกjlt a config.yml-be. -confirmClear=\u00a77Az eszkรถztรกr tรถrlรฉsรฉhez \u00a7lMEGERลSรT\u00a77 kรฉrjรผk, ismรฉteld meg a parancsot: \u00a76{0} -confirmPayment=\u00a77A \u00a7lMEGERลSรT\u00a77 fizetรฉs \u00a76{0}\u00a77, kรฉrlek, ismรฉteld meg a prancsot: \u00a76{1} +commandHelpFailedForPlugin=Hiba a seg\u00edts\u00e9g lek\u00e9r\u00e9sben a(z) {0} pluginban. +commandNotLoaded=\u00a74A parancs {0} nincs bet\u00f6ltve. +compassBearing=\u00a76Ir\u00e1ny\: {0} ({1} fok). +configFileMoveError=Nem siker\u00fclt \u00e1thelyezni a config.yml f\u00e1jlt a ment\u00e9si helyre. +configFileRenameError=Nem siker\u00fclt \u00e1tnevezni a temp f\u00e1jlt a config.yml-be. +confirmClear=\u00a77Az eszk\u00f6zt\u00e1r t\u00f6rl\u00e9s\u00e9hez \u00a7lMEGER\u0150S\u00cdT\u00c9S\u00a77 k\u00e9rlek, ism\u00e9teld meg a parancsot: \u00a76{0} +confirmPayment=\u00a77A \u00a7lMEGER\u0150S\u00cdT\u00a77 fizet\u00e9s \u00a76{0}\u00a77, k\u00e9rlek, ism\u00e9teld meg a parancsot: \u00a76{1} connectedPlayers=\u00a76Csatlakozott j\u00e1t\u00e9kosok\u00a7r -connectionFailed=Nem sikerรผlt megnyitni a kapcsolatot. -cooldownWithMessage=\u00a74Kรฉsleltetล‘\: {0} +connectionFailed=Nem siker\u00fclt megnyitni a kapcsolatot. +cooldownWithMessage=\u00a74K\u00e9sleltet\u0151\: {0} coordsKeyword={0}, {1}, {2} -corruptNodeInConfig=\u00a74Megjegyzรฉs\: A konfigurรกciรณs fรกjlod sรฉrรผlt {0} csomรณponttal rendelkezik. -couldNotFindTemplate=\u00a74Nem talรกltam sablont {0} -createdKit=\u00a76Csomag lรฉtrehozva \u00a7c{0} \u00a7c{1} \u00a76bejegyzรฉs รฉs kรฉsรฉssel \u00a7c{2} -createKitFailed=\u00a74Hiba tรถrtรฉnt a csomag lรฉtrehozรกsakor {0}. +corruptNodeInConfig=\u00a74Megjegyz\u00e9s\: A konfigur\u00e1ci\u00f3s f\u00e1jlod s\u00e9r\u00fclt {0} csom\u00f3ponttal rendelkezik. +couldNotFindTemplate=\u00a74Nem tal\u00e1ltam sablont {0} +createdKit=\u00a76Csomag l\u00e9trehozva \u00a7c{0} \u00a7c{1} \u00a76bejegyz\u00e9s \u00e9s k\u00e9s\u00e9ssel \u00a7c{2} +createKitFailed=\u00a74Hiba t\u00f6rt\u00e9nt a csomag l\u00e9trehoz\u00e1sakor {0}. createKitSeparator=\u00a7m----------------------- -createKitSuccess=\u00a76Csomag lรฉtrehozva: \u00a7f{0}\n\u00a76Kรฉsรฉs: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76A fenti hivatkozรกs tartalmรกnak mรกsolรกsa a config.yml-be. -creatingConfigFromTemplate=Konfigurรกlรกs lรฉtrehozรกsa sablonbรณl\: {0} -creatingEmptyConfig=รœres config lรฉtrehozรกsa\: {0} +createKitSuccess=\u00a76Csomag l\u00e9trehozva: \u00a7f{0}\n\u00a76K\u00e9s\u00e9s: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76A fenti hivatkoz\u00e1s tartalm\u00e1nak m\u00e1sol\u00e1sa a config.yml-be. +creatingConfigFromTemplate=Konfigur\u00e1l\u00e1s l\u00e9trehoz\u00e1sa sablonb\u00f3l\: {0} +creatingEmptyConfig=\u00dcres konfig l\u00e9trehoz\u00e1sa\: {0} creative=kreat\u00edv currency={0}{1} -currentWorld=\u00a76Jelenlegi vilรกg\:\u00a7c {0} +currentWorld=\u00a76Jelenlegi vil\u00e1g\:\u00a7c {0} day=nap days=nap defaultBanReason=Ki lett\u00e9l tiltva\! -deleteFileError=Nem lehet tรถrรถlni a fรกjlt\: {0} +deleteFileError=Nem lehet t\u00f6r\u00f6lni a f\u00e1jlt\: {0} deleteHome=\u00a76Az otthon\u00a7c {0} \u00a76sikeresen elt\u00e1vol\u00edtva. deleteJail=\u00a76B\u00f6rt\u00f6n\u00a7c {0} \u00a76sikeresen elt\u00e1vol\u00edtva. deleteWarp=\u00a76Warp\u00a7c {0} \u00a76sikeresen elt\u00e1vol\u00edtva. -deniedAccessCommand=\u00a7c{0} \u00a74megtagadva a parancs elรฉrรฉsรฉt. -denyBookEdit=\u00a74Nem tudod kinyitni ezt a kรถnyvet. -denyChangeAuthor=\u00a74Nem mรณdosรญthatod a kรถnyv szerzล‘jรฉt. -denyChangeTitle=\u00a74Nem mรณdosรญthatod a kรถnyv cรญmรฉt. +deniedAccessCommand=\u00a7c{0} \u00a74megtagadva a parancs el\u00e9r\u00e9s\u00e9t. +denyBookEdit=\u00a74Nem tudod kinyitni ezt a k\u00f6nyvet. +denyChangeAuthor=\u00a74Nem m\u00f3dos\u00edthatod a k\u00f6nyv szerz\u0151j\u00e9t. +denyChangeTitle=\u00a74Nem m\u00f3dos\u00edthatod a k\u00f6nyv c\u00edm\u00e9t. depth=\u00a76Tengeren vagy. -depthAboveSea=\u00a7c {0} \u00a76blokk(ok) tengerszint felett. -depthBelowSea=\u00a7c {0} \u00a76block(ok) tengerszint alatt. -destinationNotSet=A cรฉl nem lett beรกllรญtva\! +depthAboveSea=\u00a7c {0} \u00a76blokk(ok) a tengerszint felett. +depthBelowSea=\u00a7c {0} \u00a76blokk(ok) a tengerszint alatt. +destinationNotSet=A c\u00e9l nem lett be\u00e1ll\u00edtva\! disabled=letiltva -disabledToSpawnMob=\u00a74Ennek a l\u00e9nynek a leh\u00edv\u00e1sa jelenleg le van tiltva a config f\u00e1jlban. -disableUnlimited=\u00a76Letiltva korlรกtlan szรกmรบ\u00a7c {0} \u00a76 {1}. +disabledToSpawnMob=\u00a74Ennek a l\u00e9nynek a leh\u00edv\u00e1sa jelenleg le van tiltva a konfig f\u00e1jlban. +disableUnlimited=\u00a76Letiltva korl\u00e1tlan sz\u00e1m\u00fa\u00a7c {0} \u00a76 {1}. distance=\u00a76T\u00e1vols\u00e1g\: {0} dontMoveMessage=\u00a76A teleport\u00e1l\u00e1s elkezd\u00f5dik\u00a7c {0}\u00a76 bel\u00fcl. Ne mozogj\! -downloadingGeoIp=GeoIP adatb\u00e1zis let\u00f6lt\u00e9se folyamatban... eltarthat egy kis ideig (orszรกg\: 1.7 MB, vรกros\: 30MB) +downloadingGeoIp=GeoIP adatb\u00e1zis let\u00f6lt\u00e9se folyamatban... Eltarthat egy kis ideig (orsz\u00e1g\: 1.7 MB, v\u00e1ros\: 30MB) duplicatedUserdata=Duplik\u00e1lt felhaszn\u00e1l\u00f3i adatok\: {0} \u00e9s {1}. -durability=\u00a76Ez az eszkรถz \u00a7c{0}\u00a76 hasznรกlja balra +durability=\u00a76Ez az eszk\u00f6z \u00a7c{0}\u00a76 haszn\u00e1ld balra. editBookContents=\u00a76Mostant\u00f3l tudod szerkeszteni ezt a k\u00f6nyvet. -enabled=bekapcsolva +enabled=enged\u00e9lyezve enableUnlimited=\u00a76Lek\u00e9rve v\u00e9gtelen mennyis\u00e9g\u0171 \u00a7c {0} \u00a76\u00a7c{1}\u00a76-nak/-nek. -enchantmentApplied=\u00a76A k\u00f6vetkez\u0151 varรกzs\:\u00a7c {0} \u00a76sikeresen r\u00e1 lett rakva a kezedbe l\u00e9v\u0151 dologra. -enchantmentNotFound=\u00a74A varรกzslat nem tal\u00e1lhat\u00f3\! -enchantmentPerm=\u00a74Nincs jogod a k\u00f6vetkez\u0151 varรกzslathoz\:\u00a7c {0}\u00a74. -enchantmentRemoved=\u00a76A k\u00f6vetkez\u0151 enchant\:\u00a7c {0} \u00a76sikeresen le lett v\u00e9ve a kezedbe l\u00e9v\u0151 dologr\u00f3l. -enchantments=\u00a76Varรกzslatok\:\u00a7r {0} +enchantmentApplied=\u00a76A k\u00f6vetkez\u0151 var\u00e1zs\:\u00a7c {0} \u00a76sikeresen r\u00e1 lett rakva a kezedbe l\u00e9v\u0151 dologra. +enchantmentNotFound=\u00a74A var\u00e1zslat nem tal\u00e1lhat\u00f3\! +enchantmentPerm=\u00a74Nincs jogod a k\u00f6vetkez\u0151 var\u00e1zslathoz\:\u00a7c {0}\u00a74. +enchantmentRemoved=\u00a76A k\u00f6vetkez\u0151 varรกzslat\:\u00a7c {0} \u00a76sikeresen le lett v\u00e9ve a kezedben l\u00e9v\u0151 dologr\u00f3l. +enchantments=\u00a76Var\u00e1zslatok\:\u00a7r {0} errorCallingCommand=Hiba a parancs h\u00edv\u00e1s\u00e1ban /{0} errorWithMessage=\u00a7cHiba\:\u00a74 {0} -essentialsHelp1=A fรกjl tรถrรถtt, รฉs az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijavรญtani a fรกjlt, akkor menjen http\://tiny.cc/EssentialsChat -essentialsHelp2=A fรกjl tรถrรถtt, รฉs az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijavรญtani a fรกjlt, รญrja be /essentialshelp a jรกtรฉkba vagy menjen http\://tiny.cc/EssentialsChat +essentialsHelp1=A f\u00e1jl t\u00f6r\u00f6tt, \u00e9s az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijav\u00edtani a f\u00e1jlt, akkor menjen http\://tiny.cc/EssentialsChat +essentialsHelp2=A f\u00e1jl t\u00f6r\u00f6tt, \u00e9s az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijav\u00edtani a f\u00e1jlt, \u00edrja be /essentials help a j\u00e1t\u00e9kban vagy menjen http\://tiny.cc/EssentialsChat essentialsReload=\u00a76Essentials \u00fajrat\u00f6ltve\u00a7c {0}. -exp=\u00a7c{0}\u00a7c {1} \u00a76exp (level\u00a7c {2}\u00a76) รฉs kell\u00a7c {3} \u00a76tรถbb xp a szintlรฉpรฉshez. -expSet=\u00a7c{0} \u00a76most van\u00a7c {1} \u00a76exp. +exp=\u00a7c{0}\u00a7c {1} \u00a76xp (szint\u00a7c {2}\u00a76) \u00e9s kell\u00a7c {3} \u00a76t\u00f6bb xp a szintl\u00e9p\u00e9shez. +expSet=\u00a7c{0} \u00a76most van\u00a7c {1} \u00a76xp. extinguish=\u00a76Eloltottad magad. extinguishOthers=\u00a76Eloltottad {0}\u00a76-t. -failedToCloseConfig=Nem siker\u00fclt bez\u00e1rni a config f\u00e1jlt {0}. -failedToCreateConfig=Nem siker\u00fclt a config f\u00e1ljt l\u00e1trehozni {0}. -failedToWriteConfig=Nem siker\u00fclt a config f\u00e1jlba \u00edrni {0}. +failedToCloseConfig=Nem siker\u00fclt bez\u00e1rni a konfig f\u00e1jlt {0}. +failedToCreateConfig=Nem siker\u00fclt a konfig f\u00e1ljt l\u00e1trehozni {0}. +failedToWriteConfig=Nem siker\u00fclt a konfig f\u00e1jlba \u00edrni {0}. false=\u00a74hamis\u00a7r feed=\u00a76Meg lett\u00e9l etetve. feedOther=\u00a76Megetetted {0}\u00a76-t. fileRenameError=A(z) {0} f\u00e1jlt nem siker\u00fclt \u00e1tnevezni\! fireworkColor=\u00a74Nem val\u00f3s param\u00e9rtert adt\u00e1l meg a t\u00f6ltetnek, el\u0151sz\u00f6r a sz\u00edn kell. -fireworkEffectsCleared=\u00a76Az \u00f6sszes effekt elt\u00e1vol\u00edtva. +fireworkEffectsCleared=\u00a76Az \u00f6sszes hat\u00e1s elt\u00e1vol\u00edtva. fireworkSyntax=\u00a76T\u00fczij\u00e1t\u00e9k param\u00e9terek\:\u00a7c color\: [fade\:] [shape\:] [effect\:]\n\u00a76Ahhoz, hogy t\u00f6bb adatot adj meg, vessz\u0151vel kell elv\u00e1lasztanod. pl\: \u00a7cred,blue,pink\n\u00a76Alakzatok\:\u00a7c star, ball, large, creeper, burst \u00a76Effektek\:\u00a7c trail, twinkle. flying=rep\u00fcl flyMode=\u00a76Rep\u00fcl\u0151 m\u00f3d\u00a7c {0} \u00a76{1} \u00a76j\u00e1t\u00e9kosnak. @@ -142,13 +142,13 @@ gameModeInvalid=\u00a74Meg kell adnod egy \u00e9rv\u00e9nyes j\u00e1t\u00e9kost/ gcfree=\u00a76Szabad mem\u00f3ria\:\u00a7c {0} MB. gcmax=\u00a76Maximum mem\u00f3ria\:\u00a7c {0} MB. gctotal=\u00a76Lefoglalt mem\u00f3ria\:\u00a7c {0} MB. -gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 chunk, \u00a7c{3}\u00a76 entit\u00e1s, \u00a7c{4}\u00a76 blokkok. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 darab, \u00a7c{3}\u00a76 entit\u00e1s, \u00a7c{4}\u00a76 blokk. geoipJoinFormat=\u00a7c{0} \u00a76\u00a7c{1}\u00a76-b\u00f3l/b\u0151l csatlakozott. geoIpUrlEmpty=GeoIP let\u00f6lt\u00e9si URL hi\u00e1nyzik. geoIpUrlInvalid=GeoIP let\u00f6lt\u00e9si URL \u00e9rv\u00e9nytelen. givenSkull=\u00a76Megkaptad \u00a7c{0}\u00a76 fej\u00e9t. giveSpawn=\u00a7c{0} \u00a76darab\u00a7c {1} adva\u00a7c {2}\u00a76 j\u00e1t\u00e9kosnak. -giveSpawnFailure=\u00a74Nincs elรฉg hely, \u00a7c{0} \u00a7c{1} \u00a74elveszett. +giveSpawnFailure=\u00a74Nincs el\u00e9g hely, \u00a7c{0} \u00a7c{1} \u00a74elveszett. godDisabledFor=\u00a7cletiltva\u00a76\u00a7c {0}\u00a76-nak/-nek godEnabledFor=\u00a74enged\u00e9lyezve\u00a7c {0}\u00a76-nak/-nek godMode=\u00a76Isten m\u00f3d\u00a7c {0}\u00a76. @@ -170,8 +170,8 @@ helpMatching=\u00a76Egyez\u0151 parancsok "\u00a7c{0}\u00a76"\: helpOp=\u00a74[Seg\u00edts\u00e9g]\u00a7r \u00a76{0}\:\u00a7r {1} helpPlugin=\u00a74{0}\u00a7r\: Plugin seg\u00edts\u00e9g\: /help {1} holdBook=\u00a74Nincs a kezedben \u00edrhat\u00f3 k\u00f6nyv. -holdFirework=\u00a74A kezedben kell tartanod a t\u00fczij\u00e1t\u00e9kot, hogy hozz\u00e1add az effekteket. -holdPotion=\u00a74Egy b\u00e1jitalt kell a kezedben tartanod, hogy effekteket adhass hozz\u00e1. +holdFirework=\u00a74A kezedben kell tartanod a t\u00fczij\u00e1t\u00e9kot, hogy hozz\u00e1add a hat\u00e1st. +holdPotion=\u00a74Egy b\u00e1jitalt kell a kezedben tartanod, hogy hat\u00e1st adhass hozz\u00e1. holeInFloor=\u00a74Lyuk a padl\u00f3ban\! homes=\u00a76Otthonok\:\u00a7r {0} homeSet=\u00a76Az otthon be\u00e1ll\u00edtva. @@ -179,58 +179,58 @@ hour=\u00f3ra hours=\u00f3ra ignoredList=\u00a76Mell\u0151zve\:\u00a7r {0} ignoreExempt=\u00a74Nem hagyhatod figyelmen k\u00edv\u0171l ezt a j\u00e1t\u00e9kost. -ignorePlayer=\u00a76Figyelmen kรญvลฑl hagytad\u00a7c {0} \u00a76mostantรณl. -illegalDate=Illegรกlis dรกtumformรกtum. +ignorePlayer=\u00a76Figyelmen k\u00edv\u0171l hagytad\u00a7c {0} \u00a76mostant\u00f3l. +illegalDate=Illeg\u00e1lis d\u00e1tumform\u00e1tum. infoChapter=\u00a76V\u00e1lassz fejezetet\: infoChapterPages=\u00a7e ---- \u00a76{0} \u00a7e--\u00a76 Oldal \u00a7c{1}\u00a76 \u00a7c{2}-b\u00f3l/b\u0151l \u00a7e---- infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Oldal \u00a7c{0}\u00a76/\u00a7c{1} \u00a7e---- infoUnknownChapter=\u00a74Ismeretlen fejezet. -insufficientFunds=\u00a74Nem รกll rendelkezรฉsre elegendล‘ forrรกs. -invalidBanner=\u00a74ร‰rvรฉnytelen banner szintaxis. -invalidCharge=\u00a74ร‰rvรฉnytelen dรญj. +insufficientFunds=\u00a74Nem \u00e1ll rendelkez\u00e9sre elegend\u0151 forr\u00e1s. +invalidBanner=\u00a74\u00c9rv\u00e9nytelen banner szintaxis. +invalidCharge=\u00a74\u00c9rv\u00e9nytelen d\u00edj. invalidFireworkFormat=\u00a76Ez az opci\u00f3\: \u00a74{0} \u00a76nem \u00e9rv\u00e9nyes \u00a74{1}\u00a76-ra/-re. -invalidHome=\u00a74Otthon\u00a7c {0} \u00a74nem lรฉtezik\! -invalidHomeName=\u00a74ร‰rvรฉnytelen otthon nรฉv\! -invalidItemFlagMeta=\u00a74ร‰rvรฉnytelen elem zรกszlรณ meta\: \u00a7c{0}\u00a74. -invalidMob=\u00a74Hat\u00e1rozatlan szรถrny t\u00edpus -invalidNumber=ร‰rvรฉnytelen szรกm. -invalidPotion=\u00a74ร‰rvรฉnytelen fล‘zet. -invalidPotionMeta=\u00a74ร‰rvรฉnytelen fล‘zet meta\: \u00a7c{0}\u00a74. -invalidSignLine=\u00a74Sor\u00a7c {0} \u00a74a tรกblรกn รฉrvรฉnytelen. +invalidHome=\u00a74Otthon\u00a7c {0} \u00a74nem l\u00e9tezik\! +invalidHomeName=\u00a74\u00c9rv\u00e9nytelen otthon n\u00e9v\! +invalidItemFlagMeta=\u00a74\u00c9rv\u00e9nytelen elem z\u00e1szl\u00f3 meta\: \u00a7c{0}\u00a74. +invalidMob=\u00a74Hat\u00e1rozatlan l\u00e9ny t\u00edpus. +invalidNumber=\u00c9rv\u00e9nytelen sz\u00e1m. +invalidPotion=\u00a74\u00c9rv\u00e9nytelen f\u0151zet. +invalidPotionMeta=\u00a74\u00c9rv\u00e9nytelen f\u0151zet meta\: \u00a7c{0}\u00a74. +invalidSignLine=\u00a74Sor\u00a7c {0} \u00a74a t\u00e1bl\u00e1n \u00e9rv\u00e9nytelen. invalidSkull=\u00a74K\u00e9rlek, j\u00e1t\u00e9kos fejet tarts a kezedben. invalidWarpName=\u00a74Nincs ilyen warp\! -invalidWorld=\u00a74ร‰rvรฉnytelen vilรกg. +invalidWorld=\u00a74\u00c9rv\u00e9nytelen vil\u00e1g. inventoryClearFail=\u00a74{0}-nak/-nek nincs \u00a7c{1} \u00a74db \u00a7c{2}\u00a74-ja/-je. -inventoryClearingAllArmor=\u00a76Az \u00f6sszes cucc \u00e9s felszerel\u00e9s t\u00f6r\u00f6lve lett {0}\u00a76 eszk\u00f6zt\u00e1r\u00e1b\u00f3l. +inventoryClearingAllArmor=\u00a76Az \u00f6sszes dolog \u00e9s felszerel\u00e9s t\u00f6r\u00f6lve lett {0}\u00a76 eszk\u00f6zt\u00e1r\u00e1b\u00f3l. inventoryClearingAllItems=\u00a76Az \u00f6sszes dolog t\u00f6r\u00f6lve lett {0} \u00a76eszk\u00f6zt\u00e1r\u00e1b\u00f3l. inventoryClearingAllStack=\u00a76T\u00f6r\u00f6lve minden \u00a7c{0} {1}\u00a76 eszk\u00f6zt\u00e1r\u00e1b\u00f3l. -inventoryClearingFromAll=\u00a76\u00d6sszes ember eszk\u00f6zt\u00e1r\u00e1nak \u00fcr\u00edt\u00e9se... +inventoryClearingFromAll=\u00a76\u00d6sszes j\u00e1t\u00e9kos eszk\u00f6zt\u00e1r\u00e1nak \u00fcr\u00edt\u00e9se... inventoryClearingStack=\u00a76Elt\u00e1vol\u00edtva \u00a7c{0} \u00a76db \u00a7c{1} \u00a76{2}\u00a76 eszk\u00f6zt\u00e1r\u00e1b\u00f3l. -is=is -isIpBanned=\u00a76IP \u00a7c{0} \u00a76m\u00e1r ki van bannolva. +is=van +isIpBanned=\u00a76IP \u00a7c{0} \u00a76m\u00e1r ki van tiltva. itemCannotBeSold=\u00a74Ezt nem adhatod el a szerveren. -itemMustBeStacked=\u00a74A tรกrgyat kรถtegben kell รฉrtรฉkesรญteni. A 2s mennyisรฉge kรฉt stack lenne, stb. +itemMustBeStacked=\u00a74A t\u00e1rgyat k\u00f6tegben kell \u00e9rt\u00e9kes\u00edteni. A 2s mennyis\u00e9ge k\u00e9t stack lenne, stb. itemNames=\u00a76T\u00e1rgy r\u00f6vid nevei\:\u00a7r {0} itemNotEnough1=\u00a74Nincs el\u00e9g eladni val\u00f3 t\u00e1rgyad. -itemNotEnough2=\u00a76Ha el akarod adni az \u00f6sszes ilyen t\u00e1rgyat \u00edrd be /sell t\u00e1rgyn\u00e9v. -itemNotEnough3=\u00a76/sell itemname -1 minden elemet elad, de csak egy tรฉtelt stb. -itemsConverted=\u00a76Minden elemet blokkokkรก alakรญtott. -itemsCsvNotLoaded=Nem sikerรผlt betรถlteni az items.csv\! -itemSellAir=T\u00e9nyleg el akartad adni a Leveg\u00f5t? Vegy\u00e9l a kezedbe valami t\u00e1rgyat. -itemsNotConverted=\u00a74Nincs olyan elem, amely blokkkรก alakรญthatรณ. +itemNotEnough2=\u00a76Ha el szeretn\u00e9d adni az \u00f6sszes ilyen t\u00e1rgyat, \u00edrd be a /sell parancsot. +itemNotEnough3=\u00a76/sell itemname -1 mindet elad, de csak egy elemet, stb. +itemsConverted=\u00a76\u00c1talak\u00edtva minden elemet blokkokk\u00e1. +itemsCsvNotLoaded=Nem siker\u00fclt bet\u00f6lteni az items.csv\! +itemSellAir=T\u00e9nyleg el akartad adni a leveg\u00f5t? Vegy\u00e9l a kezedbe valami t\u00e1rgyat. +itemsNotConverted=\u00a74Nincs olyan elem, amely blokk\u00e1 alak\u00edthat\u00f3. itemSold=\u00a7aEladva \u00a7c{0} \u00a7a({1} {2} {3} minden). itemSoldConsole=\u00a7a{0} \u00a7aeladva {1} \u00a7a{2} \u00a7a({3} elem {4} minden). itemSpawn=\u00a76Lek\u00e9rt\u00e9l\u00a7c {0} \u00a76db \u00a7c {1}-t itemType=\u00a76T\u00e1rgy\:\u00a7c {0} \u00a76-\u00a7c {1} -jailAlreadyIncarcerated=\u00a74A szemรฉly mรกr bรถrtรถnben van\:\u00a7c {0} -jailList=\u00a76Bรถrtรถnรถk\:\u00a7r {0} -jailMessage=\u00a74A bลฑncselekmรฉnyt megteszed, akkor az idล‘. +jailAlreadyIncarcerated=\u00a74A szem\u00e9ly m\u00e1r b\u00f6rt\u00f6nben van\:\u00a7c {0} +jailList=\u00a76B\u00f6rt\u00f6n\u00f6k\:\u00a7r {0} +jailMessage=\u00a74A b\u0171ncselekm\u00e9nyt megteszed, akkor itt az id\u0151. jailNotExist=\u00a74Nincs ilyen b\u00f6rt\u00f6n. jailReleased=\u00a7c{0}\u00a76 kiengedve a b\u00f6rt\u00f6nb\u00f5l. jailReleasedPlayerNotify=\u00a76Kiengedtek a b\u00f6rt\u00f6nb\u0151l\! jailSentenceExtended=\u00a76B\u00f6rt\u00f6n ideje mostant\u00f3l\: {0} jailSet=\u00a7c{0} \u00a76 b\u00f6rt\u00f6n be\u00e1ll\u00edtva. -jumpError=\u00a74Ez bรกntani fogja a szรกmรญtรณgรฉp agyรกt. +jumpError=\u00a74Ez b\u00e1ntani fogja a sz\u00e1m\u00edt\u00f3g\u00e9p agy\u00e1t. kickDefault=Ki lett\u00e9l kickelve. kickedAll=\u00a74\u00d6sszes j\u00e1t\u00e9kos kickelve a szerverr\u00f5l. kickExempt=\u00a74\u00d5t nem kickelheted. @@ -239,26 +239,26 @@ killExempt=\u00a74Nem \u00f6lheted meg \u00a7c{0}\u00a74-t. kitContains=\u00a76A csomag \u00a7c{0} \u00a76tartalmaz: kitCost=\ \u00a77\u00a7o({0})\u00a7r kitDelay=\u00a7m{0}\u00a7r -kitError=\u00a74Nincs รฉrvรฉnyes csomag. -kitError2=\u00a74Ez a csomag nem megfelelล‘. Lรฉpj kapcsolatba egy rendszergazdรกval. +kitError=\u00a74Nincs el\u00e9rhet\u0151 csomag. +kitError2=\u00a74Ez a csomag nem megfelel\u0151. L\u00e9pj kapcsolatba egy adminisztr\u00e1torral. kitGiveTo=\u00a76A(z)\u00a7c {0}\u00a76 csomag lek\u00e9rve \u00a7c{1}\u00a76-nak/-nek. kitInvFull=\u00a74Az eszk\u00f6zt\u00e1rad megtelt, \u00edgy a f\u00f6ldre kapod meg a csomagot. kitItem=\u00a76- \u00a7f{0} kitNotFound=\u00a74Nincs ilyen csomag. -kitOnce=\u00a74Nem tudod รบjra hasznรกlni a csomagot. +kitOnce=\u00a74Nem tudod \u00fajra haszn\u00e1lni a csomagot. kitReceive=\u00a76Megkaptad a(z)\u00a7c {0}\u00a76 csomagot. kits=\u00a76Csomagok\:\u00a7r {0} kitTimed=\u00a74Ezt a csomagot nem haszn\u00e1hatod m\u00e9g\u00a7c {0}\u00a74-ig. -leatherSyntax=\u00a76Bล‘rszรญn szintaxis\: color\:,, eg\: color\:255,0,0. +leatherSyntax=\u00a76B\u0151rsz\u00edn szintaxis\: color\:,, pl\: color\:255,0,0. lightningSmited=\u00a76A vill\u00e1m les\u00fajtott r\u00e1d\! -lightningUse=\u00a76Vill\u00e1m lesujt\u00e1sa\u00a7c {0}\u00a76-ra/re +lightningUse=\u00a76Vill\u00e1m lesujt\u00e1sa\u00a7c {0}\u00a76-ra/re. listAfkTag=\u00a77[AFK]\u00a7r listAmount=\u00a76Jelenleg \u00a7c{0}\u00a76 j\u00e1t\u00e9kos van fent a maxim\u00e1lis \u00a7c{1}\u00a76 j\u00e1t\u00e9kosb\u00f3l. listAmountHidden=\u00a76Jelenleg \u00a7c{0}\u00a76/{1}\u00a76 j\u00e1t\u00e9kos van fent a maxim\u00e1lis \u00a7c{2}\u00a76 j\u00e1t\u00e9kosb\u00f3l. listGroupTag={0}\u00a7r\: listHiddenTag=\u00a77[REJTETT]\u00a7r -loadWarpError=\u00a74Nem sikerรผlt a warp betรถltรฉse {0}. -localFormat=[L]<{0}> {1} +loadWarpError=\u00a74Nem siker\u00fclt a warp bet\u00f6lt\u00e9se {0}. +localFormat=[H]<{0}> {1} localNoOne= mailClear=\u00a76Hogy megjel\u00f6ld olvasottk\u00e9nt \u00edrd be a\u00a7c /mail clear \u00a76parancsot. mailCleared=\u00a76\u00dczenetek t\u00f6r\u00f6lve\! @@ -266,123 +266,123 @@ mailDelay=T\u00fal sok lev\u00e9l lett elk\u00fcldve az utols\u00f3 percben. Max mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1} mailMessage={0} mailSent=\u00a76Lev\u00e9l elk\u00fcldve\! -mailSentTo=\u00a7c{0}\u00a76 elkรผldtรผk a kรถvetkezล‘ levelet\: +mailSentTo=\u00a7c{0}\u00a76 elk\u00fcldt\u00fck a k\u00f6vetkez\u0151 levelet\: mailTooLong=\u00a74Az \u00fczeneted t\u00fal hossz\u00fa. Pr\u00f3b\u00e1ld 1000 karakter alatt. -markedAsAway=\u00a76Mรกr kijelรถlted, mint tรกvol. -markedAsNotAway=\u00a76Mรกr nem jelรถlted ki. -markMailAsRead=\u00a76Hogy megjel\u00f6ld olvasottk\u00e9nt \u00edrd be a\u00a7c /mail clear \u00a76parancsot. +markedAsAway=\u00a76M\u00e1r kijel\u00f6lted, mint t\u00e1vol. +markedAsNotAway=\u00a76M\u00e1r nem jel\u00f6lted ki. +markMailAsRead=\u00a76Hogy megjel\u00f6ld olvasottk\u00e9nt, \u00edrd be a\u00a7c /mail clear \u00a76parancsot. matchingIPAddress=\u00a76Az al\u00e1bbi j\u00e1t\u00e9kosok csatlakoztak utolj\u00e1ra err\u0151l az IP c\u00edmr\u0151l\: -maxHomes=\u00a74Nem รกllรญthatsz be tรถbb\u00a7c {0} \u00a74otthont. +maxHomes=\u00a74Nem \u00e1ll\u00edthatsz be t\u00f6bb\u00a7c {0} \u00a74otthont. maxMoney=\u00a74Ez a tranzakci\u00f3 meghaladja a be\u00e1ll\u00edtott maxim\u00e1lis tranzakci\u00f3 hat\u00e1r\u00e9rt\u00e9k\u00e9t. -mayNotJail=\u00a74\u00d5t nem rakhatod b\u00f6rt\u00f6nbe\! +mayNotJail=\u00a74\u00d5t nem teheted b\u00f6rt\u00f6nbe\! mayNotJailOffline=\u00a74Nem b\u00f6rt\u00f6n\u00f6zhetsz be Offline j\u00e1t\u00e9kost. me=\u00e9n -minimumPayAmount=\u00a7cA minimรกlis รถsszeg, amit fizethetsz, {0}}. +minimumPayAmount=\u00a7cA minim\u00e1lis \u00f6sszeg, amit fizethetsz, {0}. minute=perc minutes=perc missingItems=\u00a74Nincs \u00a7c{0} db {1}\u00a74-od. mobDataList=\u00a76\u00c9rv\u00e9nyes adatok\:\u00a7r {0} -mobsAvailable=\u00a76Szรถrnek\:\u00a7r {0} -mobSpawnError=\u00a74Hiba a szรถrny-idรฉzล‘ megvรกltoztatรกsa kรถzben. -mobSpawnLimit=A kiszolgรกlรณi limitre korlรกtozott szรถrny mennyisรฉg. -mobSpawnTarget=\u00a74A cรฉlblokknak szรถrny idรฉzล‘nek kell lennie. +mobsAvailable=\u00a76Enit\u00e1sok\:\u00a7r {0} +mobSpawnError=\u00a74Hiba az entit\u00e1s-id\u00e9z\u0151 megv\u00e1ltoztat\u00e1sa k\u00f6zben. +mobSpawnLimit=A kiszolg\u00e1l\u00f3i limitre korl\u00e1tozott entit\u00e1s mennyis\u00e9g. +mobSpawnTarget=\u00a74A c\u00e9lblokknak entit\u00e1s id\u00e9z\u0151nek kell lennie. moneyRecievedFrom=\u00a7a{0}-t kapt\u00e1l {1}\u00a7a-t\u00f3l/t\u00f5l. -moneySentTo=\u00a7a{0}-t k\u00fcldt\u00e9l {1}\u00a7a-nak/nek. +moneySentTo=\u00a7a{0}-t k\u00fcldt\u00e9l {1}\u00a7a-nak/-nek. month=h\u00f3nap months=h\u00f3nap -moreThanZero=\u00a74A mennyisรฉgeknek 0-nรกl nagyobbnak kell lenniรผk. -moveSpeed=\u00a76Sebess\u00e9g tรญpus\: {0}, Sebess\u00e9g\:\u00a7c {1}\u00a76-re/ra {2}\u00a76-nak/-nek. -msgDisabled=\u00a76รœzenetek fogadรกsa \u00a7cdisabled\u00a76. -msgDisabledFor=\u00a76รœzenetek fogadรกsa \u00a7cletiltva \u00a76 \u00a7c{0}\u00a76. -msgEnabled=\u00a76รœzenetek fogadรกsa \u00a7cengedรฉlyezve\u00a76. -msgEnabledFor=\u00a76รœzenetek fogadรกsa \u00a7cengedรฉlyezve \u00a76 \u00a7c{0}\u00a76. +moreThanZero=\u00a74A mennyis\u00e9geknek 0-n\u00e1l nagyobbnak kell lenni\u00fck. +moveSpeed=\u00a76Sebess\u00e9g t\u00edpus\: {0}, Sebess\u00e9g\:\u00a7c {1}\u00a76-ra/-re {2}\u00a76-nak/-nek. +msgDisabled=\u00a76\u00dczenetek fogad\u00e1sa \u00a7cletiltva\u00a76. +msgDisabledFor=\u00a76\u00dczenetek fogad\u00e1sa \u00a7cletiltva \u00a76 \u00a7c{0}\u00a76. +msgEnabled=\u00a76\u00dczenetek fogad\u00e1sa \u00a7cenged\u00e9lyezve\u00a76. +msgEnabledFor=\u00a76\u00dczenetek fogad\u00e1sa \u00a7cenged\u00e9lyezve \u00a76 \u00a7c{0}\u00a76. msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2} -msgIgnore=\u00a7c{0} \u00a74az รผzenetek letiltva. +msgIgnore=\u00a7c{0} \u00a74az \u00fczenetek letiltva. multipleCharges=\u00a74Nem alkalmazhatsz t\u00f6bb t\u00f6ltetet enn\u00e9l a t\u00fczij\u00e1t\u00e9kn\u00e1l. -multiplePotionEffects=\u00a74Ezzel a bรกjitalal tรถbb hatรกs nem alkalmazhatรณ. +multiplePotionEffects=\u00a74Ezzel a b\u00e1jitallal t\u00f6bb hat\u00e1s nem alkalmazhat\u00f3. mutedPlayer=\u00a76\u00a7c{0} \u00a76len\u00e9m\u00edtva. mutedPlayerFor=\u00a76\u00a7c{0} \u00a76len\u00e9m\u00edtva\u00a7c {1}\u00a76-ra/-re. -mutedUserSpeaks={0} megprรณbรกlt beszรฉlni, de elnรฉmรญtva. +mutedUserSpeaks={0} megpr\u00f3b\u00e1lt besz\u00e9lni, de eln\u00e9m\u00edtva: {1} muteExempt=\u00a74Nem n\u00e9m\u00edthatod \u00f5t. muteExemptOffline=\u00a74Nem n\u00e9m\u00edthatsz le Offline j\u00e1t\u00e9kost. muteNotify=\u00a7c{0} \u00a76len\u00e9m\u00edtotta \u00a7c{1}\u00a76-t. -muteNotifyFor=\u00a7c{0} \u00a76jรกtรฉkos elnรฉmรญtva \u00a7c{1}\u00a76 \u00a7c {2}\u00a76. +muteNotifyFor=\u00a7c{0} \u00a76j\u00e1t\u00e9kos eln\u00e9m\u00edtva \u00a7c{1}\u00a76 \u00a7c {2}\u00a76. nearbyPlayers=\u00a76J\u00e1t\u00e9kosok k\u00f6zelbe\:\u00a7r {0} -negativeBalanceError=\u00a74A felhasznรกlรณ nem jogosult negatรญv egyenlegre. -nickChanged=\u00a76A becenรฉv megv\u00e1ltoztatva. -nickDisplayName=\u00a74Engedรฉlyezned kell a change-displayname az Essentials konfigurรกciรณban. +negativeBalanceError=\u00a74A felhaszn\u00e1l\u00f3 nem jogosult negat\u00edv egyenlegre. +nickChanged=\u00a76A becen\u00e9v megv\u00e1ltoztatva. +nickDisplayName=\u00a74Enged\u00e9lyezned kell a change-displayname az Essentials konfigur\u00e1ci\u00f3ban. nickInUse=\u00a74Ez a n\u00e9v m\u00e1r haszn\u00e1ltban van. -nickNamesAlpha=\u00a74A becenevek alfanumerikus karakterekbล‘l kell, hogy รกlljanak. -nickNamesOnlyColorChanges=\u00a74A beceneveknek csak a szรญneik vรกltoznak. +nickNamesAlpha=\u00a74A becenevek alfanumerikus karakterekb\u0151l kell, hogy \u00e1lljanak. +nickNamesOnlyColorChanges=\u00a74A beceneveknek csak a sz\u00edneik v\u00e1ltoznak. nickNoMore=\u00a76Nincs t\u00f6bb\u00e9 beceneved. nickSet=\u00a76A beceneved mostant\u00f3l\: \u00a7c{0}. nickTooLong=\u00a76Ez a becen\u00e9v t\u00fal hossz\u00fa. -noAccessCommand=\u00a74Nincs jogod ehhez\!. +noAccessCommand=\u00a74Nincs jogod ehhez\! noAccessPermission=\u00a74Nincs jogod a k\u00f6vetkez\u0151h\u00f6z\: \u00a7c{0}\u00a74. -noBreakBedrock=\u00a74Nincs engedรฉlyed kitrรถni az alapkล‘t. +noBreakBedrock=\u00a74Nincs enged\u00e9lyed kit\u00f6rni az alapk\u0151t. noDestroyPermission=\u00a74Nincs jogod, hogy ki\u00fcsd ezt\: \u00a7c{0}\u00a74. -noDurability=\u00a74Ez a tรฉtel nem rendelkezik tartรณssรกggal. -noGodWorldWarning=\u00a74Vigy\u00e1zat\! Az Isten m\u00f3d ebben a vil\u00e1gba le van tiltva\! -noHelpFound=\u00a74Nincsenek megfelelล‘ parancsok. -noHomeSetPlayer=\u00a76A jรกtรฉkos nem รกllรญtott be otthont. +noDurability=\u00a74Ez az elem nem rendelkezik tart\u00f3ss\u00e1ggal. +noGodWorldWarning=\u00a74Vigy\u00e1zat\! Az Isten m\u00f3d ebben a vil\u00e1gban le van tiltva\! +noHelpFound=\u00a74Nincsenek megfelel\u0151 parancsok. +noHomeSetPlayer=\u00a76A j\u00e1t\u00e9kos nem \u00e1ll\u00edtott be otthont. noIgnored=\u00a76Nem hagysz figyelmen k\u00edv\u00fcl senkit. -noJailsDefined=\u00a76Nincsenek bรถrtรถnรถk. +noJailsDefined=\u00a76Nincsenek b\u00f6rt\u00f6n\u00f6k. noKitGroup=\u00a74Nincs jogod ehhez a csomaghoz. -noKitPermission=\u00a74Szรผksรฉged van engedรฉlyre \u00a7c{0}\u00a74 a csomag hasznรกlatรกra. -noKits=\u00a76Mรฉg nincsenek csomagok. +noKitPermission=\u00a74Sz\u00fcks\u00e9ged van enged\u00e9lyre \u00a7c{0}\u00a74 a csomag haszn\u00e1lat\u00e1ra. +noKits=\u00a76M\u00e9g nincsenek csomagok. noLocationFound=\u00a74Nincs ilyen \u00e9rv\u00e9nyes hely. noMail=\u00a76Nincs leveled. -noMatchingPlayers=\u00a76Nincs megfelelล‘ jรกtรฉkos. +noMatchingPlayers=\u00a76Nincs megfelel\u0151 j\u00e1t\u00e9kos. noMetaFirework=\u00a74Nincs jogod, hogy alkalmazd ezt a t\u00fczij\u00e1t\u00e9k adatot. -noMetaJson=JSON Metadata nem t\u00e1mogatott a Bukkit ezen verzi\u00f3j\u00e1ban. -noMetaPerm=\u00a74Nincs jogod a jelentkezรฉshez \u00a7c{0}\u00a74 meta erre a tรฉtelre. -none=none +noMetaJson=A JSON Metadata nem t\u00e1mogatott a Bukkit ezen verzi\u00f3j\u00e1ban. +noMetaPerm=\u00a74Nincs jogod a jelentkez\u00e9shez \u00a7c{0}\u00a74 meta erre az elemre. +none=senki noNewMail=\u00a76Nincs \u00faj leveled. -noPendingRequest=\u00a74Nincs folyamatban lรฉvล‘ kรฉrelmed. +noPendingRequest=\u00a74Nincs folyamatban l\u00e9v\u0151 k\u00e9relmed. noPerm=\u00a74Nincs \u00a7c{0}\u00a74 jog. noPermissionSkull=\u00a74Nincs jogod megv\u00e1ltoztatni ezt a fejet. -noPermToAFKMessage=\u00a74Nincs jogod AFK รผzenet beรกllรญtรกsรกra. -noPermToSpawnMob=\u00a74Nincs jogod leidรฉzni ezt a szรถrnyet. -noPlacePermission=\u00a74Nincs jogod egy blokknak a tรกbla melletti elhelyezรฉsรฉre. -noPotionEffectPerm=\u00a74Nincs jogod a fล‘zethatรกs alkalmazรกsรกra \u00a7c{0} \u00a74ennรฉl a fล‘zetnรฉl. -noPowerTools=\u00a76Nincsenek hozzรกrendelve elektromos szerszรกmok. -notAcceptingPay=\u00a74{0} \u00a74nem fogad el fizetรฉst. -notAllowedToQuestion=\u00a74Nem vagy jogosult a kรฉrdรฉs hasznรกlatรกra. -notAllowedToShout=\u00a74Nincs jogosultsรกgod kiabรกlni. -notEnoughExperience=\u00a74Nincs elรฉg tapasztalatod. +noPermToAFKMessage=\u00a74Nincs jogod AFK \u00fczenet be\u00e1ll\u00edt\u00e1s\u00e1ra. +noPermToSpawnMob=\u00a74Nincs jogod leid\u00e9zni ezt a l\u00e9nyt. +noPlacePermission=\u00a74Nincs jogod egy blokknak a t\u00e1bla melletti elhelyez\u00e9s\u00e9re. +noPotionEffectPerm=\u00a74Nincs jogod a f\u0151zethat\u00e1s alkalmaz\u00e1s\u00e1ra \u00a7c{0} \u00a74enn\u00e9l a f\u0151zetn\u00e9l. +noPowerTools=\u00a76Nincsenek hozz\u00e1rendelve elektromos szersz\u00e1mok. +notAcceptingPay=\u00a74{0} \u00a74nem fogad el fizet\u00e9st. +notAllowedToQuestion=\u00a74Nem vagy jogosult a k\u00e9rd\u00e9s haszn\u00e1lat\u00e1ra. +notAllowedToShout=\u00a74Nincs jogod k\u00f6zvet\u00edteni. +notEnoughExperience=\u00a74Nincs el\u00e9g tapasztalatod. notEnoughMoney=\u00a74Erre nincs p\u00e9nzed. notFlying=nem rep\u00fcl nothingInHand=\u00a74Nincs semmi a kezedben. -notRecommendedBukkit=\u00a74* \! * A Bukkit verziรณ nem az Essentials ajรกnlott รฉpรญtรฉse. -notSupportedYet=Mรฉg nem tรกmogatott. +notRecommendedBukkit=\u00a74* \! * A Bukkit verzi\u00f3 nem az Essentials aj\u00e1nlott \u00e9p\u00edt\u00e9se. +notSupportedYet=M\u00e9g nem t\u00e1mogatott. now=most noWarpsDefined=\u00a76Nincs m\u00e9g egy warp se. -nuke=\u00a75Lehet halรกl esni rรกjuk. -numberRequired=Egy szรกm megy ott, buta. -onlyDayNight=/az idล‘ csak day/night tรกmogat. +nuke=\u00a75Lehet hal\u00e1l esni r\u00e1juk. +numberRequired=Egy sz\u00e1m van ott, buta. +onlyDayNight=/az id\u0151 csak day/night t\u00e1mogat. onlyPlayers=\u00a74Csak j\u00e1t\u00e9kon bel\u00fcl haszn\u00e1lhat\u00f3 a \u00a7c{0}\u00a74 parancs. onlyPlayerSkulls=\u00a74Csak j\u00e1t\u00e9kos fejnek tudod be\u00e1ll\u00edtani a tulajdonos\u00e1t (\u00a7c397\:3\u00a74). -onlySunStorm=\u00a74/az idล‘jรกrรกs csak a sun/storm tรกmogatja. -openingDisposal=\u00a76Kezelรฉsi menรผ megnyitรกsa... +onlySunStorm=\u00a74/az id\u0151j\u00e1r\u00e1s csak a sun/storm t\u00e1mogatja. +openingDisposal=\u00a76Kezel\u00e9si men\u00fc megnyit\u00e1sa... orderBalances=\u00a76Egyenlegek \u00f6sszegy\u00fcjt\u00e9se\u00a7c {0} \u00a76j\u00e1t\u00e9kost\u00f3l, k\u00e9rlek, v\u00e1rj... -oversizedTempban=\u00a74Nem tilthatsz ki egy jรกtรฉkost erre az idล‘re. -payConfirmToggleOff=\u00a76A tovรกbbiakban nem kรฉrik a kifizetรฉsek megerล‘sรญtรฉsรฉt. -payConfirmToggleOn=\u00a76Most a kifizetรฉsek megerล‘sรญtรฉsรฉre kรฉri. -payMustBePositive=\u00a74A fizetendล‘ รถsszegnek pozitรญvnak kell lennie. -payToggleOff=\u00a76Mรกr nem fogadod el a kifizetรฉseket. -payToggleOn=\u00a76Most elfogadod a kifizetรฉseket. +oversizedTempban=\u00a74Nem tilthatsz ki egy j\u00e1t\u00e9kost erre az id\u0151re. +payConfirmToggleOff=\u00a76A tov\u00e1bbiakban nem k\u00e9rik a kifizet\u00e9sek meger\u0151s\u00edt\u00e9s\u00e9t. +payConfirmToggleOn=\u00a76Most a kifizet\u00e9sek meger\u0151s\u00edt\u00e9s\u00e9t k\u00e9ri. +payMustBePositive=\u00a74A fizetend\u0151 \u00f6sszegnek pozit\u00edvnak kell lennie. +payToggleOff=\u00a76M\u00e1r nem fogadod el a kifizet\u00e9seket. +payToggleOn=\u00a76Most elfogadod a kifizet\u00e9seket. pendingTeleportCancelled=\u00a74Folyamatban l\u00e9v\u0151 teleport\u00e1l\u00e1s megszak\u00edtva. -playerBanIpAddress=\u00a76A jรกtรฉkos\u00a7c {0} \u00a76IP-re tiltva\u00a7c {1} \u00a76\: \u00a7c{2}\u00a76. +playerBanIpAddress=\u00a76A j\u00e1t\u00e9kos\u00a7c {0} \u00a76IP-re tiltva\u00a7c {1} \u00a76\: \u00a7c{2}\u00a76. playerBanned=\u00a7c{0} \u00a76kitiltotta\u00a7c {1}\u00a76-t Indok\: \u00a7c{2}\u00a76. playerInJail=\u00a74M\u00e1r bent van a(z)\u00a7c {0}\u00a74 b\u00f6rt\u00f6nbe. playerJailed=\u00a76\u00a7c{0} \u00a76beb\u00f6tr\u00f6n\u00f6zve. -playerJailedFor=\u00a76\u00a7c{0} \u00a76beb\u00f6rt\u00f6n\u00f6zve {1}-re/-ra. +playerJailedFor=\u00a76\u00a7c{0} \u00a76beb\u00f6rt\u00f6n\u00f6zve {1}-ra/-re. playerKicked=\u00a7c{0} \u00a76 kickelte {1}-t. Indok\: {2}. -playerMuted=\u00a76Ellett\u00e9l n\u00e9m\u00edtva\! +playerMuted=\u00a76El lett\u00e9l n\u00e9m\u00edtva\! playerMutedFor=\u00a76Le lett\u00e9l n\u00e9m\u00edtva\u00a7c {0}-ra/-re. playerNeverOnServer=\u00a7c{0} \u00a74 m\u00e9g sose j\u00e1rt a szerveren. playerNotFound=\u00a74Nincs ilyen nev\u00fb j\u00e1t\u00e9kos. -playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76. +playerTempBanned=\u00a76A j\u00e1t\u00e9kos \u00a7c{0}\u00a76 ideiglenesen kitiltva \u00a7c{1}\u00a76 \u00a7c{2}\u00a76-ra/-re: \u00a7c{3}\u00a76. playerUnbanIpAddress=\u00a76\u00a7c{0} \u00a76feloldotta a k\u00f6vetkez\u00f5 IP c\u00edmet\: {1}. playerUnbanned=\u00a76\u00a7c{0} \u00a76feloldotta {1}\u00a76-t. playerUnmuted=\u00a76Fel lett oldva a n\u00e9m\u00edt\u00e1sod. @@ -401,29 +401,29 @@ powerToolClearAll=\u00a76\u00d6sszes PowerTool parancs ki\u00fcr\u00edtve. powerToolList=\u00a76\u00a7c{1}\u00a76-n a k\u00f6vetkez\u0151 parancsok vannak\: \u00a7c{0}\u00a76. powerToolListEmpty=\u00a74\u00a7c{0}\u00a74-hoz egy parancs sincs csatolva. powerToolNoSuchCommandAssigned=\u00a74A(z)\u00a7c {0}\u00a74 parancs nincs be\u00e1ll\u00edtva \u00a7c{1}\u00a74-hoz/-hez. -powerToolRemove=\u00a74A(z)\u00a7c {0}\u00a74 parancs lelett szedve \u00a7c{1}\u00a74-r\u00f3l/r\u0151l. -powerToolRemoveAll=\u00a76\u00d6sszes parancs elt\u00e1vol\u00edtva \u00a7c{0}\u00a76-r\u00f3l/r\u0151l. +powerToolRemove=\u00a74A(z)\u00a7c {0}\u00a74 parancs el lett t\u00e1vol\u00edtva \u00a7c{1}\u00a74-r\u00f3l/-r\u0151l. +powerToolRemoveAll=\u00a76\u00d6sszes parancs elt\u00e1vol\u00edtva \u00a7c{0}\u00a76-r\u00f3l/-r\u0151l. powerToolsDisabled=\u00a76Az \u00f6sszes power tool-os eszk\u00f6z\u00f6d letiltva. powerToolsEnabled=\u00a76Az \u00f6sszes power tool-os eszk\u00f6z\u00f6d enged\u00e9lyezve. -pTimeCurrent=\u00a7c{0}\u00a76idล‘\u00a7c {1}\u00a76. -pTimeCurrentFixed=\u00a7c{0}\u00a76 idล‘ rรถgzรญtve\u00a7c {1}\u00a76. -pTimeNormal=\u00a7c{0}\u00a76 ideje normรกlis รฉs megfelel a kiszolgรกlรณnak. -pTimeOthersPermission=\u00a74Nem vagy jogosult mรกs jรกtรฉkosok idล‘tartamรกra. -pTimePlayers=\u00a76Ezeknek a jรกtรฉkosoknak sajรกt idejรผk van\:\u00a7r -pTimeReset=\u00a76A jรกtรฉkos ideje vissza lett รกllรญtva\: \u00a7c{0} -pTimeSet=\u00a76A jรกtรฉkos ideje beรกllรญtva \u00a7c{0}\u00a76 \: \u00a7c{1}. -pTimeSetFixed=\u00a76A jรกtรฉkos ideje rรถgzรญtett \u00a7c{0}\u00a76 \: \u00a7c{1}. -pWeatherCurrent=\u00a7c{0}\u00a76 az idล‘jรกrรกs\u00a7c {1}\u00a76. -pWeatherInvalidAlias=\u00a74ร‰rvรฉnytelen idล‘jรกrรกs tรญpus -pWeatherNormal=\u00a7c{0}\u00a76 az idล‘jรกrรกs normรกlis รฉs megfelel a szervernek. -pWeatherOthersPermission=\u00a74Nem vagy jogosult a tรถbbi jรกtรฉkos idล‘jรกrรกsรกnak beรกllรญtรกsรกra. -pWeatherPlayers=\u00a76Ezek a jรกtรฉkosok sajรกt idล‘jรกrรกssal rendelkeznek\:\u00a7r -pWeatherReset=\u00a76A jรกtรฉkos idล‘jรกrรกsa vissza lett รกllรญtva\: \u00a7c{0} -pWeatherSet=\u00a76A jรกtรฉkos idล‘jรกrรกsรกnak beรกllรญtรกsa \u00a7c{0}\u00a76 \: \u00a7c{1}. +pTimeCurrent=\u00a7c{0}\u00a76id\u0151\u00a7c {1}\u00a76. +pTimeCurrentFixed=\u00a7c{0}\u00a76 id\u0151 r\u00f6gz\u00edtve\u00a7c {1}\u00a76. +pTimeNormal=\u00a7c{0}\u00a76 ideje norm\u00e1lis \u00e9s megfelel a kiszolg\u00e1l\u00f3nak. +pTimeOthersPermission=\u00a74Nem vagy jogosult m\u00e1s j\u00e1t\u00e9kosok id\u0151tartam\u00e1ra. +pTimePlayers=\u00a76Ezeknek a j\u00e1t\u00e9kosoknak saj\u00e1t idej\u00fck van\:\u00a7r +pTimeReset=\u00a76A j\u00e1t\u00e9kos ideje vissza lett \u00e1ll\u00edtva\: \u00a7c{0} +pTimeSet=\u00a76A j\u00e1t\u00e9kos ideje be\u00e1ll\u00edtva \u00a7c{0}\u00a76\: \u00a7c{1}. +pTimeSetFixed=\u00a76A j\u00e1t\u00e9kos ideje r\u00f6gz\u00edtett \u00a7c{0}\u00a76\: \u00a7c{1}. +pWeatherCurrent=\u00a7c{0}\u00a76 az id\u0151j\u00e1r\u00e1s\u00a7c {1}\u00a76. +pWeatherInvalidAlias=\u00a74\u00c9rv\u00e9nytelen id\u0151j\u00e1r\u00e1s t\u00edpus. +pWeatherNormal=\u00a7c{0}\u00a76 az id\u0151j\u00e1r\u00e1s norm\u00e1lis \u00e9s megfelel a szervernek. +pWeatherOthersPermission=\u00a74Nem vagy jogosult a t\u00f6bbi j\u00e1t\u00e9kos id\u0151j\u00e1r\u00e1s\u00e1nak be\u00e1ll\u00edt\u00e1s\u00e1ra. +pWeatherPlayers=\u00a76Ezek a j\u00e1t\u00e9kosok saj\u00e1t id\u0151j\u00e1r\u00e1ssal rendelkeznek\:\u00a7r +pWeatherReset=\u00a76A j\u00e1t\u00e9kos id\u0151j\u00e1r\u00e1sa vissza lett \u00e1ll\u00edtva\: \u00a7c{0} +pWeatherSet=\u00a76A j\u00e1t\u00e9kos id\u0151j\u00e1r\u00e1s\u00e1nak be\u00e1ll\u00edt\u00e1sa \u00a7c{0}\u00a76 \: \u00a7c{1}. questionFormat=\u00a72[K\u00e9rd\u00e9s]\u00a7r {0} radiusTooBig=\u00a74Ez a sug\u00e1r t\u00fal nagy\! A maximum\: {0}. readNextPage=\u00a76\u00cdrd be a\u00a7c /{0} {1} \u00a76 parancsot a k\u00f6vetkez\u00f5 oldal elolvas\u00e1s\u00e1hoz. -recentlyForeverAlone=\u00a74{0} a kรถzelmรบltban ment. +recentlyForeverAlone=\u00a74{0} a k\u00f6zelm\u00faltban ment. recipe=\u00a76\u00a7c{0}\u00a76 receptje (\u00a7c{1}\u00a76 az \u00a7c{2}\u00a76-b\u00f3l/b\u0151l) recipeBadIndex=Nincs recept ennyihez. recipeFurnace=\u00a76\u00c9gess\: \u00a7c{0}\u00a76-t. @@ -437,7 +437,7 @@ recipeWhere=\u00a76Hol\: {0} removed=\u00a76Elt\u00e1vol\u00edtva\u00a7c {0} \u00a76entit\u00e1s. repair=\u00a76Sikeresen megjav\u00edtottad a az al\u00e1bbi dolgaidat\: \u00a7c{0}. repairAlreadyFixed=\u00a74Ezt a t\u00e1rgyat m\u00e9g nem kell jav\u00edtanod. -repairEnchanted=\u00a74Nincs jogod, hogy varรกzsolt t\u00e1rgyakat jav\u00edts. +repairEnchanted=\u00a74Nincs jogod, hogy var\u00e1zsolt t\u00e1rgyakat jav\u00edts. repairInvalidType=\u00a74Ez a t\u00e1rgy nem jav\u00edthat\u00f3. repairNone=\u00a74Nincs olyan eszk\u00f6z\u00f6d/felszerel\u00e9sed, amit jav\u00edtani k\u00e9ne. requestAccepted=\u00a76A teleport\u00e1l\u00e1si k\u00e9relem elfogadva. @@ -445,163 +445,163 @@ requestAcceptedFrom=\u00a7c{0} \u00a76elfogadta a k\u00e9relmed. requestDenied=\u00a76Teleport\u00e1l\u00e1si k\u00e9relem elutas\u00edtva. requestDeniedFrom=\u00a7c{0} \u00a76elutas\u00edtotta a k\u00e9relmed. requestSent=\u00a76K\u00e9r\u00e9s elk\u00fcldve\u00a7c {0}\u00a76-nak/nek. -requestSentAlready=\u00a74Mรกr elkรผldted {0}\u00a74 a teleport kรฉrelmet. -requestTimedOut=\u00a74A teleportรกlรกs k\u00e9relem kifutott az id\u00f5b\u00f5l. -requiredBukkit=\u00a76* \! * Szรผksรฉged van a CraftBukkit รฉpรญtรฉsรฉhez {0}, letรถlted innen http\://dl.bukkit.org/downloads/craftbukkit/ -resetBal=\u00a76Egyenleg vissza \u00e1ll\u00edtva \u00a7a{0}-ra/-re \u00a76minden fentl\u00e9v\u0151 j\u00e1t\u00e9kosnak. -resetBalAll=\u00a76Egyenleg vissza\u00e1ll\u00edtva \u00a7a{0}\u00a76-ra/re az \u00f6sszes j\u00e1t\u00e9kosnak. +requestSentAlready=\u00a74M\u00e1r elk\u00fcldted {0}\u00a74 a teleport k\u00e9relmet. +requestTimedOut=\u00a74A teleport\u00e1l\u00e1si k\u00e9relem kifutott az id\u00f5b\u00f5l. +requiredBukkit=\u00a76* \! * Sz\u00fcks\u00e9ged van a CraftBukkit \u00e9p\u00edt\u00e9s\u00e9hez {0}, let\u00f6lt\u00f6d innen http\://dl.bukkit.org/downloads/craftbukkit/ +resetBal=\u00a76Egyenleg vissza\u00e1ll\u00edtva \u00a7a{0}-ra/-re \u00a76minden fentl\u00e9v\u0151 j\u00e1t\u00e9kosnak. +resetBalAll=\u00a76Egyenleg vissza\u00e1ll\u00edtva \u00a7a{0}\u00a76-ra/-re az \u00f6sszes j\u00e1t\u00e9kosnak. returnPlayerToJailError=\u00a74Hiba t\u00f6rt\u00e9nt amikor\u00a7c {0} \u00a74visszapr\u00f3b\u00e1lt t\u00e9rni a(z) \u00a7c{1}\u00a74 b\u00f6rt\u00f6nbe\! -runningPlayerMatch=\u00a76A jรกtรฉkosok megfelelล‘ keresรฉsรฉnek futtatรกsa ''\u00a7c{0}\u00a76'' (ez eltarthat egy kicsit) +runningPlayerMatch=\u00a76A j\u00e1t\u00e9kosok megfelel\u0151 keres\u00e9s\u00e9nek futtat\u00e1sa ''\u00a7c{0}\u00a76'' (ez eltarthat egy kicsit) second=m\u00e1sodperc seconds=m\u00e1sodperc seenAccounts=\u00a76J\u00e1t\u00e9kos ismerhet\u0151\u00a7c {0} \u00a76n\u00e9ven is seenOffline=\u00a76A \u00a7c{0} \u00a76nev\u0171 j\u00e1t\u00e9kos \u00a74nem el\u00e9rhet\u0151 \u00a76ennyi ideje\: \u00a7c{1}\u00a76. seenOnline=\u00a76A \u00a7c{0} \u00a76nev\u0171 j\u00e1t\u00e9kos \u00a74el\u00e9rhet\u0151 \u00a76ennyi ideje\: \u00a7c{1}\u00a76. -sellBulkPermission=\u00a76Nincs jogod a tรถmeges รฉrtรฉkesรญtรฉsre. -sellHandPermission=\u00a76Nincs jogod a kezedben lรฉvล‘ tรกrgy eladรกsรกra. +sellBulkPermission=\u00a76Nincs jogod a t\u00f6meges \u00e9rt\u00e9kes\u00edt\u00e9sre. +sellHandPermission=\u00a76Nincs jogod a kezedben l\u00e9v\u0151 t\u00e1rgy elad\u00e1s\u00e1ra. serverFull=A szerver tele van\! serverTotal=\u00a76Szerver \u00f6sszesen\:\u00a7c {0} -setBal=\u00a7aEgyenleged be\u00e1ll\u00edtva {0}-ra. -setBalOthers=\u00a7aBe\u00e1ll\u00edtottad {0}\u00a7a egyenleg\u00e9t {1}-ra. -setSpawner=\u00a76Idรฉzล‘ \u00faj tรญpusa\:\u00a7c {0}. -sheepMalformedColor=\u00a74Rosszformรกzott szรญn. +setBal=\u00a7aEgyenleged be\u00e1ll\u00edtva {0}-ra/-re. +setBalOthers=\u00a7aBe\u00e1ll\u00edtottad {0}\u00a7a egyenleg\u00e9t {1}-ra/-re. +setSpawner=\u00a76Id\u00e9z\u0151 \u00faj t\u00edpusa\:\u00a7c {0}. +sheepMalformedColor=\u00a74Rosszform\u00e1zott sz\u00edn. shoutFormat=\u00a76[Ki\u00e1lt]\u00a7r {0} signFormatFail=\u00a74[{0}] signFormatSuccess=\u00a71[{0}] signFormatTemplate=[{0}] -signProtectInvalidLocation=\u00a74Nincs engedรฉlyed tรกblรกt lรฉtrehozni. -similarWarpExist=\u00a74Mรกr lรฉtezik hasonlรณ nรฉvvel rendelkezล‘ lรกnc. +signProtectInvalidLocation=\u00a74Nincs jogod egy t\u00e1bl\u00e1t l\u00e9trehozni. +similarWarpExist=\u00a74M\u00e1r l\u00e9tezik hasonl\u00f3 n\u00e9vvel rendelkez\u0151 warp. skullChanged=\u00a76Fej megv\u00e1ltoztatva \u00a7c{0}\u00a76 fej\u00e9re. -slimeMalformedSize=\u00a74Hibรกs mรฉret. +slimeMalformedSize=\u00a74Hib\u00e1s m\u00e9ret. socialSpy=\u00a76SocialSpy \u00a7c{0}\u00a76-nak/-nek\: \u00a7c{1} socialSpyMsgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a77{2} -socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(nรฉmรญtva) \u00a7r +socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(n\u00e9m\u00edtva) \u00a7r socialSpyPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a7r -soloMob=\u00a74A szรถrny szeretnek egyedรผl maradni. -spawned=idรฉzve +soloMob=\u00a74A mobok szeretnek egyed\u00fcl maradni. +spawned=id\u00e9zve spawnSet=\u00a76Kezd\u00f5pont be\u00e1ll\u00edtva a \u00a7c{0}\u00a76 csoportnak. -spectator=nรฉzล‘ +spectator=n\u00e9z\u0151 sudoExempt=\u00a74Nem k\u00e9nyszer\u00edtheted \u00f5t. -sudoRun=\u00a76Erล‘ltetรฉse\u00a7c {0} \u00a76to futtatรกs\:\u00a7r /{1} +sudoRun=\u00a76Er\u00f6ltet\u00e9se\u00a7c {0} \u00a76futtat\u00e1s\:\u00a7r /{1} suicideMessage=\u00a76Viszl\u00e1t sz\u00e9p vil\u00e1g... suicideSuccess=\u00a76{0} \u00a76feladta az \u00e9let\u00e9t. survival=t\u00fal\u00e9l\u00f5 takenFromAccount=\u00a7a{0} lev\u00e9ve az egyenlegedr\u00f5l. takenFromOthersAccount=\u00a7a{0} lev\u00e9ve {1}\u00a7a egyenleg\u00e9r\u00f5l. \u00daj egyenleg\: {2}. -teleportAAll=\u00a76Teleport\u00e1l\u00e1si k\u00e9relem mindenkinek elk\u00fcldve... +teleportAAll=\u00a76A teleport\u00e1l\u00e1si k\u00e9relem mindenkinek elk\u00fcldve... teleportAll=\u00a76\u00d6sszes j\u00e1t\u00e9kos teleport\u00e1l\u00e1sa... teleportationCommencing=\u00a76Teleport\u00e1l\u00e1s megkezd\u00e9se... teleportationDisabled=\u00a76Teleport\u00e1l\u00e1s \u00a7cletiltva\u00a76. teleportationDisabledFor=\u00a76Teleport\u00e1l\u00e1s \u00a7cletiltva \u00a7c{0} \u00a76sz\u00e1m\u00e1ra\u00a76. teleportationEnabled=\u00a76Teleport\u00e1l\u00e1s \u00a7cenged\u00e9lyezve\u00a76. teleportationEnabledFor=\u00a76Teleport\u00e1l\u00e1s \u00a7cenged\u00e9lyezve \u00a7c{0} \u00a76sz\u00e1m\u00e1ra\u00a76. -teleportAtoB=\u00a7c{0}\u00a76 elteleport\u00e1lt t\u00e9ged {1}\u00a76-hoz/hez. +teleportAtoB=\u00a7c{0}\u00a76 elteleport\u00e1lt t\u00e9ged {1}\u00a76-hoz/-hez. teleportDisabled=\u00a7c{0} \u00a74letiltotta, hogy r\u00e1 teleport\u00e1ljanak. teleportHereRequest=\u00a7c{0}\u00a76 szeretn\u00e9, hogy hozz\u00e1 teleport\u00e1lj. teleporting=\u00a76Teleport\u00e1l\u00e1s... teleportInvalidLocation=A koordin\u00e1t\u00e1k \u00e9rt\u00e9ke nem lehet t\u00f6bb 30000000-n\u00e9l -teleportNewPlayerError=\u00a74Nem sikerรผlt teleportรกlni az รบj jรกtรฉkost\! +teleportNewPlayerError=\u00a74Nem siker\u00fclt teleport\u00e1lni az \u00faj j\u00e1t\u00e9kost\! teleportRequest=\u00a7c{0}\u00a76 hozz\u00e1d szeretne teleport\u00e1lni. -teleportRequestAllCancelled=\u00a76Minden kiemelkedล‘ teleportรกlรกs kรฉrรฉs tรถrรถlve. -teleportRequestSpecificCancelled=\u00a76Kiemelkedล‘ teleportรกlรกsi kรฉrelem {0} tรถrรถlve. +teleportRequestAllCancelled=\u00a76Minden kiemelked\u0151 teleport\u00e1l\u00e1s k\u00e9r\u00e9s t\u00f6r\u00f6lve. +teleportRequestSpecificCancelled=\u00a76Kiemelked\u0151 teleport\u00e1l\u00e1si k\u00e9relem {0} t\u00f6r\u00f6lve. teleportRequestTimeoutInfo=\u00a76\u00a7c{0} m\u00e1sodperced\u00a76 van, hogy ezt elfogadd. teleportTop=\u00a76Teleport\u00e1l\u00e1s a legmagasabb pontra. teleportToPlayer=\u00a76Teleport\u00e1l\u00e1s \u00a7c{0}\u00a76-hoz/-hez. -tempbanExempt=\u00a74Nem tempbannolhatod ezt a szem\u00e9lyt. +tempbanExempt=\u00a74Nem tempbannolhatod ezt a j\u00e1t\u00e9kost. tempbanExemptOffline=\u00a74Nem tempbannolhatsz Offline j\u00e1t\u00e9kost. -tempbanJoin=Ki lettรฉl tiltva a szerverrล‘l {0}. Oka: {1} -tempBanned=\u00a7cKi lettรฉl tiltva a szerverrล‘l {0}\:\n\u00a7r{2} -thunder=\u00a7c {0} \u00a76mennydรถrgรฉs a vilรกgban. -thunderDuration=\u00a7c {0} \u00a76mennydรถrgรถtt a vilรกgodban\u00a7c {1} \u00a76mรกsodpercre. -timeBeforeHeal=\u00a74A kรถvetkezล‘ รฉlet feltรถltรฉs\:\u00a7c {0}\u00a76. -timeBeforeTeleport=\u00a74A kรถvetkezล‘ teleportรกlรกs\:\u00a7c {0}\u00a76. +tempbanJoin=Ki lett\u00e9l tiltva a szerverr\u0151l {0}. Oka: {1} +tempBanned=\u00a7cKi lett\u00e9l tiltva a szerverr\u0151l {0}\:\n\u00a7r{2} +thunder=\u00a7c {0} \u00a76mennyd\u00f6rg\u00e9s a vil\u00e1gban. +thunderDuration=\u00a7c {0} \u00a76mennyd\u00f6rg\u00f6tt a vil\u00e1godban\u00a7c {1} \u00a76m\u00e1sodpercre. +timeBeforeHeal=\u00a74A k\u00f6vetkez\u0151 \u00e9let felt\u00f6lt\u00e9s\:\u00a7c {0}\u00a76. +timeBeforeTeleport=\u00a74A k\u00f6vetkez\u0151 teleport\u00e1l\u00e1s\:\u00a7c {0}\u00a76. timeFormat=\u00a7c{0}\u00a76 vagy \u00a7c{1}\u00a76 vagy \u00a7c{2}\u00a76 timeSetPermission=\u00a74Nincs jogod, hogy \u00e1ll\u00edtsd az id\u00f5t. -timeSetWorldPermission=\u00a74Nincs jogod beรกllรญtani az idล‘t a vilรกg ''{0}''. -timeWorldCurrent=\u00a76A jelenlegi idล‘\u00a7c {0} \u00a7c{1}\u00a76. -timeWorldSet=\u00a76Id\u00f5 be\u00e1ll\u00edtva\u00a7c {0}\u00a76-re a \u00a7c{1}\u00a76 vil\u00e1gban. +timeSetWorldPermission=\u00a74Nincs jogod be\u00e1ll\u00edtani az id\u0151t a(z) ''{0}'' vil\u00e1gban. +timeWorldCurrent=\u00a76A jelenlegi id\u0151\u00a7c {0} \u00a7c{1}\u00a76. +timeWorldSet=\u00a76Id\u0151 be\u00e1ll\u00edtva\u00a7c {0}\u00a76-re a(z) \u00a7c{1}\u00a76 vil\u00e1gban. totalSellableAll=\u00a7aAz \u00f6sszes eladhat\u00f3 dolgod\u00e9rt \u00e9s blockjaid\u00e9rt \u00a7c{1}\u00a7a-t kapsz. totalSellableBlocks=\u00a7aAz \u00f6sszes eladhat\u00f3 blockjaid\u00e9rt \u00a7c{1}\u00a7a-t kapsz. -totalWorthAll=\u00a7aMinden tรกrgyat รฉs blokkot eladott egy teljes รฉrtรฉkre \u00a7c{1}\u00a7a. -totalWorthBlocks=\u00a7aEladtad az รถsszes blokkot, รถsszesen รฉrtรฉkben \u00a7c{1}\u00a7a. -tps=\u00a76Jelenlegi TPS \= {0} +totalWorthAll=\u00a7aMinden t\u00e1rgyat \u00e9s blokkot eladt\u00e1l egy teljes \u00e9rt\u00e9kre \u00a7c{1}\u00a7a. +totalWorthBlocks=\u00a7aEladtad az \u00f6sszes blokkot, \u00f6sszesen \u00e9rt\u00e9kben \u00a7c{1}\u00a7a. +tps=\u00a76Jelenlegi TPS\= {0} tradeSignEmpty=\u00a74A t\u00e1bla nem tud neked adni \u00e1rut. tradeSignEmptyOwner=\u00a74A t\u00e1bl\u00e1b\u00f3l m\u00e9g nem v\u00e1s\u00e1rolt senki. -treeFailure=\u00a74Fa termelรฉsi hiba. Prรณbรกlja รบjra a fรผvet vagy a piszkot. -treeSpawned=\u00a76Fa idรฉzve. +treeFailure=\u00a74Fa termel\u00e9si hiba. Pr\u00f3b\u00e1ld \u00fajra a f\u00f6ld\u00f6n. +treeSpawned=\u00a76Fa id\u00e9zve. true=\u00a7aigaz\u00a7r -typeTpacancel=\u00a76A kรฉrelem tรถrlรฉsรฉhez รญrd be \u00a7c/tpacancel\u00a76. -typeTpaccept=\u00a76Hogy elfogadd \u00edrd be \u00a7c/tpaccept\u00a76. -typeTpdeny=\u00a76Hogy elutas\u00edtsd \u00edrd be \u00a7c/tpdeny\u00a76. -typeWorldName=\u00a76Beรญrhatod egy adott vilรกg nevรฉt is. -unableToSpawnItem=\u00a74Nem lehetett leidรฉzni \u00a7c{0}\u00a74-t, mert ez nem idรฉzhetล‘ t\u00e1rgy. -unableToSpawnMob=\u00a74Nem lehetett a szรถrnyet idรฉzni. -unignorePlayer=\u00a76Nem hagyod figyelmen kรญvรผl a jรกtรฉkosokat\u00a7c {0} \u00a76tรถbbรฉ. +typeTpacancel=\u00a76A k\u00e9relem t\u00f6rl\u00e9s\u00e9hez \u00edrd be a \u00a7c/tpacancel\u00a76. +typeTpaccept=\u00a76Hogy elfogadd \u00edrd be a \u00a7c/tpaccept\u00a76. +typeTpdeny=\u00a76Hogy elutas\u00edtsd \u00edrd be a \u00a7c/tpdeny\u00a76. +typeWorldName=\u00a76Be\u00edrhatod egy adott vil\u00e1g nev\u00e9t is. +unableToSpawnItem=\u00a74Nem lehetett leid\u00e9zni \u00a7c{0}\u00a74-t, mert ez nem id\u00e9zhet\u0151 t\u00e1rgy. +unableToSpawnMob=\u00a74Nem lehetett a mobot leid\u00e9zni. +unignorePlayer=\u00a76Nem hagyod figyelmen k\u00edv\u00fcl a j\u00e1t\u00e9kosokat\u00a7c {0} \u00a76t\u00f6bb\u00e9. unknownItemId=\u00a74Ismeretlen t\u00e1rgy ID\:\u00a7r {0}\u00a74. -unknownItemInList=\u00a74Ismeretlen {0} elem a {1} listรกban. +unknownItemInList=\u00a74Ismeretlen {0} elem a {1} list\u00e1ban. unknownItemName=\u00a74Ismeretlen t\u00e1rgy n\u00e9v\: {0}. unlimitedItemPermission=\u00a74Nincs jogod a v\u00e9gtelens\u00e9gre a k\u00f6vetkez\u0151 t\u00e1rgyn\u00e1l\: \u00a7c{0}\u00a74. unlimitedItems=\u00a76V\u00e9gtelen t\u00e1rgyak\:\u00a7r -unmutedPlayer=\u00a7c {0}\u00a76-r\u00f3l fellett oldva a n\u00e9m\u00edt\u00e1s. -unsafeTeleportDestination=\u00a74Ahova teleport\u00e1lni szeretn\u00e9l nem biztons\u00e1gos \u00e9s a bisztons\u00e1gos teleport kikapcsolva. -unvanishedReload=\u00a74A reload k\u00f6vetkezt\u00e9ben mindenki l\u00e1tni fog. -upgradingFilesError=Hiba tรถrtรฉnt a fรกjlok frissรญtรฉse kรถzben. +unmutedPlayer=\u00a7c {0}\u00a76-r\u00f3l fel lett oldva a n\u00e9m\u00edt\u00e1s. +unsafeTeleportDestination=\u00a74Ahova teleport\u00e1lni szeretn\u00e9l nem biztons\u00e1gos \u00e9s a biztons\u00e1gos teleport\u00e1l\u00e1s kikapcsolva. +unvanishedReload=\u00a74Az \u00fajrat\u00f6lt\u00e9s k\u00f6vetkezt\u00e9ben mindenki l\u00e1tni fog. +upgradingFilesError=Hiba t\u00f6rt\u00e9nt a f\u00e1jlok friss\u00edt\u00e9se k\u00f6zben. uptime=\u00a76M\u00fbk\u00f6d\u00e9si id\u00f5\:\u00a7c {0} -userAFK=\u00a75{0} \u00a75most AFK \u00e9s nem bisztos hogy fog v\u00e1laszolni. -userAFKWithMessage=\u00a75{0} \u00a75most AFK \u00e9s nem bisztos, hogy fog v\u00e1laszolni. {1} -userdataMoveBackError=Nem sikerรผlt az userdata/{0}.tmp รกthelyezรฉse a userdata/{1}\! -userdataMoveError=Nem sikerรผlt az userdata/{0} รกthelyezรฉse a userdata/{1}.tmp\! -userDoesNotExist=\u00a74A felhasznรกlรณ\u00a7c {0} \u00a74nem lรฉtezik. +userAFK=\u00a75{0} \u00a75most AFK \u00e9s nem biztos, hogy v\u00e1laszolni fog. +userAFKWithMessage=\u00a75{0} \u00a75most AFK \u00e9s nem biztos, hogy fog v\u00e1laszolni. {1} +userdataMoveBackError=Nem siker\u00fclt az userdata/{0}.tmp \u00e1thelyez\u00e9se a userdata/{1}\! +userdataMoveError=Nem siker\u00fclt az userdata/{0} \u00e1thelyez\u00e9se a userdata/{1}.tmp\! +userDoesNotExist=\u00a74A felhaszn\u00e1l\u00f3\u00a7c {0} \u00a74nem l\u00e9tezik. userIsAway=\u00a77* \u00a75{0}\u00a77 elment a g\u00e9pt\u0151l... userIsAwayWithMessage=\u00a77* \u00a75{0}\u00a77 elment a g\u00e9pt\u0151l... userIsNotAway=\u00a77* \u00a75{0} \u00a77visszaj\u00f6tt... userJailed=\u00a76Beb\u00f6rt\u00f6n\u00f6ztek\! userUnknown=\u00a74Figyelem\: ''\u00a7c{0}\u00a74'' m\u00e9g sose j\u00e1rt a szerveren. -usingTempFolderForTesting=Hล‘mappรกk hasznรกlata a tesztelรฉshez\: +usingTempFolderForTesting=H\u0151mapp\u00e1k haszn\u00e1lata a tesztel\u00e9shez\: vanish=\u00a76L\u00e1thatatlans\u00e1g {0}\u00a76-nak/-nek\: {1} vanished=\u00a76Sikeresen elt\u00fcnt\u00e9l a norm\u00e1lis j\u00e1t\u00e9kosok el\u00f5l \u00e9s a j\u00e1t\u00e9kbeli parancsokb\u00f3l. -versionMismatch=\u00a74Verziรณ eltรฉrรฉs\! Kรฉrjรผk, frissรญtse {0} ugyanarra a verziรณra. -versionMismatchAll=\u00a74Verziรณ eltรฉrรฉs\! Kรฉrjรผk, frissรญtse az รถsszes Essentials jart ugyanarra a verziรณra. +versionMismatch=\u00a74Verzi\u00f3 elt\u00e9r\u00e9s\! K\u00e9rj\u00fck, friss\u00edtse a(z) {0} a legfrissebb verzi\u00f3ra. +versionMismatchAll=\u00a74Verzi\u00f3 elt\u00e9r\u00e9s\! K\u00e9rj\u00fck, friss\u00edtse az \u00f6sszes Essentials jart a legfrissebb verzi\u00f3ra. voiceSilenced=\u00a76El vagy n\u00e9m\u00edtva\! walking=s\u00e9ta -warpDeleteError=\u00a74Problรฉma a warp fรกjl tรถrlรฉsรฉvel. +warpDeleteError=\u00a74Probl\u00e9ma a warp f\u00e1jl t\u00f6rl\u00e9s\u00e9vel. warpingTo=\u00a76Warpol\u00e1s a(z)\u00a7c {0}\u00a76 helyre. warpList={0} -warpListPermission=\u00a74Nincs jogod, hogy ki list\u00e1zd a Warpokat. +warpListPermission=\u00a74Nincs jogod, hogy list\u00e1zd a warpokat. warpNotExist=\u00a74Nincs ilyen warp. -warpOverwrite=\u00a74Nem lehet felรผlรญrni a warpot. +warpOverwrite=\u00a74Nem lehet fel\u00fcl\u00edrni a warpot. warps=\u00a76Teleportok\:\u00a7r {0} warpsCount=\u00a76Van\u00a7c {0} \u00a76warp. Ez az \u00a7c{1}.\u00a76 oldal a \u00a7c{2}\u00a76-b\u00f3l/b\u0151l. warpSet=\u00a76Warp\u00a7c {0} \u00a76be\u00e1ll\u00edtva. warpUsePermission=\u00a74Nincs jogod oda warpolni. weatherInvalidWorld=A vil\u00e1g {0} nem tal\u00e1lhat\u00f3\! weatherStorm=\u00a76Be\u00e1ll\u00edtottad az id\u00f5t \u00a7ces\u00f5sre\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. -weatherStormFor=\u00a76Beรกllรญtottad az idล‘jรกrรกst \u00a7cesล‘sre\u00a7c {0}\u00a76 vilรกgban {1} mรกsodpercre. +weatherStormFor=\u00a76Be\u00e1ll\u00edtottad az id\u0151j\u00e1r\u00e1st \u00a7ces\u0151sre\u00a7c {0}\u00a76 vil\u00e1gban {1} m\u00e1sodpercre. weatherSun=\u00a76Be\u00e1ll\u00edtottad az id\u00f5t \u00a7cnaposra\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. -weatherSunFor=\u00a76Beรกllรญtottad az idล‘jรกrรกst \u00a7cnaposra\u00a7c {0}\u00a76 vilรกgban \u00a76 {1} mรกsodpercre. +weatherSunFor=\u00a76Be\u00e1ll\u00edtottad az id\u0151j\u00e1r\u00e1st \u00a7cnaposra\u00a7c {0}\u00a76 vil\u00e1gban \u00a76 {1} m\u00e1sodpercre. whoisAFK=\u00a76 - AFK\:\u00a7r {0} -whoisAFKSince=\u00a76 - AFK\:\u00a7r {0} (Since {1}) +whoisAFKSince=\u00a76 - AFK\:\u00a7r {0} (Mivel {1}) whoisBanned=\u00a76 - Bannolva\:\u00a7r {0} -whoisExp=\u00a76 - Exp\:\u00a7r {0} (Level {1}) +whoisExp=\u00a76 - Exp\:\u00a7r {0} (Szint {1}) whoisFly=\u00a76 - Rep\u00fcl\u00e9s\:\u00a7r {0} ({1}) whoisGamemode=\u00a76 - J\u00e1t\u00e9km\u00f3d\:\u00a7r {0} whoisGeoLocation=\u00a76 - Helyezked\u00e9s\:\u00a7r {0} whoisGod=\u00a76 - Isten m\u00f3d\:\u00a7r {0} whoisHealth=\u00a76 - \u00c9let\:\u00a7r {0}/20 -whoisHunger=\u00a76 - \u00c9hs\u00e9g\:\u00a7r {0}/20 (+{1} telรญtettsรฉg) +whoisHunger=\u00a76 - \u00c9hs\u00e9g\:\u00a7r {0}/20 (+{1} tel\u00edtetts\u00e9g) whoisIPAddress=\u00a76 - IP C\u00edm\:\u00a7r {0} whoisJail=\u00a76 - B\u00f6rt\u00f6n\:\u00a7r {0} whoisLocation=\u00a76 - Helye\:\u00a7r ({0}, {1}, {2}, {3}) whoisMoney=\u00a76 - P\u00e9nz\:\u00a7r {0} whoisMuted=\u00a76 - N\u00e9m\u00edtva\:\u00a7r {0} -whoisNick=\u00a76 - Becenรฉv\:\u00a7r {0} +whoisNick=\u00a76 - Becen\u00e9v\:\u00a7r {0} whoisOp=\u00a76 - OP\:\u00a7r {0} -whoisPlaytime=\u00a76 - Jรกtรฉkidล‘\:\u00a7r {0} -whoisTempBanned=\u00a76 - Ban lejรกr:\u00a7r {0} -whoisTop=\u00a76 \=\=\=\=\=\= KiIs\u00d6\:\u00a7c {0} \u00a76\=\=\=\=\=\= +whoisPlaytime=\u00a76 - J\u00e1t\u00e9kid\u0151\:\u00a7r {0} +whoisTempBanned=\u00a76 - Ban lej\u00e1r:\u00a7r {0} +whoisTop=\u00a76 \=\=\=\=\=\= Ki is \u0151:\u00a7c {0} \u00a76\=\=\=\=\=\= whoisUuid=\u00a76 - UUID\:\u00a7r {0} -worth=\u00a7aStackelรฉs {0} รฉrdemes \u00a7c{1}\u00a7a ({2} elem(ek) {3} minden) -worthMeta=\u00a7aStackelรฉs {0} az {1} รฉrtรฉkลฑ metaadatokkal \u00a7c{2}\u00a7a ({3} elem(ek) {4} minden) +worth=\u00a7aStackel\u00e9s {0} \u00e9rdemes \u00a7c{1}\u00a7a ({2} elem(ek) {3} minden) +worthMeta=\u00a7aStackel\u00e9s {0} az {1} \u00e9rt\u00e9k\u0171 metaadatokkal \u00a7c{2}\u00a7a ({3} elem(ek) {4} minden) worthSet=\u00a76\u00c1r be\u00e1ll\u00edtva year=\u00e9v years=\u00e9v From 2ced9469d78d94b4d89a7e3f1ab7047465ac163a Mon Sep 17 00:00:00 2001 From: BaoKunVN Date: Thu, 14 Jun 2018 03:23:00 +0700 Subject: [PATCH 060/333] Vietnamese Translation (#1824) @BauKunVN --- Essentials/src/messages_vi.properties | 595 ++++++++++++++++++++++++++ 1 file changed, 595 insertions(+) create mode 100644 Essentials/src/messages_vi.properties diff --git a/Essentials/src/messages_vi.properties b/Essentials/src/messages_vi.properties new file mode 100644 index 000000000..03ea9b91b --- /dev/null +++ b/Essentials/src/messages_vi.properties @@ -0,0 +1,595 @@ +#X-Generator: crowdin.net +#version: 488 +# Single quotes have to be doubled: '' +# Translations start here +# by: BaoKunVN (Kun) +action=\u00a75* {0} \u00a75{1} +addedToAccount=\u00a7a{0} \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0068\u00ea\u006d \u0076\u00e0\u006f \u0074\u00e0\u0069 \u006b\u0068\u006f\u1ea3\u006e \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. +addedToOthersAccount=\u00a7a{0} \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0068\u00ea\u006d \u0076\u00e0\u006f \u0074\u00e0\u0069 \u006b\u0068\u006f\u1ea3\u006e {1}\u00a7a. \u0053\u1ed1 \u0064\u01b0 \u006d\u1edb\u0069\: {2} +adventure=\u0050\u0068\u0069\u00ea\u0075 \u006c\u01b0\u0075 +alertBroke=\u0110\u00e3 \u0070\u0068\u00e1\: +alertFormat=\u00a73[{0}] \u00a7r {1} \u00a76 {2} \u0074\u1ea1\u0069\: {3} +alertPlaced=\u0110\u1eb7\u0074\: +alertUsed=\u0044\u00f9\u006e\u0067\: +antiBuildBreak=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0070\u0068\u00e1\u00a7c {0} \u00a74\u006b\u0068\u1ed1\u0069 \u1edf \u0111\u00e2\u0079. +antiBuildCraft=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u0068\u1ebf \u0074\u1ea1\u006f \u0111\u1ed3\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u006c\u00e0\u006d \u0076\u1ee9\u0074 \u0111\u1ed3\u00a7c {0}\u00a74. +antiBuildInteract=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u01b0\u01a1\u006e\u0067 \u0074\u00e1\u0063 \u0076\u1edb\u0069\u00a7c {0}\u00a74. +antiBuildPlace=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0111\u1eb7\u0074\u00a7c {0} \u00a74\u1edf \u0111\u00e2\u0079. +antiBuildUse=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0064\u00f9\u006e\u0067\u00a7c {0}\u00a74. +autoAfkKickReason=\u0042\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0111\u00e1 \u0076\u00ec \u0072\u1edd\u0069 \u006b\u0068\u1ecf\u0069 \u006d\u00e1\u0079 {0} \u0070\u0068\u00fa\u0074. +backAfterDeath=\u00a76\u0044\u00f9\u006e\u0067 \u006c\u1ec7\u006e\u0068 /back \u0111\u1ec3 \u0076\u1ec1 \u0063\u0068\u1ed7 \u0111\u00e3 \u0063\u0068\u1ebf\u0074. +backUsageMsg=\u00a76\u0110\u0061\u006e\u0067 \u0071\u0075\u0061\u0079 \u006c\u1ea1\u0069 \u0076\u1ecb \u0074\u0072\u00ed \u0063\u0169. +backupDisabled=\u00a74\u0054\u1ead\u0070 \u006c\u1ec7\u006e\u0068 \u0073\u0061\u006f \u006c\u01b0\u0075 \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068. +backupFinished=\u00a76\u0053\u0061\u006f \u006c\u01b0\u0075 \u0074\u0068\u00e0\u006e\u0068 \u0063\u00f4\u006e\u0067. +backupStarted=\u00a76\u0042\u1eaf\u0074 \u0111\u1ea7\u0075 \u0073\u0061\u006f \u006c\u01b0\u0075. +balance=\u00a7a\u0053\u1ed1 \u0064\u01b0\:\u00a7c {0} +balanceOther=\u00a7a\u0053\u1ed1 \u0064\u01b0 \u0063\u1ee7\u0061 {0}\u00a7a\:\u00a7c {1} +balanceTop=\u00a76\u0042\u1ea3\u006e\u0067 \u0078\u1ebf\u0070 \u0068\u1ea1\u006e\u0067 \u0074\u0069\u1ec1\u006e ({0}) +banExempt=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u1ea5\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u00e0\u0079. +banFormat=\u00a7c\u0042\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0063\u1ea5\u006d\:\n\u00a7r{0} +bed=\u00a7o\u0067\u0069\u01b0\u1edd\u006e\u0067\u00a7r +bedMissing=\u00a74\u0047\u0069\u01b0\u1edd\u006e\u0067 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0063\u0068\u01b0\u0061 \u0074\u0068\u0069\u1ebf\u0074 \u006c\u1ead\u0070\u002c \u0068\u0061\u0079 \u0063\u00f3 \u0074\u0068\u1ec3 \u006c\u00e0 \u0062\u1ecb \u006d\u1ea5\u0074 \u0068\u006f\u1eb7\u0063 \u0063\u0068\u1eb7\u006e. +bedNull=\u00a7m\u0067\u0069\u01b0\u1edd\u006e\u0067\u00a7r +bedSet=\u00a76\u0110\u00e3 \u0074\u0068\u0069\u1ebf\u0074 \u006c\u1ead\u0070 \u0076\u1ecb \u0074\u0072\u00ed \u0067\u0069\u01b0\u1edd\u006e\u0067 \u006e\u0067\u1ee7\! +bigTreeFailure=\u00a74\u0054\u1ea1\u006f \u0063\u00e2\u0079 \u006c\u1edb\u006e \u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069\u002c \u0068\u00e3\u0079 \u0074\u0068\u1eed \u006c\u1ea1\u0069 \u1edf \u0074\u0072\u00ea\u006e \u0111\u1ea5\u0074 \u0068\u0061\u0079 \u006b\u0068\u1ed1\u0069 \u0063\u1ecf. +bigTreeSuccess=\u00a76\u0054\u1ea1\u006f \u0063\u00e2\u0079 \u006c\u1edb\u006e \u0074\u0068\u00e0\u006e\u0068 \u0063\u00f4\u006e\u0067. +blockList=\u00a76Essentials \u0063\u0068\u0075\u0079\u1ec3\u006e \u0074\u0069\u1ebf\u0070 \u0063\u00e1\u0063 \u006c\u1ec7\u006e\u0068 \u0073\u0061\u0075 \u0076\u00e0\u006f \u006d\u1ed9\u0074 \u0070\u006c\u0075\u0067\u0069\u006e \u006b\u0068\u00e1\u0063\: +bookAuthorSet=\u00a76\u0054\u00e1\u0063 \u0067\u0069\u1ea3 \u0063\u1ee7\u0061 \u0071\u0075\u0079\u1ec3\u006e \u0073\u00e1\u0063\u0068 \u0111\u01b0\u1ee3\u0063 \u0111\u1eb7\u0074 \u0074\u0068\u00e0\u006e\u0068 {0}. +bookLocked=\u00a76\u0051\u0075\u0079\u1ec3\u006e \u0073\u00e1\u0063\u0068 \u006e\u00e0\u0079 \u0111\u00e3 \u0062\u1ecb \u006b\u0068\u00f3\u0061. +bookTitleSet=\u00a76\u0054\u0069\u00ea\u0075 \u0111\u1ec3 \u0063\u1ee7\u0061 \u0071\u0075\u0079\u1ec1\u006e \u0073\u00e1\u0063\u0068 \u0111\u01b0\u1ee3\u0063 \u0111\u1eb7\u0074 \u0074\u0068\u00e0\u006e\u0068 {0}. +broadcast=\u00a7r\u00a76[\u00a74\u0054\u0068\u00f4\u006e\u0067 \u0063\u00e1\u006f\u00a76]\u00a7a {0} +buildAlert=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3 \u0078\u00e2\u0079. +bukkitFormatChanged=\u0110\u1ecb\u006e\u0068 \u0064\u1ea1\u006e\u0067 \u0070\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0063\u1ee7\u0061 \u0042\u0075\u006b\u006b\u0069\u0074 \u0111\u00e3 \u0062\u1ecb \u0074\u0068\u0061\u0079 \u0111\u1ed5\u0069\u002e \u0050\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0063\u0068\u01b0\u0061 \u0111\u01b0\u1ee3\u0063 \u006b\u0069\u1ec3\u006d \u0074\u0072\u0061 +burnMsg=\u00a76\u0042\u1ea1\u006e \u006c\u00e0\u006d \u0063\u0068\u006f\u00a7c {0} \u00a76\u0062\u1ecb \u0063\u0068\u00e1\u0079 \u0074\u0072\u006f\u006e\u0067\u00a7c {1} \u0067\u0069\u00e2\u0079\u00a76. +canTalkAgain=\u00a76\u0042\u1ea1\u006e \u0063\u00f3 \u0074\u0068\u1ec3 \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e \u006c\u1ea1\u0069. +cannotStackMob=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0078\u1ebf\u0070 \u0063\u0068\u1ed3\u006e\u0067 \u006e\u0068\u0069\u1ec1\u0075 \u0071\u0075\u00e1\u0069. +cantFindGeoIpDB=\u004b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u00ec\u006d \u0074\u0068\u1ea5\u0079 \u0063\u01a1 \u0073\u1edf \u0064\u1eef \u006c\u0069\u1ec7\u0075 \u0047\u0065\u006f\u0049\u0050\! +cantReadGeoIpDB=\u004b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0111\u1ecd\u0063 \u0063\u01a1 \u0073\u1edf \u0064\u1eef \u006c\u0069\u1ec7\u0075 \u0047\u0065\u006f\u0049\u0050\! +cantSpawnItem=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0074\u1ea1\u006f \u0072\u0061 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d\u00a7c {0}\u00a74. +chatTypeAdmin=[A] +chatTypeLocal=[L] +chatTypeSpy=[Spy] +cleaned=\u0110\u00e3 \u0064\u1ecd\u006e \u0074\u1ec7\u0070 \u0074\u0068\u00f4\u006e\u0067 \u0074\u0069\u006e \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069. +cleaning=\u0110\u0061\u006e\u0067 \u0064\u1ecd\u006e \u0074\u1ec7\u0070 \u0074\u0068\u00f4\u006e\u0067 \u0074\u0069\u006e \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069. +commandFailed=\u004c\u1ec7\u006e\u0068 {0} \u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069\: +commandHelpFailedForPlugin=\u004c\u1ed7\u0069 \u006b\u0068\u0069 \u006e\u0068\u1ead\u0070 \u0074\u0072\u1ee3 \u0067\u0069\u00fa\u0070 \u0063\u0068\u006f \u0070\u006c\u0075\u0067\u0069\u006e\: {0} +commandNotLoaded=\u00a74\u004c\u1ec7\u006e\u0068 {0} \u006b\u0068\u00f4\u006e\u0067 \u0063\u0068\u00ed\u006e\u0068 \u0078\u00e1\u0063. +compassBearing=\u00a76\u0048\u01b0\u1edb\u006e\u0067\: {0} ({1} \u0111\u1ed9). +configFileMoveError=\u0054\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 \u006b\u0068\u0069 \u0064\u0069 \u0063\u0068\u0075\u0079\u1ec3\u006e config.yml \u0074\u1edb\u0069 \u0076\u1ecb \u0074\u0072\u00ed \u0073\u0061\u006f \u006c\u01b0\u0075. +configFileRenameError=\u0054\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 \u006b\u0068\u0069 \u0111\u1ed5\u0069 \u0074\u00ea\u006e \u0074\u1ec7\u0070 \u0074\u0069\u006e \u0074\u1ea1\u006d \u0074\u0068\u1edd\u0069 \u0074\u0068\u00e0\u006e\u0068 config.yml. +confirmPayment=\u00a77\u0110\u1ec3 \u00a7l\u0058\u00c1\u0043 \u004e\u0048\u1eac\u004e\u00a77 \u006b\u0068\u006f\u1ea3\u006e \u0074\u0068\u0061\u006e\u0068 \u0074\u006f\u00e1\u006e \u00a76{0}\u00a77, \u0078\u0069\u006e \u0068\u00e3\u0079 \u006c\u1eb7\u0070 \u006c\u1ea1\u0069 \u006c\u1ec7\u006e\u0068: \u00a76{1} +connectedPlayers=\u00a76\u004e\u0068\u1eef\u006e\u0067 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0111\u00e3 \u006b\u1ebf\u0074 \u006e\u1ed1\u0069\u00a7r +connectionFailed=\u0054\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 \u006b\u0068\u0069 \u006d\u1edf \u006b\u1ebf\u0074 \u006e\u1ed1\u0069. +cooldownWithMessage=\u00a74\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0068\u1ed3\u0069\: {0} +corruptNodeInConfig=\u00a74\u004c\u01b0\u0075 \u00fd\: \u0054\u1ec7\u0070 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0028\u0063\u006f\u006e\u0066\u0069\u0067\u0029 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0063\u00f3 {0} \u006c\u1ed7\u0069. +couldNotFindTemplate=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0074\u00ec\u006d \u0074\u0068\u1ea5\u0079 \u006d\u1eab\u0075 {0} +creatingConfigFromTemplate=\u0054\u1ea1\u006f \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0028\u0063\u006f\u006e\u0066\u0069\u0067\u0029 \u0074\u1eeb \u006d\u1eab\u0075\: {0} +creatingEmptyConfig=\u0110\u0061\u006e\u0067 \u0074\u1ea1\u006f \u006d\u1ed9\u0074 \u0074\u1ec7\u0070 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0028\u0063\u006f\u006e\u0066\u0069\u0067\u0029 \u0072\u1ed7\u006e\u0067\: {0} +creative=\u0053\u00e1\u006e\u0067 \u0074\u1ea1\u006f +currency={0}{1} +currentWorld=\u00a76\u0054\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u0068\u0069\u1ec7\u006e \u0074\u1ea1\u0069\:\u00a7c {0} +day=\u004e\u0067\u00e0\u0079 +days=\u004e\u0067\u00e0\u0079 +defaultBanReason=\u0042\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0063\u1ea5\u006d \u006b\u0068\u1ecf\u0069 \u006d\u00e1\u0079 \u0063\u0068\u1ee7 \u006e\u00e0\u0079\! +deleteFileError=\u004b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0078\u00f3\u0061 \u0074\u1ec7\u0070\: {0} +deleteHome=\u00a76\u004e\u0068\u00e0\u00a7c {0} \u00a76\u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u006c\u006f\u1ea1\u0069 \u0062\u1ecf. +deleteJail=\u00a76\u004e\u0067\u1ee5\u0063\u00a7c {0} \u00a76\u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u006c\u006f\u1ea1\u0069 \u0062\u1ecf. +deleteWarp=\u00a76\u004b\u0068\u0075 \u0076\u1ef1\u0063\u00a7c {0} \u00a76\u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u006c\u006f\u1ea1\u0069 \u0062\u1ecf. +deniedAccessCommand=\u00a7c{0} \u00a74\u0062\u1ecb \u0074\u1eeb \u0063\u0068\u1ed1\u0069 \u0064\u00f9\u006e\u0067 \u006c\u1ec7\u006e\u0068. +denyBookEdit=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u006d\u1edf \u006b\u0068\u00f3\u0061 \u0071\u0075\u0079\u1ec3\u006e \u0073\u00e1\u0063\u0068 \u006e\u00e0\u0079. +denyChangeAuthor=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u0068\u0061\u0079 \u0111\u1ed5\u0069 \u0074\u00e1\u0063 \u0067\u0069\u1ea3 \u0063\u1ee7\u0061 \u0071\u0075\u0079\u1ec3\u006e \u0073\u00e1\u0063\u0068 \u006e\u00e0\u0079. +denyChangeTitle=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u0068\u0061\u0079 \u0111\u1ed5\u0069 \u0074\u0069\u00ea\u0075 \u0111\u1ec1 \u0063\u1ee7\u0061 \u0071\u0075\u0079\u1ec3\u006e \u0073\u00e1\u0063\u0068 \u006e\u00e0\u0079. +depth=\u00a76\u0042\u1ea1\u006e \u0111\u0061\u006e\u0067 \u1edf \u0076\u1ecb \u0074\u0072\u00ed \u0074\u0072\u00f9\u006e\u0067 \u0076\u1edb\u0069 \u006d\u1ef1\u0063 \u006e\u01b0\u1edb\u0063 \u0062\u0069\u1ec3\u006e. +depthAboveSea=\u00a76\u0042\u1ea1\u006e \u0111\u0061\u006e\u0067 \u1edf \u0074\u0072\u00ea\u006e \u006d\u1ef1\u0063 \u006e\u01b0\u1edb\u0063 \u0062\u0069\u1ec3\u006e\u00a7c {0} \u00a76\u006b\u0068\u1ed1\u0069. +depthBelowSea=\u00a76\u0042\u1ea1\u006e \u0111\u0061\u006e\u0067 \u1edf \u0064\u01b0\u1edb\u0069 \u006d\u1ef1\u0063 \u006e\u01b0\u1edb\u0063 \u0062\u0069\u1ec3\u006e\u00a7c {0} \u00a76\u006b\u0068\u1ed1\u0069. +destinationNotSet=\u004b\u0068\u00f4\u006e\u0067 \u0111\u1eb7\u0074 \u0111\u00ed\u0063\u0068\! +disableUnlimited=\u00a76\u0056\u00f4 \u0068\u0069\u1ec7\u0075 \u0068\u00f3\u0061 \u0076\u0069\u1ec7\u0063 \u0111\u1eb7\u0074 \u006b\u0068\u00f4\u006e\u0067 \u0067\u0069\u1edb\u0069 \u0068\u1ea1\u006e \u006b\u0068\u1ed1\u0069\u00a7c {0} \u00a76\u0063\u0068\u006f {1}. +disabled=\u0054\u1eaf\u0074 +disabledToSpawnMob=\u00a74\u0056\u0069\u1ec7\u0063 \u0073\u0069\u006e\u0068 \u0072\u0061 \u0071\u0075\u00e1\u0069 \u006e\u00e0\u0079 \u0111\u00e3 \u0062\u1ecb \u0063\u0068\u1eb7\u006e \u1edf \u0074\u0072\u006f\u006e\u0067 \u0074\u1ec7\u0070 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0028\u0063\u006f\u006e\u0066\u0069\u0067\u0029. +distance=\u00a76\u004b\u0068\u006f\u1ea3\u006e\u0067 \u0063\u00e1\u0063\u0068\: {0} +dontMoveMessage=\u00a76\u0043\u0068\u0075\u1ea9\u006e \u0062\u1ecb \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0074\u0072\u006f\u006e\u0067\u00a7c {0}\u00a76. \u0110\u1eeb\u006e\u0067 \u0064\u0069 \u0063\u0068\u0075\u0079\u1ec3\u006e. +downloadingGeoIp=\u0110\u0061\u006e\u0067 \u0074\u1ea3\u0069 \u0078\u0075\u1ed1\u006e\u0067 \u0063\u01a1 \u0073\u1edf \u0064\u1eef \u006c\u0069\u1ec7\u0075 \u0047\u0065\u006f\u0049\u0050 \u002e\u002e\u002e \u0063\u00f3 \u0074\u0068\u1ec3 \u006d\u1ea5\u0074 \u006d\u1ed9\u0074 \u006c\u00fa\u0063 (\u006e\u01b0\u1edb\u0063\: 0.6 MB, \u0074\u0068\u00e0\u006e\u0068 \u0070\u0068\u1ed1\: 20MB) +duplicatedUserdata=\u0044\u1eef \u006c\u0069\u1ec7\u0075 \u006e\u0067\u01b0\u1edd\u0069 \u0064\u00f9\u006e\u0067 \u0074\u0072\u00f9\u006e\u0067 \u006c\u1eb7\u0070\: {0} \u0076\u00e0 {1}. +durability=\u00a76\u0043\u00f4\u006e\u0067 \u0063\u1ee5 \u006e\u00e0\u0079 \u0063\u00f2\u006e \u0063\u00f3 \u0074\u0068\u1ec3 \u0064\u00f9\u006e\u0067 \u00a7c{0}\u00a76 \u006c\u1ea7\u006e \u006e\u1eef\u0061. +editBookContents=\u00a7e\u0042\u00e2\u0079 \u0067\u0069\u1edd \u0062\u1ea1\u006e \u0063\u00f3 \u0074\u0068\u1ec3 \u0063\u0068\u1ec9\u006e\u0068 \u0073\u1eed\u0061 \u006e\u1ed9\u0069 \u0064\u0075\u006e\u0067 \u0063\u1ee7\u0061 \u0071\u0075\u0079\u1ec3\u006e \u0073\u00e1\u0063\u0068 \u006e\u00e0\u0079. +enableUnlimited=\u00a76\u0043\u0068\u006f \u006d\u1ed9\u0074 \u0073\u1ed1 \u006c\u01b0\u1ee3\u006e\u0067 \u006b\u0068\u00f4\u006e\u0067 \u0067\u0069\u1edb\u0069 \u0068\u1ea1\u006e\u00a7c {0} \u00a76\u0063\u0068\u006f \u00a7c{1}\u00a76. +enabled=\u0042\u1ead\u0074 +enchantmentApplied=\u00a76\u0050\u0068\u00f9 \u0070\u0068\u00e9\u0070\u00a7c {0} \u00a76\u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0068\u0069\u1ebf\u0074 \u006c\u1ead\u0070 \u0063\u0068\u006f \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0074\u0072\u00ea\u006e \u0074\u0061\u0079 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. +enchantmentNotFound=\u00a74\u0050\u0068\u00f9 \u0070\u0068\u00e9\u0070 \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3\! +enchantmentPerm=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3\u00a7c {0}\u00a74. +enchantmentRemoved=\u00a76\u0050\u0068\u00f9 \u0070\u0068\u00e9\u0070\u00a7c {0} \u00a76\u0111\u00e3 \u0062\u1ecb \u006c\u006f\u1ea1\u0069 \u0062\u1ecf \u006b\u0068\u1ecf\u0069 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0074\u0072\u00ea\u006e \u0074\u0061\u0079 \u0062\u1ea1\u006e. +enchantments=\u00a76\u0050\u0068\u00f9 \u0070\u0068\u00e9\u0070\:\u00a7r {0} +errorCallingCommand=\u0054\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 \u006b\u0068\u0069 \u0067\u1ecd\u0069 \u006c\u1ec7\u006e\u0068 /{0} +errorWithMessage=\u00a7c\u004c\u1ed7\u0069\:\u00a74 {0} +essentialsHelp1=\u0054\u1ec7\u0070 \u006e\u00e0\u0079 \u0111\u00e3 \u0062\u1ecb \u0068\u1ecf\u006e\u0067 \u0076\u00e0 \u0045\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u006d\u1edf \u006e\u00f3\u002e \u0045\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073 \u0067\u0069\u1edd \u0073\u1ebd \u0074\u1eaf\u0074\u002e \u004e\u1ebf\u0075 \u0062\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0073\u1eed\u0061 \u0074\u1ec7\u0070 \u006e\u00e0\u0079\u002c \u0068\u00e3\u0079 \u0111\u0069 \u0074\u0068\u0065\u006f \u0111\u01b0\u1edd\u006e\u0067 \u0064\u1eab\u006e http\://tiny.cc/EssentialsChat +essentialsHelp2=\u0054\u1ec7\u0070 \u006e\u00e0\u0079 \u0111\u00e3 \u0062\u1ecb \u0068\u1ecf\u006e\u0067 \u0076\u00e0 \u0045\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u006d\u1edf \u006e\u00f3\u002e \u0045\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073 \u0067\u0069\u1edd \u0073\u1ebd \u0074\u1eaf\u0074\u002e \u004e\u1ebf\u0075 \u0062\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0073\u1eed\u0061 \u0074\u1ec7\u0070 \u006e\u00e0\u0079\u002c \u0068\u00e3\u0079 \u006e\u0068\u1ead\u0070 \u006c\u1ec7\u006e\u0068 \u002f\u0065\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073\u0068\u0065\u006c\u0070 \u0074\u0072\u006f\u006e\u0067 \u0074\u0072\u00f2 \u0063\u0068\u01a1\u0069 \u0068\u006f\u1eb7\u0063 \u0111\u0069 \u0111\u1ebf\u006e http\://tiny.cc/EssentialsChat +essentialsReload=\u00a76\u0045\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073 \u0111\u00e3 \u0074\u1ea3\u0069 \u006c\u1ea1\u0069\u00a7c {0}. +exp=\u00a7c{0} \u00a76\u0063\u00f3\u00a7c {1} \u00a76\u006b\u0069\u006e\u0068 \u006e\u0067\u0068\u0069\u1ec7\u006d (\u0063\u1ea5\u0070\u00a7c {2}\u00a76) \u0076\u00e0 \u0063\u1ea7\u006e \u0074\u0068\u00ea\u006d\u00a7c {3} \u00a76\u006b\u0069\u006e\u0068 \u006e\u0067\u0068\u0069\u1ec7\u006d \u0111\u1ec3 \u006c\u00ea\u006e \u0063\u1ea5\u0070. +expSet=\u00a7c{0} \u00a76\u0067\u0069\u1edd \u0063\u00f3\u00a7c {1} \u00a76\u006b\u0069\u006e\u0068 \u006e\u0067\u0068\u0069\u1ec7\u006d. +extinguish=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0064\u1ead\u0070 \u006c\u1eed\u0061 \u0074\u0072\u00ea\u006e \u006e\u0067\u01b0\u1edd\u0069 \u006d\u00ec\u006e\u0068. +extinguishOthers=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0064\u1ead\u0070 \u006c\u1eed\u0061 \u0074\u0072\u00ea\u006e \u006e\u0067\u01b0\u1edd\u0069 {0}\u00a76. +failedToCloseConfig=\u0110\u00f3\u006e\u0067 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 {0}. +failedToCreateConfig=\u0054\u1ea1\u006f \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 {0}. +failedToWriteConfig=\u0056\u0069\u1ebf\u0074 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 {0}. +false=\u0053\u0061\u0069 +feed=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0068\u1ebf\u0074 \u0111\u00f3\u0069. +feedOther=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u006c\u00e0\u006d \u006e\u006f \u00a7c{0}\u00a76. +fileRenameError=\u0043\u0068\u1ec9\u006e\u0068 \u0073\u1eed\u0061 \u0074\u00ea\u006e \u0074\u1ec7\u0070 {0} \u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069\! +fireworkColor=\u00a74\u0054\u0068\u0061\u006d \u0073\u1ed1 \u0063\u0068\u00e8\u006e \u006b\u0068\u0069 \u006e\u1ea1\u0070 \u0070\u0068\u00e1\u006f \u0068\u006f\u0061 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7\u002c \u0062\u1ea1\u006e \u0070\u0068\u1ea3\u0069 \u0063\u0068\u1ec9\u006e\u0068 \u006d\u00e0\u0075 \u0074\u0072\u01b0\u1edb\u0063. +fireworkEffectsCleared=\u00a76\u004c\u006f\u1ea1\u0069 \u0062\u1ecf \u0074\u1ea5\u0074 \u0063\u1ea3 \u0063\u00e1\u0063 \u0068\u0069\u1ec7\u0075 \u1ee9\u006e\u0067 \u0074\u1eeb \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0111\u0061\u006e\u0067 \u0067\u0069\u1eef. +fireworkSyntax=\u00a76\u0054\u0068\u00f4\u006e\u0067 \u0073\u1ed1 \u0070\u0068\u00e1\u006f \u0068\u006f\u0061\:\u00a7c \u006d\u00e0\u0075\:<\u006d\u00e0\u0075> [fade\:<\u006d\u00e0\u0075>] [shape\:<\u0068\u00ec\u006e\u0068 \u0064\u1ea1\u006e\u0067>] [effect\:<\u0068\u0069\u1ec7\u0075 \u1ee9\u006e\u0067>]\n\u00a76\u0110\u1ec3 \u0073\u1eed \u0064\u1ee5\u006e\u0067 \u006e\u0068\u0069\u1ec1\u0075 \u006d\u00e0\u0075\u002f\u0068\u0069\u1ec7\u0075 \u1ee9\u006e\u0067\u002c \u006e\u0067\u0103\u006e\u0067 \u0063\u00e1\u0063\u0068 \u0063\u0068\u00fa\u006e\u0067 \u0062\u1eb1\u006e\u0067 \u0064\u1ea5\u0075 \u0070\u0068\u1ea9\u0079\: \u00a7cred,blue,pink\n\u00a76\u0048\u00ec\u006e\u0068 \u0064\u1ea1\u006e\u0067\:\u00a7c star, ball, large, creeper, burst \u00a76\u0048\u0069\u1ec7\u0075 \u1ee9\u006e\u0067\:\u00a7c trail, twinkle. +flyMode=\u00a76\u0043\u0068\u1ebf \u0111\u1ed9 \u0062\u0061\u0079 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063\u00a7c {0} \u00a76\u0063\u0068\u006f {1}\u00a76. +flying=\u0042\u0061\u0079 +foreverAlone=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0061\u0069 \u0111\u1ec3 \u0074\u0072\u1ea3 \u006c\u1edd\u0069. +recentlyForeverAlone=\u00a74{0} \u0111\u00e3 \u006e\u0067\u006f\u1ea1\u0069 \u0074\u0075\u0079\u1ebf\u006e. +fullStack=\u00a74\u0042\u1ea1\u006e \u0111\u00e3 \u0063\u00f3 \u0111\u1ea7\u0079 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d. +gameMode=\u00a76\u0043\u0068\u1ebf \u0111\u1ed9\u00a7c {0} \u00a76\u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9\u006e\u0068 \u0063\u0068\u006f \u00a7c{1}\u00a76. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 \u006d\u1ea3\u006e\u0068\u0028\u0063\u0068\u0075\u006e\u006b\u0073\u0029, \u00a7c{3}\u00a76 \u0074\u0068\u1ef1\u0063 \u0074\u0068\u1ec3, \u00a7c{4}\u00a76 \u006b\u0068\u1ed1\u0069. +gcfree=\u00a76\u0042\u1ed9 \u006e\u0068\u1edb \u0074\u0072\u1ed1\u006e\u0067\:\u00a7c {0} MB. +gcmax=\u00a76\u0042\u1ed9 \u006e\u0068\u1edb \u0074\u1ed1\u0069 \u0111\u0061\:\u00a7c {0} MB. +gctotal=\u00a76\u0042\u1ed9 \u006e\u0068\u1edb \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e2\u006e \u0062\u1ed5\:\u00a7c {0} MB. +geoIpUrlEmpty=\u0110\u1ecb\u0061 \u0063\u0068\u1ec9 \u0074\u1ea3\u0069 \u0078\u0075\u1ed1\u006e\u0067 \u0047\u0065\u006f\u0049\u0050 \u0072\u1ed7\u006e\u0067. +geoIpUrlInvalid=\u0110\u1ecb\u0061 \u0063\u0068\u1ec9 \u0074\u1ea3\u0069 \u0078\u0075\u1ed1\u006e\u0067 \u0047\u0065\u006f\u0049\u0050 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +geoipJoinFormat=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u00a7c{0} \u00a76\u0111\u1ebf\u006e \u0074\u1eeb \u00a7c{1}\u00a76. +giveSpawn=\u00a76\u0110\u01b0\u0061\u00a7c {0} \u00a76\u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d\u00a7c {1} \u0063\u0068\u006f\u00a7c {2}\u00a76. +godDisabledFor=\u00a7c\u0074\u1eaf\u0074\u00a76 \u0063\u0068\u006f\u00a7c {0} +godEnabledFor=\u00a7a\u0062\u1ead\u0074\u00a76 \u0063\u0068\u006f\u00a7c {0} +godMode=\u00a76\u0043\u0068\u1ebf \u0111\u1ed9 \u0062\u1ea5\u0074 \u0074\u1eed\u00a7c {0}\u00a76. +groupDoesNotExist=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0061\u0069 \u0111\u0061\u006e\u0067 \u0074\u0072\u1ef1\u0063 \u0074\u0075\u0079\u1ebf\u006e \u0074\u0072\u006f\u006e\u0067 \u006e\u0068\u00f3\u006d\! +groupNumber=\u00a7c{0}\u00a7f \u0111\u0061\u006e\u0067 \u0074\u0072\u1ef1\u0063 \u0074\u0075\u0079\u1ebf\u006e\u002c \u0064\u0061\u006e\u0068 \u0073\u00e1\u0063\u0068 \u0111\u1ea7\u0079 \u0111\u1ee7\:\u00a7c /{1} {2} +hatArmor=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0111\u1ed9\u0069 \u0063\u00e1\u0069 \u006e\u00e0\u0079 \u006e\u0068\u01b0 \u006d\u1ed9\u0074 \u0063\u00e1\u0069 \u006d\u0169\! +hatEmpty=\u00a74\u0042\u1ea1\u006e \u0111\u0061\u006e\u0067 \u006b\u0068\u00f4\u006e\u0067 \u0111\u1ed9\u0069 \u006d\u0169. +hatFail=\u00a74\u0042\u1ea1\u006e \u0063\u1ea7\u006e \u0070\u0068\u1ea3\u0069 \u0063\u1ea7\u006e \u006d\u1ed9\u0074 \u0063\u00e1\u0069 \u0067\u00ec \u0111\u00f3 \u0074\u0072\u00ea\u006e \u0074\u0061\u0079 \u006d\u1edb\u0069 \u0111\u1ed9\u0069 \u0111\u01b0\u1ee3\u0063. +hatPlaced=\u00a76\u0054\u0068\u01b0\u1edf\u006e\u0067 \u0074\u0068\u1ee9\u0063 \u0063\u0068\u0069\u1ebf\u0063 \u006d\u0169 \u006d\u1edb\u0069 \u006e\u00e0\u006f\! +hatRemoved=\u00a76\u004d\u0169 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0067\u1ee1. +haveBeenReleased=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u1ef1 \u0064\u006f. +heal=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0072\u1ecb \u006c\u0069\u1ec7\u0075. +healDead=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u0072\u1ecb \u006c\u0069\u1ec7\u0075 \u0063\u0068\u006f \u006e\u0067\u01b0\u1edd\u0069 \u0111\u00e3 \u0063\u0068\u1ebf\u0074\! +healOther=\u00a76\u0048\u1ed3\u0069 \u0070\u0068\u1ee5\u0063\u00a7c {0}\u00a76. +helpConsole=\u0110\u1ec3 \u006d\u1edf \u0062\u1ea3\u006e\u0067 \u0074\u0072\u1ee3 \u0067\u0069\u00fa\u0070 \u0074\u1eeb \u0062\u1ea3\u006e\u0067 \u0111\u0069\u1ec1\u0075 \u006b\u0068\u0069\u1ec3\u006e \u0028\u0043\u006f\u006e\u0073\u006f\u006c\u0065\u0029\u002c \u0067\u00f5 ?. +helpFrom=\u00a76\u004c\u1ec7\u006e\u0068 \u0074\u1eeb {0}\: +helpLine=\u00a76/{0}\u00a7r\: {1} +helpMatching=\u00a76\u004c\u1ec7\u006e\u0068 \u006b\u0068\u1edb\u0070 "\u00a7c{0}\u00a76"\: +helpOp=\u00a74[\u0054\u0072\u1ee3 \u0067\u0069\u00fa\u0070 \u004f\u0050]\u00a7r \u00a76{0}\:\u00a7r {1} +helpPlugin=\u00a74{0}\u00a7r\: \u0054\u0072\u1ee3 \u0067\u0069\u00fa\u0070 \u0070\u006c\u0075\u0067\u0069\u006e\: /help {1} +holdBook=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u1ea7\u006d \u0073\u00e1\u0063\u0068 \u0063\u00f3 \u0074\u0068\u1ec3 \u0076\u0069\u1ebf\u0074 \u0111\u01b0\u1ee3\u0063. +holdFirework=\u00a74\u0042\u1ea1\u006e \u0063\u1ea7\u006e \u0070\u0068\u1ea3\u0069 \u0063\u1ea7\u006d \u0070\u0068\u00e1\u006f \u0068\u006f\u0061 \u0111\u1ec3 \u0074\u0068\u00ea\u006d \u0068\u0069\u1ec7\u0075 \u1ee9\u006e\u0067. +holdPotion=\u00a74\u0042\u1ea1\u006e \u0063\u1ea7\u006e \u0070\u0068\u1ea3\u0069 \u0063\u1ea7\u006e \u0063\u0068\u0061\u0069 \u0074\u0068\u0075\u1ed1\u0063 \u0111\u1ec3 \u0074\u0068\u0069\u1ebf\u0074 \u006c\u1ead\u0070 \u0068\u0069\u1ec7\u0075 \u1ee9\u006e\u0067 \u006c\u00ea\u006e \u006e\u00f3. +holeInFloor=\u00a74\u0048\u1ed1 \u0074\u1eed \u0074\u0068\u1ea7\u006e\! +homeSet=\u00a76\u0056\u1ecb \u0074\u0072\u00ed \u0068\u0069\u1ec7\u006e \u0074\u1ea1\u0069 \u0111\u00e3 \u0074\u0068\u00e0\u006e\u0068 \u0076\u1ecb \u0074\u0072\u00ed \u006e\u0068\u00e0 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. +homes=\u00a76\u004e\u0068\u00e0\:\u00a7r {0} +hour=\u0067\u0069\u1edd +hours=\u0067\u0069\u1edd +ignoredList=\u00a76\u0044\u0061\u006e\u0068 \u0073\u00e1\u0063\u0068 \u0063\u0068\u1eb7\u006e\:\u00a7r {0} +ignorePlayer=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0063\u0068\u1eb7\u006e\u00a7c {0} \u00a76\u0074\u1eeb \u0067\u0069\u1edd \u0074\u0072\u1edf \u0111\u0069. +illegalDate=\u0110\u1ecb\u006e\u0068 \u0064\u1ea1\u006e\u0067 \u006e\u0067\u00e0\u0079 \u0062\u1ea5\u0074 \u0068\u1ee3\u0070 \u0070\u0068\u00e1\u0070. +infoChapter=\u00a76\u0043\u0068\u1ecd\u006e \u0074\u0072\u0061\u006e\u0067\: +infoChapterPages=\u00a7e ---- \u00a76{0} \u00a7e--\u00a76 \u0054\u0072\u0061\u006e\u0067 \u00a7c{1}\u00a76 \u0063\u1ee7\u0061 \u00a7c{2} \u00a7e---- +infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 \u0054\u0072\u0061\u006e\u0067 \u00a7c{0}\u00a76/\u00a7c{1} \u00a7e---- +infoUnknownChapter=\u00a74\u0054\u0072\u0061\u006e\u0067 \u006b\u0068\u00f4\u006e\u0067 \u0078\u00e1\u0063 \u0111\u1ecb\u006e\u0068. +insufficientFunds=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0111\u1ee7 \u0074\u0069\u1ec1\u006e. +invalidCharge=\u00a74\u0050\u0068\u00ed \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +invalidFireworkFormat=\u00a74\u0054\u0068\u0069\u1ebf\u0074 \u006c\u1ead\u0070 \u00a7c{0} \u00a74\u006c\u00e0 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7 \u0076\u1edb\u0069 \u00a7c{1}\u00a74. +invalidHome=\u00a74\u004e\u0068\u00e0\u00a7c {0} \u00a74\u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7\! +invalidHomeName=\u00a74\u0054\u00ea\u006e \u006e\u0068\u00e0 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7\! +invalidMob=\u00a74\u004c\u006f\u1ea1\u0069 \u0071\u0075\u00e1\u0069 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +invalidNumber=\u0053\u1ed1 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +invalidPotion=\u00a74\u0054\u0068\u0075\u1ed1\u0063 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +invalidPotionMeta=\u00a74\u0054\u0068\u00f4\u006e\u0067 \u0074\u0069\u006e \u0074\u0068\u0075\u1ed1\u0063 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7\: \u00a7c{0}\u00a74. +invalidSignLine=\u00a74\u0044\u00f2\u006e\u0067\u00a7c {0} \u00a74\u0074\u0072\u00ea\u006e \u0062\u1ea3\u006e\u0067 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +invalidWarpName=\u00a74\u0054\u00ea\u006e \u006b\u0068\u0075 \u0076\u1ef1\u0063 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7\! +invalidWorld=\u00a74\u0054\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +is=\u006c\u01b0\u0075 \u0067\u0069\u1eef +itemCannotBeSold=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0062\u00e1\u006e \u0074\u0072\u00ea\u006e \u006d\u00e1\u0079 \u0063\u0068\u1ee7. +itemMustBeStacked=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0111\u1ed5\u0069 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u1ea3\u0069 \u0111\u1ea7\u0079\u002e \u004d\u1ed9\u0074 \u0073\u1ed1 \u006c\u01b0\u1ee3\u006e\u0067 \u0111\u1ea7\u0079 \u0068\u01a1\u006e \u006e\u00f3 \u0073\u1ebd \u0074\u0068\u00e0\u006e\u0068 \u0068\u0061\u0069\u002c \u0076\u002e\u0076\u002e\u002e\u002e. +itemNames=\u00a76\u0054\u00ea\u006e \u0074\u0068\u0075 \u0067\u1ecd\u006e\:\u00a7r {0} +itemNotEnough1=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0111\u1ee7 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0111\u1ec3 \u0062\u00e1\u006e. +itemNotEnough2=\u00a76\u004e\u1ebf\u0075 \u0062\u1ea1\u006e \u006d\u0075\u1ed1\u006e \u0062\u00e1\u006e \u0074\u1ea5\u0074 \u0063\u1ea3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0063\u00f9\u006e\u0067 \u006c\u006f\u1ea1\u0069\u002c \u0068\u00e3\u0079 \u0064\u00f9\u006e\u0067 \u002f\u0073\u0065\u006c\u006c \u003c\u0074\u00ea\u006e \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d\u003e. +itemNotEnough3=\u00a76\u002f\u0073\u0065\u006c\u006c \u003c\u0074\u00ea\u006e \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d\u003e \u002d\u0111\u0069\u1ec1\u0075 \u006e\u00e0\u0079 \u0073\u1ebd \u0062\u00e1\u006e \u0074\u1ea5\u0074 \u0063\u1ea3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0063\u00f9\u006e\u0067 \u006c\u006f\u1ea1\u0069. +itemSellAir=\u0042\u1ea1\u006e \u0111\u0061\u006e\u0067 \u0063\u1ed1 \u0067\u1eaf\u006e\u0067 \u0111\u1ec3 \u0062\u00e1\u006e \u006b\u0068\u00f4\u006e\u0067 \u006b\u0068\u00ed\u003f \u0110\u1ec3 \u006e\u00f3 \u006c\u00ea\u006e \u0074\u0061\u0079 \u0062\u1ea1\u006e \u0111\u0069. +itemSold=\u00a7a\u0110\u00e3 \u0062\u00e1\u006e \u0111\u01b0\u1ee3\u0063 \u00a7c{0} \u00a7a({1} {2} \u0076\u1edb\u0069 {3} \u006d\u1ed7\u0069 \u0063\u00e1\u0069). +itemSoldConsole=\u00a7a{0} \u00a7a\u0111\u00e3 \u0062\u00e1\u006e {1} \u0076\u00e0 \u006e\u0068\u1ead\u006e \u0111\u01b0\u1ee3\u0063 \u00a7a{2} \u00a7a({3} \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u1edb\u0069 {4} \u006d\u1ed7\u0069 \u0063\u00e1\u0069). +itemSpawn=\u00a76\u0043\u0068\u006f\u00a7c {0} \u00a76\u0063\u00e1\u0069\u00a7c {1} +itemType=\u00a76\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d\:\u00a7c {0} \u00a76-\u00a7c {1} +itemsCsvNotLoaded=\u004b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u1ea3\u0069 \u0074\u1ec7\u0070 items.csv\! +jailAlreadyIncarcerated=\u00a74\u004e\u0067\u01b0\u1edd\u0069 \u006e\u00e0\u0079 \u0111\u00e3 \u0062\u1ecb \u0067\u0069\u0061\u006d\:\u00a7c {0} +jailMessage=\u00a74\u0042\u1ea1\u006e \u0070\u0068\u1ea1\u006d \u0074\u1ed9\u0069\u002c \u0062\u1ea1\u006e \u0062\u1ecb \u0070\u0068\u1ea1\u0074 \u0074\u00f9. +jailNotExist=\u00a74\u004e\u0068\u00e0 \u0074\u00f9 \u0111\u00f3 \u006b\u0068\u00f4\u006e\u0067 \u0074\u1ed3\u006e \u0074\u1ea1\u0069. +jailReleased=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u00a7c{0}\u00a76 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0068\u1ea3. +jailReleasedPlayerNotify=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0068\u1ea3\! +jailSentenceExtended=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0062\u1ecb \u0062\u1eaf\u0074 \u0067\u0069\u0061\u006d \u006b\u00e9\u006f \u0064\u00e0\u0069 \u0111\u1ebf\u006e \u00a7c{0}\u00a76. +jailSet=\u00a76\u004e\u0067\u1ee5\u0063\u00a7c {0} \u00a76\u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0068\u0069\u1ebf\u0074 \u006c\u1ead\u0070. +jumpError=\u00a74\u0110\u0069\u1ec1\u0075 \u006e\u00e0\u0079 \u0073\u1ebd \u0074\u1ed5\u006e \u0074\u0068\u01b0\u01a1\u006e\u0067 \u0062\u1ed9 \u006e\u00e3\u006f \u0063\u1ee7\u0061 \u006d\u00e1\u0079 \u0074\u00ed\u006e\u0068 \u0062\u1ea1\u006e \u0111\u1ea5\u0079. +kickDefault=\u0110\u00e1 \u006b\u0068\u1ecf\u0069 \u006d\u00e1\u0079 \u0063\u0068\u1ee7. +kickExempt=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0111\u00e1 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u00e0\u0079. +kickedAll=\u00a74\u0110\u00e1 \u0074\u1ea5\u0074 \u0063\u1ea3 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0072\u0061 \u006b\u0068\u1ecf\u0069 \u006d\u00e1\u0079 \u0063\u0068\u1ee7. +kill=\u00a76\u0110\u00e3 \u0067\u0069\u1ebf\u0074\u00a7c {0}\u00a76. +killExempt=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0067\u0069\u1ebf\u0074 \u00a7c{0}\u00a74. +kitCost=\ \u00a77\u00a7o({0})\u00a7r +kitError2=\u00a74\u0042\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u0028\u006b\u0069\u0074\u0029 \u006e\u00e0\u0079 \u0111\u00e3 \u0062\u1ecb \u0073\u0061\u0069\u002c \u0068\u00e3\u0079 \u006c\u0069\u00ea\u006e \u0068\u1ec7 \u0076\u1edb\u0069 \u0071\u0075\u1ea3\u006e \u0074\u0072\u1ecb \u0076\u0069\u00ea\u006e. +kitError=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u0028\u006b\u0069\u0074\u0029 \u0068\u1ee3\u0070 \u006c\u1ec7. +kitGiveTo=\u00a76\u0110\u01b0\u0061 \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5\u00a7c {0}\u00a76 \u0063\u0068\u006f \u00a7c{1}\u00a76. +kitInvFull=\u00a74\u0054\u00fa\u0069 \u0111\u1ed3 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0111\u00e3 \u0111\u1ea7\u0079\u002c \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u0073\u1ebd \u0111\u1eb7\u0074 \u006c\u1ea1\u0069 \u0074\u0072\u00ea\u006e \u0111\u1ea5\u0074. +kitNotFound=\u00a74\u0042\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0074\u1ed3\u006e \u0074\u1ea1\u0069. +kitOnce=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0064\u00f9\u006e\u0067 \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u006e\u00e0\u0079 \u006c\u1ea7\u006e \u006e\u1eef\u0061. +kitReceive=\u00a76\u0110\u00e3 \u006e\u0068\u1ead\u006e \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5\u00a7c {0}\u00a76. +kitTimed=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0064\u00f9\u006e\u0067 \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u006e\u00e0\u0079 \u0074\u0072\u006f\u006e\u0067\u00a7c {0}\u00a74. +kits=\u00a76\u0042\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5\:\u00a7r {0} +leatherSyntax=\u00a76\u0043\u00fa \u0070\u0068\u00e1\u0070 \u0111\u1ed5\u0069 \u006d\u00e0\u0075 \u0064\u0061 \u0074\u0068\u0075\u1ed9\u0063\: color\:<\u0111\u1ecf>,<\u006c\u1ee5\u0063>,<\u006c\u0061\u006d> eg\: color\:255,0,0 \u0068\u006f\u1eb7\u0063 color\: eg\: color\:16777011 +lightningSmited=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0073\u00e9\u0074 \u0111\u00e1\u006e\u0068\! +lightningUse=\u00a76\u0053\u00e9\u0074 \u0111\u00e1\u006e\u0068\u00a7c {0} +listAfkTag=\u00a77[Treo mรกy]\u00a7r +listAmount=\u00a76\u0043\u00f3 \u00a7c{0}\u00a76 \u0074\u0072\u006f\u006e\u0067 \u0074\u1ed1\u0069 \u0111\u0061 \u00a7c{1}\u00a76 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0074\u0072\u1ef1\u0063 \u0074\u0075\u0079\u1ebf\u006e. +listAmountHidden=\u00a76\u0043\u00f3 \u00a7c{0}\u00a76/{1}\u00a76 \u0074\u0072\u006f\u006e\u0067 \u0074\u1ed1\u0069 \u0111\u0061 \u00a7c{2}\u00a76 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0074\u0072\u1ef1\u0063 \u0074\u0075\u0079\u1ebf\u006e. +listGroupTag=\u00a76{0}\u00a7r\: \u00a7r +listHiddenTag=\u00a77[\u1ea8\u006e \u0074\u0068\u00e2\u006e]\u00a7r +loadWarpError=\u00a74\u0054\u1ea3\u0069 \u006b\u0068\u0075 \u0076\u1ef1\u0063 {0} \u00a47\u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069. +localFormat=[L]<{0}> {1} +mailClear=\u00a76\u0110\u1ec3 \u0078\u00f3\u0061 \u0074\u0068\u01b0\u002c \u0067\u00f5\u00a7c /mail clear\u00a76. +mailCleared=\u00a76\u0110\u00e3 \u0064\u1ecd\u006e \u0074\u0068\u01b0\! +mailSent=\u00a76\u0110\u00e3 \u0067\u1eed\u0069 \u0074\u0068\u01b0\! +markMailAsRead=\u00a76\u0110\u1ec3 \u0111\u00e1\u006e\u0068 \u0064\u1ea5\u0075 \u0074\u0068\u01b0 \u0111\u00e3 \u0111\u1ecd\u0063\u002c \u0067\u00f5\u00a7c /mail clear\u00a76. +markedAsAway=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0111\u00e1\u006e\u0068 \u0064\u1ea5\u0075 \u0063\u0068\u00fa\u006e\u0067. +markedAsNotAway=\u00a76\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f2\u006e \u0111\u00e1\u006e\u0068 \u0064\u1ea5\u0075 \u0063\u0068\u00fa\u006e\u0067 \u006e\u1eef\u0061. +matchingIPAddress=\u00a76\u004e\u0068\u1eef\u006e\u0067 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0073\u0061\u0075 \u0111\u00e2\u0079 \u0111\u0103\u006e\u0067 \u006e\u0068\u1ead\u0070 \u0074\u1ef1 \u0111\u1ecb\u0061 \u0063\u0068\u1ec9 \u0049\u0050 \u0074\u0072\u00ea\u006e\: +maxHomes=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0111\u1eb7\u0074 \u006e\u0068\u0069\u1ec1\u0075 \u0068\u01a1\u006e\u00a7c {0} \u00a74\u006e\u0068\u00e0. +mayNotJail=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0067\u0069\u0061\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u00e0\u0079\! +me=\u0074\u00f4\u0069 +minute=\u0070\u0068\u00fa\u0074 +minutes=\u0070\u0068\u00fa\u0074 +missingItems=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u00a7c{0}x {1}\u00a74. +mobSpawnError=\u00a74\u0043\u00f3 \u006c\u1ed7\u0069 \u0078\u1ea3\u0079 \u0072\u0061 \u006b\u0068\u0069 \u0074\u0068\u0061\u0079 \u0111\u1ed5\u0069 \u006c\u1ed3\u006e\u0067 \u0071\u0075\u00e1\u0069. +mobSpawnLimit=\u0053\u1ed1 \u006c\u01b0\u1ee3\u006e\u0067 \u0071\u0075\u00e1\u0069 \u0062\u1ecb \u0067\u0069\u1edb\u0069 \u0068\u1ea1\u006e \u0074\u0072\u00ea\u006e \u006d\u00e1\u0079 \u0063\u0068\u1ee7. +mobSpawnTarget=\u00a74\u0110\u1ed1\u0069 \u0074\u01b0\u1ee3\u006e\u0067 \u0070\u0068\u1ea3\u0069 \u006c\u00e0 \u006d\u1ed9\u0074 \u006c\u1ed3\u006e\u0067 \u0071\u0075\u00e1\u0069. +mobsAvailable=\u00a76Mobs\u0051\u0075\u00e1\u0069\:\u00a7r {0} +moneyRecievedFrom=\u00a7a\u004e\u0068\u1ead\u006e \u0111\u01b0\u1ee3\u0063 {0} \u0074\u1eeb {1}. +moneySentTo=\u00a7a\u0110\u00e3 \u0067\u1eed\u0069{0} \u0111\u1ebf\u006e {1}. +month=\u0074\u0068\u00e1\u006e\u0067 +months=\u0074\u0068\u00e1\u006e\u0067 +moreThanZero=\u00a74\u0053\u1ed1 \u006c\u01b0\u1ee3\u006e\u0067 \u0070\u0068\u1ea3\u0069 \u006c\u1edb\u006e \u0068\u01a1\u006e \u0030. +moveSpeed=\u00a76\u0110\u00e3 \u0063\u0068\u1ec9\u006e\u0068 \u0074\u1ed1\u0063 \u0111\u1ed9 {0} \u0074\u0068\u00e0\u006e\u0068\u00a7c {1} \u00a76\u0063\u0068\u006f \u00a7c{2}\u00a76. +msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2} +multipleCharges=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u0068\u00ea\u006d \u006e\u0068\u0069\u1ec1\u0075 \u0068\u01a1\u006e \u0031 \u0076\u0069\u1ec7\u0063 \u0063\u0068\u006f \u0070\u0068\u00e1\u006f \u0068\u006f\u0061 \u006e\u00e0\u0079. +multiplePotionEffects=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0111\u1eb7\u0074 \u006e\u0068\u0069\u1ec1\u0075 \u0068\u01a1\u006e \u006d\u1ed9\u0074 \u0068\u0069\u1ec7\u0075 \u1ee9\u006e\u0067 \u0063\u0068\u006f \u0074\u0068\u0075\u1ed1\u0063 \u006e\u00e0\u0079. +muteExempt=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u1ea5\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u00e0\u0079 \u006e\u00f3\u0069 \u0063\u0068\u0075\u0079\u1ec7\u006e. +muteNotify=\u00a7c{0} \u00a76\u0111\u00e3 \u0063\u1ea5\u006d \u00a7c{1}\u00a76 \u006e\u00f3\u0069 \u0063\u0068\u0075\u0079\u1ec7\u006e. +muteNotifyFor=\u00a7c{0} \u00a76\u0111\u00e3 \u0063\u1ea5\u006d \u00a7c{1}\u00a76 \u006e\u00f3\u0069 \u0063\u0068\u0075\u0079\u1ec7\u006e \u0074\u0072\u006f\u006e\u0067\u00a7c {2}\u00a76. +mutedPlayer=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u0062\u1ecb \u0063\u1ea5\u006d \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e. +mutedPlayerFor=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0062\u1ecb \u0063\u1ea5\u006d \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e \u0074\u0072\u006f\u006e\u0067\u00a7c {1}\u00a76. +mutedUserSpeaks={0} \u0111\u0061\u006e\u0067 \u0063\u1ed1 \u0067\u1eaf\u006e\u0067 \u006e\u00f3\u0069\u002c \u006e\u0068\u01b0\u006e\u0067 \u0111\u00e3 \u0062\u1ecb \u0063\u1ea5\u006d. +nearbyPlayers=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u1edf \u0067\u1ea7\u006e\:\u00a7r {0} +negativeBalanceError=\u00a74\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0063\u00f3 \u0073\u1ed1 \u0064\u01b0 \u00e2\u006d. +nickChanged=\u00a76\u0042\u0069\u1ec7\u0074 \u0064\u0061\u006e\u0068 \u0074\u0068\u0061\u0079 \u0111\u1ed5\u0069. +nickDisplayName=\u00a74\u0042\u1ea1\u006e \u0070\u0068\u1ea3\u0069 \u006b\u00ed\u0063\u0068 \u0068\u006f\u1ea1\u0074 change-displayname \u0074\u0072\u006f\u006e\u0067 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 Essentials. +nickInUse=\u00a74\u0054\u00ea\u006e \u006e\u00e0\u0079 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0073\u1eed \u0064\u1ee5\u006e\u0067. +nickNamesAlpha=\u00a74\u0042\u0069\u1ec7\u0074 \u0064\u0061\u006e\u0068 \u0063\u0068\u1ec9 \u0063\u0068\u1ee9\u0061 \u0063\u0068\u1eef \u0076\u00e0 \u0073\u1ed1. +nickNoMore=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u006d\u1ea5\u0074 \u0062\u0069\u1ec7\u0074 \u0064\u0061\u006e\u0068 \u0063\u1ee7\u0061 \u006d\u00ec\u006e\u0068. +nickSet=\u00a76\u0042\u0069\u1ec7\u0074 \u0064\u0061\u006e\u0068 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0067\u0069\u1edd \u006c\u00e0 \u00a7c{0}\u00a76. +nickTooLong=\u00a74\u0042\u0069\u1ec7\u0074 \u0064\u0061\u006e\u0068 \u006e\u00e0\u0079 \u0071\u0075\u00e1 \u0064\u00e0\u0069. +noAccessCommand=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3 \u0064\u00f9\u006e\u0067 \u006c\u1ec7\u006e\u0068 \u006e\u00e0\u0079. +noAccessPermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0074\u0072\u0075\u0079 \u0063\u1ead\u0070 \u0076\u00e0\u006f \u00a7c{0}\u00a74. +noBreakBedrock=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0070\u0068\u00e1 \u0076\u1ee1 \u0111\u00e1 \u006e\u1ec1\u006e. +noDestroyPermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3 \u0070\u0068\u00e1 \u006b\u0068\u1ed1\u0069 \u00a7c{0}\u00a74. +noDurability=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0111\u1ed9 \u0062\u1ec1\u006e. +noGodWorldWarning=\u00a74\u0043\u0068\u00fa \u00fd\! \u0043\u0068\u1ebf \u0111\u1ed9 \u0062\u1ea5\u0074 \u0074\u1eed \u0111\u00e3 \u0062\u1ecb \u0074\u1eaf\u0074 \u0074\u0072\u006f\u006e\u0067 \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u006e\u00e0\u0079. +noHelpFound=\u00a74\u004c\u1ec7\u006e\u0068 \u006b\u0068\u00f4\u006e\u0067 \u006b\u0068\u1edb\u0070. +noHomeSetPlayer=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0063\u0068\u01b0\u0061 \u0111\u1eb7\u0074 \u0076\u1ecb \u0074\u0072\u00ed \u006e\u0068\u00e0. +noIgnored=\u00a76\u0042\u1ea1\u006e \u0063\u0068\u01b0\u0061 \u0063\u0068\u1eb7\u006e \u0061\u0069 \u0063\u1ea3. +noKitPermission=\u00a74\u0042\u1ea1\u006e \u0063\u1ea7\u006e \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u00a7c{0}\u00a74 \u0111\u1ec3 \u0064\u00f9\u006e\u0067 \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u006e\u00e0\u0079. +noKits=\u00a76\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u006e\u00e0\u006f \u0063\u00f3 \u0073\u1eb5\u006e. +noMail=\u00a76\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0062\u1ee9\u0063 \u0074\u0068\u01b0 \u006e\u00e0\u006f. +noMatchingPlayers=\u00a76\u004b\u0068\u00f4\u006e\u0067 \u0074\u00ec\u006d \u0074\u0068\u1ea5\u0079 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0070\u0068\u00f9 \u0068\u1ee3\u0070. +noMetaFirework=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1eb7\u0074 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u0070\u0068\u00e1\u006f \u0068\u006f\u0061. +noMetaPerm=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1eb7\u0074 \u0063\u1ea5\u0075 \u0068\u00ec\u006e\u0068 \u00a7c{0}\u00a74 \u0063\u0068\u006f \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006e\u00e0\u0079. +noNewMail=\u00a76\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0074\u0068\u01b0 \u006d\u1edb\u0069. +noPendingRequest=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0063\u0068\u1edd \u0067\u0069\u1ea3\u0069 \u0071\u0075\u0079\u1ebf\u0074. +noPerm=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u00a7c{0}\u00a74. +noPermToAFKMessage=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1eb7\u0074 \u0074\u0068\u00f4\u006e\u0067 \u0062\u00e1\u006f \u0054\u0072\u0065\u006f \u006d\u00e1\u0079. +noPermToSpawnMob=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0073\u0069\u006e\u0068 \u0072\u0061 \u0071\u0075\u00e1\u0069 \u006e\u00e0\u0079. +noPlacePermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1eb7\u0074 \u006b\u0068\u1ed1\u0069 \u1edf \u0067\u1ea7\u006e \u0063\u00e1\u0069 \u0062\u1ea3\u006e\u0067 \u006b\u0069\u0061. +noPotionEffectPerm=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3 \u0111\u1eb7\u0074 \u0068\u0069\u1ec7\u0075 \u1ee9\u006e\u0067 \u00a7c{0} \u00a74to this potion. +noPowerTools=\u00a76\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0063\u00f4\u006e\u0067 \u0063\u1ee5 \u0111\u0069\u1ec7\u006e \u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068. +noWarpsDefined=\u00a76\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u006b\u0068\u0075 \u0076\u1ef1\u0063 \u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068. +none=\u006b\u0068\u00f4\u006e\u0067 \u0061\u0069 +notAcceptingPay=\u00a74{0} \u00a74\u006b\u0068\u00f4\u006e\u0067 \u0063\u0068\u1ea5\u0070 \u006e\u0068\u1ead\u006e \u0074\u0068\u0061\u006e\u0068 \u0074\u006f\u00e1\u006e. +notAllowedToQuestion=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0073\u1eed \u0064\u1ee5\u006e\u0067 \u0063\u00e2\u0075 \u0068\u1ecf\u0069. +notAllowedToShout=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0068\u00e9\u0074 \u006c\u00ea\u006e. +notEnoughExperience=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0111\u1ee7 \u006b\u0069\u006e\u0068 \u006e\u0067\u0068\u0069\u1ec7\u006d. +notEnoughMoney=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0111\u1ee7 \u0074\u0069\u1ec1\u006e. +notFlying=\u006b\u0068\u00f4\u006e\u0067 \u0062\u0061\u0079 +notRecommendedBukkit=\u00a74* \! * \u0050\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0042\u0075\u006b\u006b\u0069\u0074 \u006b\u0068\u00f4\u006e\u0067 \u0070\u0068\u1ea3\u0069 \u006c\u00e0 \u0070\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0063\u1ea7\u006e \u0074\u0068\u0069\u1ebf\u0074 \u0063\u0068\u006f \u0045\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073. +notSupportedYet=\u0043\u0068\u01b0\u0061 \u0111\u01b0\u1ee3\u0063 \u0068\u1ed7 \u0074\u0072\u1ee3. +nothingInHand=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0067\u00ec \u0074\u0072\u006f\u006e\u0067 \u0074\u0061\u0079. +now=\u0062\u00e2\u0079 \u0067\u0069\u1edd +nuke=\u00a75\u004d\u01b0\u0061 \u0074\u0068\u0075\u1ed1\u0063 \u006e\u1ed5 \u0068\u1ee1\u0069\u007e. +numberRequired=\u0050\u0068\u1ea3\u0069 \u0063\u00f3 \u006d\u1ed9\u0074 \u0063\u006f\u006e \u0073\u1ed1 \u1edf \u0111\u00f3\u002c \u0074\u0068\u1ead\u0074 \u006e\u0067\u1edb \u006e\u0067\u1ea9\u006e. +onlyDayNight=/\u0043\u0068\u1ec9 \u0068\u1ed5 \u0074\u0072\u1ee3 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u006e\u0067\u00e0\u0079 \u0076\u00e0 \u0111\u00ea\u006d \u0028\u0064\u0061\u0079\u002f\u006e\u0069\u0067\u0068\u0074\u0029. +onlyPlayerSkulls=\u00a74\u0042\u1ea1\u006e \u0063\u0068\u1ec9 \u0063\u00f3 \u0074\u0068\u1ec3 \u0074\u0068\u0069\u1ebf\u0070 \u006c\u1ead\u0070 \u0063\u0068\u1ee7 \u006e\u0068\u00e2\u006e \u0063\u1ee7\u0061 \u0063\u00e1\u0069 \u0073\u1ecd \u006e\u00e0\u0079 (\u00a7c397\:3\u00a74). +onlyPlayers=\u00a74\u0043\u0068\u1ec9 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0074\u0072\u006f\u006e\u0067 \u0074\u0072\u00f2 \u0063\u0068\u01a1\u0069 \u0063\u00f3 \u0074\u0068\u1ec3 \u0064\u00f9\u006e\u0067 \u00a7c{0}\u00a74. +onlySunStorm=\u00a74/\u0043\u0068\u1ec9 \u0068\u1ed5 \u0074\u0072\u1ee3 \u0074\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0062\u00e3\u006f \u0076\u00e0 \u006e\u1eaf\u006e\u0067. +orderBalances=\u00a76\u0110\u0061\u006e\u0067 \u0074\u00ed\u006e\u0068 \u0074\u006f\u00e1\u006e \u0073\u1ed1 \u0064\u01b0 \u0063\u1ee7\u0061\u00a7c {0} \u00a76\u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u002c \u0078\u0069\u006e \u0111\u1ee3\u0069\u002e\u002e\u002e +oversizedTempban=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u1ea5\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0074\u0072\u006f\u006e\u0067 \u006c\u00fa\u0063 \u006e\u00e0\u0079. +payConfirmToggleOn=\u00a76\u0054\u1eeb \u0067\u0069\u1edd\u002c \u0062\u1ea1\u006e \u0073\u1ebd \u0062\u1ecb \u006e\u0068\u1eaf\u0063 \u0078\u00e1\u0063 \u006e\u0068\u1ead\u006e \u0074\u0068\u0061\u006e\u0068 \u0074\u006f\u00e1\u006e. +payConfirmToggleOff=\u00a76\u0054\u1eeb \u0067\u0069\u1edd\u002c \u0062\u1ea1\u006e \u0073\u1ebd \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f2\u006e \u0062\u1ecb \u006e\u0068\u1eaf\u0063 \u0078\u00e1\u0063 \u006e\u0068\u1ead\u006e \u0074\u0068\u0061\u006e\u0068 \u0074\u006f\u00e1\u006e. +payToggleOn=\u00a76\u0042\u00e2\u0079 \u0067\u0069\u1edd \u0062\u1ea1\u006e \u0063\u0068\u1ea5\u0070 \u006e\u0068\u1ead\u006e \u0074\u0068\u0061\u006e\u0068 \u0074\u006f\u00e1\u006e. +payToggleOff=\u00a76\u0042\u00e2\u0079 \u0067\u0069\u1edd \u0062\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f2\u006e \u0063\u0068\u1ea5\u0070 \u006e\u0068\u1ead\u006e \u0074\u0068\u0061\u006e\u0068 \u0074\u006f\u00e1\u006e. +payMustBePositive=\u00a74\u0053\u1ed1 \u006c\u01b0\u1ee3\u006e\u0067 \u0070\u0068\u1ea3\u0069 \u006c\u00e0 \u0064\u01b0\u01a1\u006e\u0067. +pTimeCurrent=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0063\u1ee7\u0061 \u00a7c{0}\u00a76 \u006c\u00e0\u00a7c {1}\u00a76. +pTimeCurrentFixed=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0063\u1ee7\u0061 \u00a7c{0}\u00a76 \u0111\u01b0\u1ee3\u0063 \u0073\u1eed\u0061 \u0074\u0068\u00e0\u006e\u0068\u00a7c {1}\u00a76. +pTimeNormal=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0063\u1ee7\u0061 \u00a7c{0}\u00a76 \u006c\u00e0 \u0062\u00ec\u006e\u0068 \u0074\u0068\u01b0\u1edd\u006e\u0067 \u0076\u00e0 \u006b\u0068\u1edb\u0070 \u0076\u1edb\u0069 \u0067\u0069\u1edd \u0063\u1ee7\u0061 \u006d\u00e1\u0079 \u0063\u0068\u1ee7. +pTimeOthersPermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0111\u1eb7\u0074 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0063\u1ee7\u0061 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006b\u0068\u00e1\u0063. +pTimePlayers=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0063\u00f3 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0072\u0069\u00ea\u006e\u0067\:\u00a7r +pTimeReset=\u00a76\u0110\u00e3 \u006c\u00e0\u006d \u006d\u1edb\u0069 \u006c\u1ea1\u0069 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0063\u0068\u006f\: \u00a7c{0} +pTimeSet=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0111\u1eb7\u0074 \u0074\u0068\u00e0\u006e\u0068 \u00a7c{0}\u00a76 \u0063\u0068\u006f\: \u00a7c{1}. +pTimeSetFixed=\u00a76\u0110\u00e3 \u0073\u1eed\u0061 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0074\u0068\u00e0\u006e\u0068 \u00a7c{0}\u00a76 \u0063\u0068\u006f\: \u00a7c{1}. +pWeatherCurrent=\u00a76\u0054\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0063\u1ee7\u0061 \u00a7c{0}\u00a76 \u006c\u00e0\u00a7c {1}\u00a76. +pWeatherInvalidAlias=\u00a74\u0054\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7 +pWeatherNormal=\u00a76\u0054\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0063\u1ee7\u0061\u00a7c{0}\u00a76 \u006c\u00e0 \u0062\u00ec\u006e\u0068 \u0074\u0068\u01b0\u1edd\u006e\u0067 \u0076\u00e0 \u006b\u0068\u1edb\u0070 \u0076\u1edb\u0069 \u006d\u00e1\u0079 \u0063\u0068\u1ee7. +pWeatherOthersPermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0111\u1eb7\u0074 \u0074\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0063\u0068\u006f \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006b\u0068\u00e1\u0063. +pWeatherPlayers=\u00a76\u004e\u0068\u1eef\u006e\u0067 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0063\u00f3 \u0074\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0072\u0069\u00ea\u006e\u0067\:\u00a7r +pWeatherReset=\u00a76\u0054\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u006c\u00e0\u006d \u006d\u1edb\u0069 \u0063\u0068\u006f\: \u00a7c{0} +pWeatherSet=\u00a76\u0054\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0111\u1eb7\u0074 \u0074\u0068\u00e0\u006e\u0068 \u00a7c{0}\u00a76 \u0063\u0068\u006f\: \u00a7c{1}. +pendingTeleportCancelled=\u00a74\u0056\u0069\u1ec7\u0063 \u0078\u1eed \u006c\u00ed \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u00e3 \u0062\u1ecb \u0068\u1ee7\u0079. +playerBanIpAddress=\u00a76\u004e\u0067\u01b0\u1edf\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u006b\u0068\u00f3\u0061 \u0111\u1ecb\u0061 \u0063\u0068\u1ec9\u00a7c {1} \u00a76\u0076\u00ec\: \u00a7c{2}\u00a76. +playerBanned=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u0063\u1ea5\u006d\u00a7c {1} \u00a76\u0076\u00ec\: \u00a7c{2}\u00a76. +playerInJail=\u00a74\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u00e0\u0079 \u0111\u00e3 \u1edf \u0074\u0072\u006f\u006e\u0067 \u0074\u00f9\u00a7c {0}\u00a74. +playerJailed=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76jailed. +playerJailedFor=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0062\u1ecb \u006e\u0068\u1ed1\u0074 \u0074\u0072\u006f\u006e\u0067 {1}. +playerKicked=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u0111\u00e1 {1} \u0076\u00ec {2}. +playerMuted=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0063\u1ea5\u006d \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e\! +playerMutedFor=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0063\u1ea5\u006d \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e \u0074\u0072\u006f\u006e\u0067\u00a7c {0}. +playerNeverOnServer=\u00a74\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a74\u0063\u0068\u01b0\u0061 \u0062\u0061\u006f \u0067\u0069\u1edd \u0076\u00e0\u006f \u006d\u00e1\u0079 \u0063\u0068\u1ee7. +playerNotFound=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0074\u00ec\u006d \u0074\u0068\u1ea5\u0079 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069. +playerUnbanIpAddress=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u006d\u1edf \u006b\u0068\u00f3\u0061 \u0111\u1ecb\u0061 \u0063\u0068\u1ec9\: {1}. +playerUnbanned=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u006d\u1edf \u006b\u0068\u00f3\u0061\u00a7c {1}. +playerUnmuted=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f2\u006e \u0062\u1ecb \u006b\u0068\u00f3\u0061 \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e. +pong=Pong\! +posPitch=\u00a76Pitch\: {0} (\u0047\u00f3\u0063 \u0111\u1ea7\u0075) +posX=\u00a76X\: {0} (\u002b\u0110\u00f4\u006e\u0067 \u003c\u002d\u003e \u002d\u0054\u00e2\u0079) +posY=\u00a76Y\: {0} (\u002b\u004c\u00ea\u006e \u003c\u002d\u003e \u002d\u0058\u0075\u1ed1\u006e\u0067) +posYaw=\u00a76Yaw\: {0} (\u0056\u00f2\u006e\u0067 \u0078\u006f\u0061\u0079) +posZ=\u00a76Z\: {0} (\u002b\u004e\u0061\u006d \u003c\u002d\u003e \u002d\u0042\u1eaf\u0063) +possibleWorlds=\u00a76\u004e\u0068\u1eef\u006e\u0067 \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u0068\u0069\u1ec7\u006e \u0063\u00f3 \u006c\u00e0 \u0074\u1eeb \u00a7c0\u00a76 \u0111\u1ebf\u006e \u00a7c{0}\u00a76. +potions=\u00a76\u004c\u006f\u1ea1\u0069 \u0074\u0068\u0075\u1ed1\u0063\:\u00a7r {0}\u00a76. +powerToolAir=\u00a74\u004c\u1ec7\u006e\u0068 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ebf \u0067\u1eaf\u006e \u0076\u00e0\u006f \u006b\u0068\u00f4\u006e\u0067 \u006b\u0068\u00ed \u0028\u0041\u0069\u0072\u0029. +powerToolAlreadySet=\u00a74\u004c\u1ec7\u006e\u0068 \u00a7c{0}\u00a74 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068 \u0063\u0068\u006f \u00a7c{1}\u00a74. +powerToolAttach=\u00a76\u004c\u1ec7\u006e\u0068 \u00a7c{0}\u00a76 \u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068 \u0063\u0068\u006f {1}. +powerToolClearAll=\u00a76\u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068 \u0063\u0068\u006f. +powerToolList=\u00a76\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u00a7c{1} \u00a76\u0063\u00f3 \u006e\u0068\u1eef\u006e\u0067 \u006c\u1ec7\u006e\u0068 \u0073\u0061\u0075\: \u00a7c{0}\u00a76. +powerToolListEmpty=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u00a7c{0} \u00a74\u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068 \u006c\u1ec7\u006e\u0068 \u006e\u00e0\u006f. +powerToolNoSuchCommandAssigned=\u00a74\u004c\u1ec7\u006e\u0068 \u00a7c{0}\u00a74 \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068 \u0063\u0068\u006f \u00a7c{1}\u00a74. +powerToolRemove=\u00a76\u004c\u1ec7\u006e\u0068 \u00a7c{0}\u00a76 \u0111\u00e3 \u0062\u1ecb \u006c\u006f\u1ea1\u0069 \u0062\u1ecf \u006b\u0068\u1ecf\u0069 \u00a7c{1}\u00a76. +powerToolRemoveAll=\u00a76\u0054\u1ea5\u0074 \u0063\u1ea3 \u0063\u00e1\u0063 \u006c\u1ec7\u006e\u0068 \u0111\u00e3 \u0062\u1ecb \u0067\u1ee1 \u006b\u0068\u1ecf\u0069 \u00a7c{0}\u00a76. +powerToolsDisabled=\u00a76\u0054\u1ea5\u0074 \u0063\u1ea3 \u0063\u00f4\u006e\u0067 \u0063\u1ee5 \u006e\u0068\u0061\u006e\u0068 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0074\u1eaf\u0074. +powerToolsEnabled=\u00a76\u0054\u1ea5\u0074 \u0063\u1ea3 \u0063\u00f4\u006e\u0067 \u0063\u1ee5 \u006e\u0068\u0061\u006e\u0068 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0062\u1ead\u0074. +questionFormat=\u00a72[\u004e\u0068\u0069\u1ec7\u006d \u0076\u1ee5]\u00a7r {0} +readNextPage=\u00a76\u0047\u00f5\u00a7c /{0} {1} \u00a76\u0111\u1ec3 \u0111\u1ecd\u0063 \u0074\u0072\u0061\u006e\u0067 \u0074\u0069\u1ebf\u0070 \u0074\u0068\u0065\u006f. +recipe=\u00a76\u0043\u00f4\u006e\u0067 \u0074\u0068\u1ee9\u0063 \u0063\u1ee7\u0061 \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 \u0063\u1ee7\u0061 \u00a7c{2}\u00a76) +recipeBadIndex=\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0063\u00f4\u006e\u0067 \u0074\u0068\u1ee9\u0063 \u0063\u1ee7\u0061 \u0049\u0044 \u0062\u1ea1\u006e \u006e\u0068\u1ead\u0070. +recipeFurnace=\u00a76\u004e\u0075\u006e\u0067\: \u00a7c{0}\u00a76. +recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X +recipeGridItem=\u00a7c{0}X \u00a76\u006c\u00e0 \u00a7c{1} +recipeMore=\u00a76\u0047\u00f5 /{0} \u00a7c{1}\u00a76 <\u0073\u1ed1> \u0111\u1ec3 \u0078\u0065\u006d \u006e\u0068\u1eef\u006e\u0067 \u0063\u00f4\u006e\u0067 \u0074\u0068\u1ee9\u0063 \u006b\u0068\u00e1\u0063 \u0063\u1ee7\u0061 \u00a7c{2}\u00a76. +recipeNone= \u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0063\u00f4\u006e\u0067 \u0074\u0068\u1ee9\u0063 \u0074\u1ed3\u006e \u0074\u1ea1\u0069 \u0063\u0068\u006f {0}. +recipeNothing=\u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0067\u00ec +recipeShapeless=\u00a76\u004c\u0069\u00ea\u006e \u006b\u1ebf\u0074 \u00a7c{0} +recipeWhere=\u00a76\u0043\u0068\u1ed7\: {0} +removed=\u00a76\u0058\u00f3\u0061\u00a7c {0} \u00a76\u0074\u0068\u1ef1\u0063 \u0074\u0068\u1ec3. +repair=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0073\u1eed\u0061 \u0074\u0068\u00e0\u006e\u0068 \u0063\u00f4\u006e\u0067 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d\: \u00a7c{0}\u00a76. +repairAlreadyFixed=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0063\u1ea7\u006e \u0073\u1eed\u0061. +repairEnchanted=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0070\u0068\u00f9 \u0070\u0068\u00e9\u0070. +repairInvalidType=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0073\u1eed\u0061. +repairNone=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006e\u00e0\u006f \u0063\u1ea7\u006e \u0111\u01b0\u1ee3\u0063 \u0073\u1eed\u0061 \u0063\u1ea3. +requestAccepted=\u00a76\u0059\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0111\u1ed3\u006e\u0067 \u00fd. +requestAcceptedFrom=\u00a7c{0} \u00a76\u0111\u00e3 \u0111\u1ed3\u006e\u0067 \u00fd \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. +requestDenied=\u00a76\u0059\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0062\u1ecb \u0074\u1eeb \u0063\u0068\u1ed1\u0069. +requestDeniedFrom=\u00a7c{0} \u00a76\u0111\u00e3 \u0074\u1eeb \u0063\u0068\u1ed1\u0069 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. +requestSent=\u00a76\u0047\u1eed\u0069 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0111\u1ebf\u006e\u00a7c {0}\u00a76. +requestSentAlready=\u00a74\u0042\u1ea1\u006e \u0111\u00e3 \u0067\u1eed\u0069 {0}\u00a74 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e. +requestTimedOut=\u00a74\u0059\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u00e3 \u0071\u0075\u00e1 \u0068\u1ea1\u006e. +requiredBukkit=\u00a76* \! * \u0054\u1ed1\u0069 \u0074\u0068\u0069\u1ec3\u0075\u002c \u0062\u1ea1\u006e \u0063\u1ea7\u006e \u0062\u1ea3\u006e \u0062\u0075\u0069\u006c\u0064 {0} \u0063\u1ee7\u0061 \u0043\u0072\u0061\u0066\u0074\u0042\u0075\u006b\u006b\u0069\u0074\u002c \u0074\u1ea3\u0069 \u006e\u00f3 \u1edf http\://dl.bukkit.org/downloads/craftbukkit/ +resetBal=\u00a76\u0053\u1ed1 \u0064\u01b0 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u006c\u00e0\u006d \u006d\u1edb\u0069 \u0074\u0068\u00e0\u006e\u0068 \u00a7c{0} \u00a76\u0063\u0068\u006f \u0074\u1ea5\u0074 \u0063\u1ea3 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0074\u0072\u1ef1\u0063 \u0074\u0075\u0079\u1ebf\u006e. +resetBalAll=\u00a76\u0053\u1ed1 \u0064\u01b0 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u006c\u00e0\u006d \u006d\u1edb\u0069 \u0074\u0068\u00e0\u006e\u0068 \u00a7c{0} \u00a76\u0063\u0068\u006f \u0074\u1ea5\u0074 \u0063\u1ea3 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069. +returnPlayerToJailError=\u00a74\u0110\u00e3 \u0063\u00f3 \u006c\u1ed7\u0069 \u006b\u0068\u0069 \u0063\u1ed1 \u0067\u1eaf\u006e\u0067 \u0111\u01b0\u0061 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a74\u0076\u1ec1 \u006c\u1ea1\u0069 \u0074\u00f9\: \u00a7c{1}\u00a74\! +runningPlayerMatch=\u00a76\u0110\u0061\u006e\u0067 \u0074\u00ec\u006d \u006b\u0069\u1ebf\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0070\u0068\u00f9 \u0068\u1ee3\u0070 ''\u00a7c{0}\u00a76'' (\u0111\u0069\u1ec1\u0075 \u006e\u00e0\u0079 \u0063\u00f3 \u0074\u0068\u1ec3 \u006d\u1ea5\u0074 \u006d\u1ed9\u0074 \u0063\u0068\u00fa\u0074 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e). +second=\u0067\u0069\u00e2\u0079 +seconds=\u0067\u0069\u00e2\u0079 +seenOffline=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u00a74\u006e\u0067\u006f\u1ea1\u0069 \u0074\u0075\u0079\u1ebf\u006e\u00a76 \u006b\u1ec3 \u0074\u1eeb \u00a7c{1}\u00a76. +seenOnline=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u00a7a\u0074\u0072\u1ef1\u0063 \u0074\u0075\u0079\u1ebf\u006e\u00a76 \u006b\u1ec3 \u0074\u1eeb \u00a7c{1}\u00a76. +sellBulkPermission=\u00a76\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0062\u00e1\u006e \u0068\u00e0\u006e\u0067 \u006c\u006f\u1ea1\u0074 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d. +sellHandPermission=\u00a76\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0062\u00e1\u006e \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0074\u0072\u00ea\u006e \u0074\u0061\u0079. +serverFull=\u004d\u00e1\u0079 \u0063\u0068\u1ee7 \u0111\u1ea7\u0079\! +serverTotal=\u00a76\u0054\u1ed5\u006e\u0067 \u0063\u1ee7\u0061 \u006d\u00e1\u0079 \u0063\u0068\u1ee7\:\u00a7c {0} +setBal=\u00a7a\u0053\u1ed1 \u0064\u01b0 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e \u0111\u01b0\u1ee3\u0063 \u0111\u1eb7\u0074 \u0074\u0068\u00e0\u006e\u0068 {0}. +setBalOthers=\u00a7a\u0042\u1ea1\u006e \u0111\u0061 \u0111\u1eb7\u0074 \u0073\u1ed1 \u0064\u01b0 \u0063\u1ee7\u0061 {0}\u00a7a \u0074\u0068\u00e0\u006e\u0068 {1}. +setSpawner=\u00a76\u0043\u0068\u0075\u0079\u1ec3\u006e \u006c\u006f\u1ea1\u0069 \u006c\u1ed3\u006e\u0067 \u0071\u0075\u00e1\u0069\u0028\u0053\u0070\u0061\u0077\u006e\u0065\u0072\u0029 \u0074\u0068\u00e0\u006e\u0068\u00a7c {0}\u00a76. +sheepMalformedColor=\u00a74\u004d\u00e0\u0075 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070. +shoutFormat=\u00a76[Shout]\u00a7r {0} +signFormatFail=\u00a74[{0}] +signFormatSuccess=\u00a71[{0}] +signFormatTemplate=[{0}] +signProtectInvalidLocation=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0074\u1ea1\u006f \u0062\u1ea3\u006e \u1edf \u0111\u00e2\u0079. +similarWarpExist=\u00a74\u004d\u1ed9\u0074 \u006b\u0068\u0075 \u0076\u1ef1\u0063 \u0063\u00f3 \u0074\u00ea\u006e \u0074\u01b0\u01a1\u006e\u0067 \u0074\u1ef1 \u0111\u00e3 \u0074\u1ed3\u006e \u0074\u1ea1\u0069. +slimeMalformedSize=\u00a74\u004b\u00ed\u0063\u0068 \u0074\u0068\u01b0\u1edb\u0063 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070. +socialSpy=\u00a76\u0043\u0068\u1ebf \u0111\u1ed9 \u006e\u0067\u0068\u0065 \u006c\u00e9\u006e \u0063\u0068\u006f \u00a7c{0}\u00a76\: \u00a7c{1} +socialSpyPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a7r +soloMob=\u00a74\u0043\u006f\u006e \u0071\u0075\u00e1\u0069 \u006e\u00e0\u0079 \u006d\u0075\u1ed1\u006e \u0111\u01b0\u1ee3\u0063 \u1edf \u006d\u1ed9\u0074 \u006d\u00ec\u006e\u0068. +spawnSet=\u00a76\u0056\u1ecb \u0074\u0072\u00ed \u0068\u1ed3\u0069 \u0073\u0069\u006e\u0068 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0063\u0068\u1ec9\u006e\u0068 \u0063\u0068\u006f \u004e\u0068\u00f3\u006d \u0028\u0052\u0061\u006e\u006b\u0029\u00a7c {0}\u00a76. +spawned=\u0110\u00e3 \u0074\u1ea1\u006f \u0072\u0061 +sudoExempt=\u00a7\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0111\u0069\u1ec1\u0075 \u006b\u0068\u0069\u1ec3\u006e \u00a7c{0}. +sudoRun=\u00a76\u00c9\u0070 \u0062\u0075\u1ed9\u0063\u00a7c {0} \u00a76\u0064\u00f9\u006e\u0067\:\u00a7r /{1} +suicideMessage=\u00a76\u0054\u1ea1\u006d \u0062\u0069\u1ec7\u0074\u002c \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u00e1\u0063 \u0111\u1ed9\u0063 \u003a\u003c +suicideSuccess=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u00a7c{0} \u00a76\u0111\u00e3 \u006b\u1ebf\u0074 \u006c\u0069\u1ec5\u0075 \u0111\u1edd\u0069 \u006d\u00ec\u006e\u0068. +survival=\u0053\u0069\u006e\u0068 \u0074\u1ed3\u006e +takenFromAccount=\u00a7a{0} \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0072\u00fa\u0074 \u0074\u1eeb \u0074\u00e0\u0069 \u006b\u0068\u006f\u1ea3\u006e \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. +takenFromOthersAccount=\u00a7a{0} \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u006c\u1ea5\u0079 \u006b\u0068\u1ecf\u0069 \u0074\u00e0\u0069 \u006b\u0068\u006f\u1ea3\u006e {1}\u00a7a. \u0053\u1ed1 \u0064\u01b0 \u006d\u1edb\u0069\: {2}. +teleportAAll=\u00a76\u0110\u00e3 \u0067\u1eed\u0069 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ebf\u006e \u0074\u1ea5\u0074 \u0063\u1ea3 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069... +teleportAll=\u00a76\u0110\u00e3 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0074\u1ea5\u0074 \u0063\u1ea3 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 +teleportAtoB=\u00a7c{0}\u00a76 \u0111\u00e3 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0062\u1ea1\u006e \u0111\u1ebf\u006e \u00a7c{1}\u00a76. +teleportDisabled=\u00a7c{0} \u00a74\u0111\u00e3 \u0074\u1eaf\u0074 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e. +teleportHereRequest=\u00a7c{0}\u00a76 \u0111\u00e3 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0062\u1ea1\u006e \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ebf\u006e \u0063\u0068\u1ed7 \u0068\u1ecd. +teleportNewPlayerError=\u00a74\u0054\u0068\u1ea5\u0074 \u0062\u1ea1\u0069 \u006b\u0068\u0069 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006d\u1edb\u0069\! +teleportRequest=\u00a7c{0}\u00a76 \u0111\u00e3 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ebf\u006e \u0063\u0068\u1ed7 \u0062\u1ea1\u006e. +teleportRequestAllCancelled=\u00a76\u0054\u1ea5\u0074 \u0063\u1ea3 \u0079\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u006e\u1ed5\u0069 \u0062\u1ead\u0074 \u0111\u1ec1\u0075 \u0111\u00e3 \u0062\u1ecb \u0068\u1ee7\u0079. +teleportRequestSpecificCancelled=\u00a7\u0036\u0059\u00ea\u0075 \u0063\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u006e\u1ed5\u0069 \u0062\u1ead\u0074 \u0076\u1edb\u0069 {0} \u0111\u00e3 \u0062\u1ecb \u0068\u1ee7\u0079. +teleportRequestTimeoutInfo=\u00a76\u0059\u00ea\u0075 \u0063\u1ea7\u0075 \u006e\u00e0\u0079 \u0073\u1ebd \u0068\u1ebf\u0074 \u0068\u1ea1\u006e \u0073\u0061\u0075\u00a7c {0} \u0067\u0069\u00e2\u0079\u00a76. +teleportTop=\u00a76\u0044\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ebf\u006e \u0111\u1ec9\u006e\u0068. +teleportationCommencing=\u00a76\u0042\u1eaf\u0074 \u0111\u1ea7\u0075 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e... +teleportationDisabled=\u00a76\u0044\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063\u00a7c \u0074\u1eaf\u0074\u00a76. +teleportationDisabledFor=\u00a76\u0044\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u00a7c\u0074\u1eaf\u0074 \u00a76\u0063\u0068\u006f \u00a7c{0}\u00a76. +teleportationEnabled=\u00a76\u0044\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u00a7c\u0062\u1ead\u0074\u00a76. +teleportationEnabledFor=\u00a76\u0044\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u00a7c\u0062\u1ead\u0074 \u00a76\u0063\u0068\u006f \u00a7c{0}\u00a76. +teleporting=\u00a76\u0110\u0061\u006e\u0067 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e... +teleportToPlayer=\u00a76\u0110\u0061\u006e\u0067 \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ebf\u006e \u00a7c{0}\u00a76. +tempBanned=\u00a7c\u0042\u1ea1\u006e \u0111\u00e3 \u0074\u1ea1\u006d \u0074\u0068\u1edd\u0069 \u0062\u1ecb \u0063\u1ea5\u006d \u0074\u0072\u006f\u006e\u0067 {0}\:\n\u00a7r{2} +tempbanExempt=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u1ea5\u006d \u0074\u1ea1\u006d \u0074\u0068\u1edd\u0069 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u00e0\u0079. +thunder=\u00a76\u0042\u1ea1\u006e\u00a7c {0} \u00a76\u0073\u1ea5\u006d \u0073\u00e9\u0074 \u1edf \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u0063\u1ee7\u0061 \u006d\u00ec\u006e\u0068. +thunderDuration=\u00a76\u0042\u1ea1\u006e\u00a7c {0} \u00a76\u0073\u1ea5\u006d \u0073\u00e9\u0074 \u1edf \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u006e\u00e0\u0079 \u0074\u0072\u006f\u006e\u0067\u00a7c {1} \u00a76\u0067\u0069\u00e2\u0079. +timeBeforeHeal=\u00a74\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0063\u0068\u006f \u006c\u1ea7\u006e \u0068\u1ed3\u0069 \u0070\u0068\u1ee5\u0063 \u0074\u0069\u1ebf\u0070 \u0074\u0068\u0065\u006f\:\u00a7c {0}\u00a76. +timeBeforeTeleport=\u00a74\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0111\u1ebf\u006e \u006c\u1ea7\u006e \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0074\u0069\u1ebf\u0070 \u0074\u0068\u0065\u006f\:\u00a7c {0}\u00a76. +timeFormat=\u00a7c{0}\u00a76 \u0068\u0061\u0079 \u00a7c{1}\u00a76 \u0068\u0061\u0079 \u00a7c{2}\u00a76 +timeSetPermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0111\u0069\u1ec1\u0075 \u0063\u0068\u1ec9\u006e\u0068 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e. +timeSetWorldPermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u00e9\u0070 \u0111\u0069\u1ec1\u0075 \u0063\u0068\u1ec9\u006e\u0068 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u1edf \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069 ''{0}''. +timeWorldCurrent=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0068\u0069\u1ec7\u006e \u0074\u1ea1\u0069 \u1edf\u00a7c {0} \u00a76\u006c\u00e0 \u00a7c{1}\u00a76. +timeWorldSet=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0111\u01b0\u1ee3\u0063 \u0111\u1eb7\u0074 \u006c\u1ea1\u0069 \u0074\u0068\u00e0\u006e\u0068\u00a7c {0} \u00a76\u1edf\: \u00a7c{1}\u00a76. +totalWorthAll=\u00a7a\u0110\u00e3 \u0062\u00e1\u006e \u0074\u1ea5\u0074 \u0063\u1ea3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00e0 \u006b\u0068\u1ed1\u0069 \u0063\u0068\u006f \u00a7c{1}\u00a7a. +totalWorthBlocks=\u00a7a\u0110\u00e3 \u0062\u00e1\u006e \u0074\u1ea5\u0074 \u0063\u1ea3 \u006b\u0068\u1ed1\u0069 \u00a7c{1}\u00a7a. +tps=\u00a76\u0054\u0050\u0053 \u0068\u0069\u1ec7\u006e \u0074\u1ea1\u0069 \= {0} +tradeSignEmpty=\u00a74\u0043\u00e1\u0069 \u0062\u1ea3\u006e\u0067 \u0074\u0072\u0061\u006f \u0111\u1ed5\u0069 \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0073\u1eb5\u006e \u0063\u0068\u006f \u0062\u1ea1\u006e. +tradeSignEmptyOwner=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0067\u00ec \u0111\u1ec3 \u0074\u0068\u0075 \u0074\u0068\u1ead\u0070 \u0074\u1eeb \u0062\u1ea3\u006e\u0067 \u0074\u0072\u0061\u006f \u0111\u1ed5\u0069 \u006e\u00e0\u0079. +treeFailure=\u00a74\u0054\u0072\u1ed3\u006e\u0067 \u0063\u00e2\u0079 \u0074\u0068\u1ea5\u0074 \u0062\u1ea1\u0069\u002c \u0068\u00e3\u0079 \u0074\u0068\u1eed \u006c\u1ea1\u0069 \u0074\u0072\u00ea\u006e \u0063\u1ecf \u0068\u006f\u1eb7\u0063 \u0111\u1ea5\u0074. +treeSpawned=\u00a76\u0043\u00e2\u0079 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0072\u1ed3\u006e\u0067. +true=\u00a7a\u0111\u00fa\u006e\u0067\u00a7r +typeTpaccept=\u00a76\u0110\u1ec3 \u0111\u1ed3\u006e\u0067 \u00fd \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e\u002c \u0067\u00f5 \u00a7c/tpaccept\u00a76. +typeTpacancel=\u00a76\u0110\u1ec3 \u0068\u1ee7\u0079 \u0079\u00ea\u0075 \u0063\u1ea7\u0075\u002c \u0067\u00f5 \u00a7c/tpacancel\u00a76. +typeTpdeny=\u00a76\u0110\u1ec3 \u0074\u1eeb \u0063\u0068\u1ed1\u0069 \u0079\u00ea\u0075 \u0063\u1ea7\u0075\u002c \u0067\u00f5 \u00a7c/tpdeny\u00a76. +typeWorldName=\u00a76\u0042\u1ea1\u006e \u0063\u0169\u006e\u0067 \u0063\u00f3 \u0074\u0068\u1ec3 \u0067\u00f5 \u0074\u00ea\u006e \u0063\u1ee5 \u0074\u0068\u1ec3 \u0063\u1ee7\u0061 \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069. +unableToSpawnMob=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0073\u0069\u006e\u0068 \u0072\u0061 \u0071\u0075\u00e1\u0069. +unignorePlayer=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f2\u006e \u0063\u0068\u1eb7\u006e\u00a7c {0} \u00a76\u006e\u1eef\u0061. +unknownItemId=\u00a74\u0049\u0064 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006b\u0068\u00f4\u006e\u0067 \u0078\u00e1\u0063 \u0111\u1ecb\u006e\u0068\:\u00a7r {0}\u00a74. +unknownItemInList=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d {0} \u0074\u0072\u006f\u006e\u0067 \u0064\u0061\u006e\u0068 \u0073\u00e1\u0063\u0068 {1} \u006b\u0068\u00f4\u006e\u0067 \u0078\u00e1\u0063 \u0111\u1ecb\u006e\u0068. +unknownItemName=\u00a74\u0054\u00ea\u006e \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006b\u0068\u00f4\u006e\u0067 \u0078\u00e1\u0063 \u0111\u1ecb\u006e\u0068\: {0}. +unlimitedItemPermission=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0064\u00f9\u006e\u0067 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00f4 \u0068\u1ea1\u006e \u00a7c{0}\u00a74. +unlimitedItems=\u00a76\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00f4 \u0068\u1ea1\u006e\:\u00a7r +unmutedPlayer=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a76\u0111\u00e3 \u0063\u00f3 \u0074\u0068\u1ec3 \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e \u0074\u0072\u1edf \u006c\u1ea1\u0069. +unvanishedReload=\u00a74\u0056\u0069\u1ec7\u0063 \u0074\u1ea3\u0069 \u006c\u1ea1\u0069 \u0111\u00e3 \u006c\u00e0\u006d \u0063\u0068\u006f \u0062\u1ea1\u006e \u0068\u0069\u1ec7\u006e \u0068\u00ec\u006e\u0068 \u0028\u0056\u0061\u006e\u0069\u0073\u0068\u0029. +upgradingFilesError=\u004c\u1ed7\u0069 \u006b\u0068\u0069 \u006e\u00e2\u006e\u0067 \u0063\u1ea5\u0070 \u0074\u1ec7\u0070. +uptime=\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0068\u006f\u1ea1\u0074 \u0111\u1ed9\u006e\u0067\:\u00a7c {0} +userAFK=\u00a77{0} \u00a75\u0068\u0069\u1ec7\u006e \u0111\u0061\u006e\u0067 \u0074\u0072\u0065\u006f \u006d\u00e1\u0079 \u0076\u00e0 \u0063\u00f3 \u0074\u0068\u1ec3 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0072\u1ea3 \u006c\u1edd\u0069. +userAFKWithMessage=\u00a77{0} \u00a75\u0068\u0069\u1ec7\u006e \u0111\u0061\u006e\u0067 \u0074\u0072\u0065\u006f \u006d\u00e1\u0079 \u0076\u00e0 \u0063\u00f3 \u0074\u0068\u1ec3 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0072\u1ea3 \u006c\u1edd\u0069: {1} +userDoesNotExist=\u00a74\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u00a7c {0} \u00a74 \u006b\u0068\u00f4\u006e\u0067 \u0074\u1ed3\u006e \u0074\u1ea1\u0069. +userIsAway=\u00a77* {0} \u00a77\u0111\u0061\u006e\u0067 \u0074\u0072\u0065\u006f \u006d\u00e1\u0079. +userIsAwayWithMessage=\u00a77* {0} \u00a77\u0111\u0061\u006e\u0067 \u0074\u0072\u0065\u006f \u006d\u00e1\u0079. +userIsNotAway=\u00a77* {0} \u00a77\u006b\u0068\u00f4\u006e\u0067 \u0063\u00f2\u006e \u0074\u0072\u0065\u006f \u006d\u00e1\u0079 \u006e\u1eef\u0061. +userJailed=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0067\u0069\u0061\u006d\! +userUnknown=\u00a74Lฦฐu รฝ\: \u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 ''\u00a7c{0}\u00a74'' \u0063\u0068\u01b0\u0061 \u0062\u0061\u006f \u0067\u0069\u1edd \u0076\u00e0\u006f \u006d\u00e1\u0079 \u0063\u0068\u1ee7 \u006e\u00e0\u0079. +userdataMoveBackError=\u0054\u0068\u1ea5\u0074 \u0062\u1ea1\u006e \u006b\u0068\u0069 \u0064\u0069 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0064\u1eef \u006c\u0069\u1ec7\u0075 \u006e\u0067\u01b0\u1edd\u0069 \u0064\u00f9\u006e\u0067/{0}.tmp \u0074\u0068\u00e0\u006e\u0068/{1}\! +userdataMoveError=\u0054\u0068\u1ea5\u0074 \u0062\u1ea1\u006e \u006b\u0068\u0069 \u0064\u0069 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0064\u1eef \u006c\u0069\u1ec7\u0075 \u006e\u0067\u01b0\u1edd\u0069 \u0064\u00f9\u006e\u0067/{0} \u0111\u1ebf\u006e/{1}.tmp\! +usingTempFolderForTesting=\u0053\u1eed \u0064\u1ee5\u006e\u0067 \u0074\u0068\u01b0 \u006d\u1ee5\u0063 \u0111\u1ec7\u006d \u0111\u1ec3 \u0074\u0068\u1eed \u006e\u0067\u0068\u0069\u1ec7\u006d\: +vanished=\u00a76\u0047\u0069\u1edd \u0062\u1ea1\u006e \u0111\u00e3 \u0068\u006f\u00e0\u006e \u0074\u006f\u00e0\u006e \u0074\u00e0\u006e\u0067 \u0068\u00ec\u006e\u0068 \u0076\u1edb\u0069 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u002c \u0062\u1ea1\u006e \u0073\u1ebd \u0111\u01b0\u1ee3\u0063 \u1ea9\u006e \u0076\u1edb\u0069 \u0063\u00e1\u0063 \u006c\u1ec7\u006e\u0068 \u0074\u0072\u006f\u006e\u0067 \u0074\u0072\u00f2 \u0063\u0068\u01a1\u0069. +versionMismatch=\u00a74\u0050\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u006b\u0068\u00f4\u006e\u0067 \u0070\u0068\u00f9 \u0068\u1ee3\u0070\! \u0058\u0069\u006e \u0068\u00e3\u0079 \u0063\u1ead\u0070 \u006e\u0068\u1ead\u0074 {0} \u0111\u1ebf\u006e \u0070\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0070\u0068\u00f9 \u0068\u1ee3\u0070. +versionMismatchAll=\u00a74\u0050\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u006b\u0068\u00f4\u006e\u0067 \u0070\u0068\u00f9 \u0068\u1ee3\u0070\! \u0058\u0069\u006e \u0068\u00e3\u0079 \u0063\u1ead\u0070 \u006e\u0068\u1ead\u0074 \u0074\u1ea5\u0074 \u0063\u1ea3 \u0045\u0073\u0073\u0065\u006e\u0074\u0069\u0061\u006c\u0073\u002e\u006a\u0061\u0072 \u0111\u1ebf\u006e \u0070\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0070\u0068\u00f9 \u0068\u1ee3\u0070. +voiceSilenced=\u00a76\u0047\u0069\u1ecd\u006e\u0067 \u0062\u1ea1\u006e \u0111\u00e3 \u0062\u1ecb \u0074\u1eaf\u0074 \u0074\u0069\u1ebf\u006e\u0067\! +walking=\u0110\u0069 \u0062\u1ed9 +warpDeleteError=\u00a74\u0043\u00f3 \u0076\u1ea5\u006e \u0111\u1ec1 \u006b\u0068\u0069 \u0078\u00f3\u0061 \u0066\u0069\u006c\u0065 \u006b\u0068\u0075 \u0076\u1ef1\u0063 \u0028\u0077\u0061\u0072\u0070\u0029. +warpList={0} +warpListPermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3 \u0078\u0065\u006d \u0064\u0061\u006e\u0068 \u0073\u00e1\u0063\u0068 \u0063\u00e1\u0063 \u006b\u0068\u0075 \u0076\u1ef1\u0063. +warpNotExist=\u00a74\u004b\u0068\u0075 \u0076\u1ef1\u0063 \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0074\u1ed3\u006e \u0074\u1ea1\u0069. +warpOverwrite=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u0068\u00e9\u0070 \u0111\u00e8 \u006c\u00ea\u006e \u006b\u0068\u0075 \u0076\u1ef1\u0063 \u006e\u00e0\u0079. +warpSet=\u00a76\u004b\u0068\u0075 \u0076\u1ef1\u0063\u00a7c {0} \u00a76\u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0074\u0068\u0069\u1ebf\u0070 \u006c\u1ead\u0070. +warpUsePermission=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0064\u00f9\u006e\u0067 \u006b\u0068\u0075 \u0076\u1ef1\u0063 \u006e\u00e0\u0079. +warpingTo=\u00a76\u0043\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ebf\u006e \u006b\u0068\u0075 \u0076\u1ef1\u0063\u00a7c {0}\u00a76. +warps=\u00a76\u004b\u0068\u0075 \u0076\u1ef1\u0063\:\u00a7r {0} +warpsCount=\u00a76\u0048\u0069\u1ec7\u006e \u0063\u00f3\u00a7c {0} \u00a76\u006b\u0068\u0075 \u0076\u1ef1\u0063. \u0048\u0069\u1ec3\u006e \u0074\u0068\u1ecb \u0074\u0072\u0061\u006e\u0067 \u00a7c{1} \u00a76\u0063\u1ee7\u0061 \u00a7c{2}\u00a76. +weatherStorm=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0063\u0068\u1ec9\u006e\u0068 \u0074\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0074\u0068\u00e0\u006e\u0068 \u00a7c\u0062\u00e3\u006f\u00a76 \u1edf\u00a7c {0}\u00a76. +weatherStormFor=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0063\u0068\u1ec9\u006e\u0068 \u0074\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0074\u0068\u00e0\u006e\u0068 \u00a7c\u0062\u00e3\u006f\u00a76 \u1edf\u00a7c {0} \u00a76\u0074\u0072\u006f\u006e\u0067 {1} \u0067\u0069\u00e2\u0079. +weatherSun=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0063\u0068\u1ec9\u006e\u0068 \u0074\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0074\u0068\u00e0\u006e\u0068 \u00a7cnแบฏng\u00a76 \u1edf\u00a7c {0}\u00a76. +weatherSunFor=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0063\u0068\u1ec9\u006e\u0068 \u0074\u0068\u1edd\u0069 \u0074\u0069\u1ebf\u0074 \u0074\u0068\u00e0\u006e\u0068 \u00a7cnแบฏng\u00a76 \u1edf\u00a7c {0} \u00a76\u0074\u0072\u006f\u006e\u0067 {1} \u0067\u0069\u00e2\u0079. +whoisAFK=\u00a76 - \u0054\u0072\u0065\u006f \u006d\u00e1\u0079\:\u00a7r {0} +whoisAFKSince=\u00a76 - \u0054\u0072\u0065\u006f \u006d\u00e1\u0079\:\u00a7r {0} (\u004b\u1ec3 \u0074\u1eeb {1}) +whoisBanned=\u00a76 - \u0042\u1ecb \u0063\u1ea5\u006d\:\u00a7r {0} +whoisExp=\u00a76 - \u004b\u0069\u006e\u0068 \u006e\u0067\u0068\u0069\u1ec7\u006d\:\u00a7r {0} (\u0043\u1ea5\u0070 {1}) +whoisFly=\u00a76 - \u0043\u0068\u1ebf \u0111\u1ed9 \u0062\u0061\u0079\:\u00a7r {0} ({1}) +whoisGamemode=\u00a76 - \u0043\u0068\u1ebf \u0111\u1ed9 \u0063\u0068\u01a1\u0069\:\u00a7r {0} +whoisGeoLocation=\u00a76 - \u004b\u0068\u0075 \u0076\u1ef1\u0063\:\u00a7r {0} +whoisGod=\u00a76 - \u0043\u0068\u1ebf \u0111\u1ed9 \u0062\u1ea5\u0074 \u0074\u1eed\:\u00a7r {0} +whoisHealth=\u00a76 - \u004d\u00e1\u0075\:\u00a7r {0}/20 +whoisIPAddress=\u00a76 - \u0110\u1ecb\u0061 \u0063\u0068\u1ec9 \u0049\u0050\:\u00a7r {0} +whoisJail=\u00a76 - \u0042\u1ecb \u0067\u0069\u0061\u006d\:\u00a7r {0} +whoisLocation=\u00a76 - \u004b\u0068\u0075 \u0076\u1ef1\u0063\:\u00a7r ({0}, {1}, {2}, {3}) +whoisMoney=\u00a76 - \u0054\u0069\u1ec1\u006e\:\u00a7r {0} +whoisMuted=\u00a76 - \u0042\u1ecb \u0063\u1ea5\u006d \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e\:\u00a7r {0} +whoisNick=\u00a76 - \u0042\u0069\u1ec7\u0074 \u0064\u0061\u006e\u0068\:\u00a7r {0} +whoisOp=\u00a76 - \u0110\u0069\u1ec1\u0075 \u0068\u00e0\u006e\u0068\:\u00a7r {0} +whoisPlaytime=\u00a76 - \u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0063\u0068\u01a1\u0069\:\u00a7r {0} +whoisTop=\u00a76 \=\=\=\=\=\= WhoIs\:\u00a7c {0} \u00a76\=\=\=\=\=\= +worth=\u00a7a\u0054\u1ed5\u006e\u0067 \u0073\u1ed1 {0} \u0063\u00f3 \u0067\u0069\u00e1 \u0074\u0072\u1ecb \u00a7c{1}\u00a7a ({2} \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00e0 {3} \u0076\u1edb\u0069 \u006d\u1ed7\u0069 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d) +worthMeta=\u00a7a\u0054\u1ed5\u006e\u0067 \u0073\u1ed1 {0} \u0076\u1edb\u0069 \u0064\u1eef \u006c\u0069\u1ec7\u0075 (data) {1} \u0063\u00f3 \u0067\u0069\u00e1 \u0074\u0072\u1ecb \u00a7c{2}\u00a7a ({3} \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00e0 {4} \u0076\u1edb\u0069 \u006d\u1ed7\u0069 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d) +worthSet=\u00a76\u0110\u1eb7\u0074 \u0073\u1ed1 \u006c\u01b0\u1ee3\u006e\u0067 \u0067\u0069\u00e1 \u0074\u0072\u1ecb +year=\u006e\u0103\u006d +years=\u006e\u0103\u006d +youAreHealed=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0068\u1ed3\u0069 \u0070\u0068\u1ee5\u0063. +youHaveNewMail=\u00a76\u0042\u1ea1\u006e \u0063\u00f3\u00a7c {0} \u00a76\u0074\u0069\u006e \u006e\u0068\u1eaf\u006e\! \u0047\u00f5 \u00a7c/mail read\u00a76 \u0111\u1ec3 \u0078\u0065\u006d \u0074\u0068\u01b0 \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. +whoisHunger=\u00a76 - \u0110\u1ed9 \u0111\u00f3\u0069\:\u00a7r {0}/20 (+{1} \u0062\u00e3\u006f \u0068\u00f2\u0061) +kitDelay=\u00a7m{0}\u00a7r +giveSpawnFailure=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0111\u1ee7 \u0063\u0068\u1ed7 \u0074\u0072\u1ed1\u006e\u0067, \u00a7c{0} \u00a7c{1} \u00a74\u0073\u1ebd \u0062\u1ecb \u006d\u1ea5\u0074. +noKitGroup=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3 \u0064\u00f9\u006e\u0067 \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u006e\u00e0\u0079. +inventoryClearingFromAll=\u00a76\u0110\u0061\u006e\u0067 \u0078\u00f3\u0061 \u0074\u00fa\u0069 \u0111\u1ed3 \u0063\u1ee7\u0061 \u0074\u1ea5\u0074 \u0063\u1ea3 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069... +inventoryClearingAllItems=\u00a76\u0110\u00e3 \u0078\u00f3\u0061 \u0074\u1ea5\u0074 \u0063\u1ea3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0074\u0072\u006f\u006e\u0067 \u0074\u00fa\u0069 \u0063\u1ee7\u0061 {0}\u00a76. +inventoryClearingAllArmor=\u00a76\u0110\u00e3 \u0078\u00f3\u0061 \u0074\u1ea5\u0074 \u0063\u1ea3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00e0 \u0067\u0069\u00e1\u0070 \u0074\u0072\u006f\u006e\u0067 \u0074\u00fa\u0069 \u0063\u1ee7\u0061 {0}\u00a76. +inventoryClearingAllStack=\u00a76\u0110\u00e3 \u0078\u00f3\u0061 \u0074\u1ea5\u0074 \u0063\u1ea3\u00a7c {0} \u00a76\u0063\u1ee7\u0061 {1}\u00a76. +inventoryClearingStack=\u00a76\u0110\u00e3 \u0078\u00f3\u0061\u00a7c {0} \u00a76x\u00a7c {1} \u00a76\u0063\u1ee7\u0061 {2}\u00a76. +inventoryClearFail=\u00a74\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 {0} \u00a74\u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3\u00a7c {1} \u00a74x\u00a7c {2}\u00a74. +localNoOne= +totalSellableAll=\u00a7a\u0054\u1ed5\u006e\u0067 \u0067\u0069\u00e1 \u0074\u0072\u1ecb \u0063\u1ee7\u0061 \u0074\u1ea5\u0074 \u0063\u1ea3 \u0063\u00e1\u0063 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00e0 \u006b\u0068\u1ed1\u0069 \u0063\u00f3 \u0074\u0068\u1ec3 \u0062\u00e1\u006e \u0111\u01b0\u1ee3\u0063 \u006c\u00e0 \u00a7c{1}\u00a7a. +totalSellableBlocks=\u00a7a\u0054\u1ed5\u006e\u0067 \u0067\u0069\u00e1 \u0074\u0072\u1ecb \u0063\u1ee7\u0061 \u0074\u1ea5\u0074 \u0063\u1ea3 \u0063\u00e1\u0063 \u006b\u0068\u1ed1\u0069 \u0063\u00f3 \u0074\u0068\u1ec3 \u0062\u00e1\u006e \u0111\u01b0\u1ee3\u0063 \u006c\u00e0 \u00a7c{1}\u00a7a. +radiusTooBig=\u00a74\u0042\u00e1\u006e \u006b\u00ed\u006e\u0068 \u0071\u0075\u00e1 \u006c\u1edb\u006e\! \u0042\u00e1\u006e \u006b\u00ed\u006e\u0068 \u006c\u1edb\u006e \u006e\u0068\u1ea5\u0074 \u006c\u00e0 {0}. +isIpBanned=\u00a76\u0110\u1ecb\u0061 \u0063\u0068\u1ec9 \u0049\u0050 \u00a7c{0} \u00a76\u0111\u00e3 \u0062\u1ecb \u0063\u1ea5\u006d. +mobDataList=\u00a76\u0044\u1eef \u006c\u0069\u1ec7\u0075 \u0071\u0075\u00e1\u0069 \u0068\u1ee3\u0070 \u006c\u1ec7\:\u00a7r {0} +vanish=\u00a76\u1ea8\u006e \u0074\u0068\u00e2\u006e \u0063\u0068\u006f {0}\u00a76\: {1} +noLocationFound=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0074\u00ec\u006d \u0074\u0068\u1ea5\u0079 \u0076\u1ecb \u0074\u0072\u00ed \u0068\u1ee3\u0070 \u006c\u1ec7. +coordsKeyword={0}, {1}, {2} +banExemptOffline=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u1ea5\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0111\u00e3 \u006e\u0067\u006f\u1ea1\u0069 \u0074\u0075\u0079\u1ebf\u006e. +tempbanExemptOffline=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u1ea1\u006d \u0063\u1ea5\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0111\u00e3 \u006e\u0067\u006f\u1ea1\u0069 \u0074\u0075\u0079\u1ebf\u006e. +mayNotJailOffline=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0067\u0069\u0061\u006d \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u0067\u006f\u1ea1\u0069 \u0074\u0075\u0079\u1ebf\u006e. +muteExemptOffline=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u1eaf\u0074 \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u0067\u006f\u1ea1\u0069 \u0074\u0075\u0079\u1ebf\u006e. +ignoreExempt=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0063\u0068\u1eb7\u006e \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u006e\u00e0\u0079. +unsafeTeleportDestination=\u00a74\u0110\u0069\u1ec3\u006d \u0064\u1ecb\u0063\u0068 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ebf\u006e \u006c\u00e0 \u006b\u0068\u00f4\u006e\u0067 \u0061\u006e \u0074\u006f\u00e0\u006e \u0076\u00e0 \u006d\u1ee5\u0063 \u0022\u0074\u0065\u006c\u0065\u0070\u006f\u0072\u0074\u002d\u0073\u0061\u0066\u0065\u0074\u0079\u0022 \u0111\u00e3 \u0062\u1ecb \u0074\u1eaf\u0074. +noMetaJson=\u0044\u1eef \u006c\u0069\u1ec7\u0075 \u0074\u1eeb \u0074\u1ec7\u0070 \u004a\u0053\u004f\u004e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0068\u1ed5 \u0074\u0072\u1ee3 \u0074\u0072\u006f\u006e\u0067 \u0070\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0042\u0075\u006b\u006b\u0069\u0074 \u006e\u00e0\u0079. +maxMoney=\u00a74\u0047\u0069\u0061\u006f \u0064\u1ecb\u0063\u0068 \u006e\u00e0\u0079 \u0073\u1ebd \u0076\u01b0\u1ee3\u0074 \u0071\u0075\u00e1 \u0067\u0069\u1edb\u0069 \u0068\u1ea1\u006e \u0074\u0069\u1ec1\u006e \u0063\u0068\u006f \u0074\u00e0\u0069 \u006b\u0068\u006f\u1ea3\u006e \u006e\u00e0\u0079\u004e \u006b\u0068\u00f4\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0068\u1ed5 \u0074\u0072\u1ee3 \u0074\u0072\u006f\u006e\u0067 \u0070\u0068\u0069\u00ea\u006e \u0062\u1ea3\u006e \u0042\u0075\u006b\u006b\u0069\u0074 \u006e\u00e0\u0079. +skullChanged=\u00a76\u0110\u1ea7\u0075 \u006e\u0067\u01b0\u1edd\u0069 \u0111\u00e3 \u0111\u1ed5\u0069 \u0074\u0068\u00e0\u006e\u0068 \u00a7c{0}\u00a76. +alphaNames=\u00a74\u0054\u00ea\u006e \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0063\u0068\u1ec9 \u0063\u00f3 \u0074\u0068\u1ec3 \u0063\u0068\u1ee9\u0061 \u0043\u0068\u1eef\u002c \u0053\u1ed1\u002c \u0056\u00e0 \u0022\u005f\u0022. +givenSkull=\u00a76\u0042\u1ea1\u006e \u0111\u00e3 \u006e\u0068\u1ead\u006e \u0111\u01b0\u1ee3\u0063 \u0063\u00e1\u0069 \u0111\u1ea7\u0075 \u0063\u1ee7\u0061 \u00a7c{0}\u00a76. +noPermissionSkull=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec3\u006e \u0073\u1eed\u0061 \u0063\u00e1\u0069 \u0111\u1ea7\u0075 \u006e\u00e0\u0079. +teleportInvalidLocation=\u0047\u0069\u00e1 \u0074\u0072\u1ecb \u0063\u1ee7\u0061 \u0074\u1ecd\u0061 \u0111\u1ed9 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0076\u01b0\u1ee3\u0074 \u0071\u0075\u00e1 \u0033\u0030\u0030\u0030\u0030\u0030\u0030\u0030 +invalidSkull=\u00a74\u0058\u0069\u006e \u0068\u00e3\u0079 \u0063\u1ea7\u006d \u0063\u00e1\u0069 \u0111\u1ea7\u0075 \u0063\u1ee7\u0061 \u006d\u1ed9\u0074 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069. +weatherInvalidWorld=\u004b\u0068\u00f4\u006e\u0067 \u0074\u00ec\u006d \u0074\u0068\u1ea5\u0079 \u0074\u00ea\u006e \u0074\u0068\u1ebf \u0067\u0069\u1edb\u0069 {0}\! +gameModeInvalid=\u00a74\u0042\u1ea1\u006e \u0063\u1ea7\u006e \u0063\u0068\u1ec9 \u0111\u1ecb\u006e\u0068 \u006d\u1ed9\u0074 \u006e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069\u002f\u0063\u0068\u1ebf \u0111\u1ed9 \u0068\u1ee3\u0070 \u006c\u1ec7. +mailTooLong=\u00a74\u0054\u0068\u01b0 \u0071\u0075\u00e1 \u0064\u00e0\u0069\u002c \u0068\u00e3\u0079 \u0063\u1ed1 \u0067\u0069\u1eef \u006e\u00f3 \u0064\u01b0\u1edb\u0069 \u0031\u0030\u0030\u0030 \u006b\u00fd \u0074\u1ef1. +mailDelay=\u0051\u0075\u00e1 \u006e\u0068\u0069\u1ec1\u0075 \u0074\u0068\u01b0 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0067\u1eed\u0069 \u0074\u0072\u006f\u006e\u0067 \u0063\u00f9\u006e\u0067 \u006d\u1ed9\u0074 \u0070\u0068\u00fa\u0074\u002e \u004e\u0068\u0069\u1ec1\u0075 \u006e\u0068\u1ea5\u0074 \u006c\u00e0\: {0} +seenAccounts=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u0063\u0169\u006e\u0067 \u0111\u01b0\u1ee3\u0063 \u0062\u0069\u1ebf\u0074 \u0111\u1ebf\u006e \u006e\u0068\u01b0 \u006c\u00e0\:\u00a7c {0} +unableToSpawnItem=\u00a74\u004b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0074\u1ea1\u006f \u0072\u0061 \u00a7c{0}\u00a74, \u0111\u00e2\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0070\u0068\u1ea3\u0069 \u006c\u00e0 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0074\u1ea1\u006f \u0111\u01b0\u1ee3\u0063. +itemsConverted=\u00a76\u0043\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ed5\u0069 \u0074\u1ea5\u0074 \u0063\u1ea3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0074\u0068\u00e0\u006e\u0068 \u006b\u0068\u1ed1\u0069. +itemsNotConverted=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0063\u00f3 \u0074\u0068\u1ec3 \u0063\u0068\u0075\u0079\u1ec3\u006e \u0111\u1ed5\u0069 \u0074\u0068\u00e0\u006e\u0068 \u006b\u0068\u1ed1\u0069. +mailSentTo=\u00a7c{0}\u00a76 \u0111\u00e3 \u0111\u01b0\u1ee3\u0063 \u0067\u1eed\u0069 \u0074\u0068\u01b0 \u0073\u0061\u0075\: +mailMessage={0} +whoisTempBanned=\u00a76 - \u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0068\u1ebf\u0074 \u0068\u1ea1\u006e \u0063\u1ea5\u006d:\u00a7r {0} +playerTempBanned=\u00a76\u004e\u0067\u01b0\u1edd\u0069 \u0063\u0068\u01a1\u0069 \u00a7c{0}\u00a76 \u0111\u00e3 \u0074\u1ea1\u006d \u0063\u1ea5\u006d \u00a7c{1}\u00a76 \u0074\u0072\u006f\u006e\u0067 \u00a7c{2}\u00a76: \u00a7c{3}\u00a76. +mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1} +cantGamemode=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0071\u0075\u0079\u1ec1\u006e \u0111\u1ec3 \u0111\u1ed5\u0069 \u0063\u0068\u1ebf \u0111\u1ed9 \u0063\u0068\u01a1\u0069 {0} +createdKit=\u00a76\u0054\u1ea1\u006f \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u00a7c{0} \u00a76\u0076\u1edb\u0069 \u00a7c{1} \u00a76\u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0076\u00e0 \u0074\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0068\u1ed3\u0069 \u00a7c{2} +spectator=\u004b\u0068\u00e1\u006e \u0067\u0069\u1ea3 +kitContains=\u00a76\u0042\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u00a7c{0} \u00a76\u0062\u0061\u006f \u0067\u1ed3\u006d: +kitItem=\u00a76- \u00a7f{0} +invalidBanner=\u00a74\u0043\u1edd \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7. +msgDisabled=\u00a76\u0110\u00e3 \u00a7c\u0074\u1eaf\u0074\u00a76 \u0063\u0068\u1ebf \u0111\u1ed9 \u006e\u0068\u1ead\u006e \u0074\u0068\u01b0. +msgDisabledFor=\u00a76\u0110\u00e3 \u00a7c\u0074\u1eaf\u0074 \u00a76\u0063\u0068\u1ebf \u0111\u1ed9 \u006e\u0068\u1ead\u006e \u0074\u0068\u01b0 \u0063\u0068\u006f \u00a7c{0}\u00a76. +msgEnabled=\u00a76\u0110\u00e3 \u00a7c\u0062\u1ead\u0074\u00a76 \u0063\u0068\u1ebf \u0111\u1ed9 \u006e\u0068\u1ead\u006e \u0074\u0068\u01b0. +msgEnabledFor=\u00a76\u0110\u00e3 \u00a7c\u0062\u1ead\u0074 \u00a76\u0063\u0068\u1ebf \u0111\u1ed9 \u006e\u0068\u1ead\u006e \u0074\u0068\u01b0 \u0063\u0068\u006f \u00a7c{0}\u00a76. +msgIgnore=\u00a7c{0} \u00a74\u0111\u00e3 \u0074\u1eaf\u0074 \u0074\u0072\u00f2 \u0063\u0068\u0075\u0079\u1ec7\u006e \u0072\u0069\u00ea\u006e\u0067. +minimumPayAmount=\u00a7c\u0053\u1ed1 \u0074\u0069\u1ec1\u006e \u0074\u0068\u1ea5\u0070 \u006e\u0068\u1ea5\u0074 \u0062\u1ea1\u006e \u0063\u00f3 \u0074\u0068\u1ec3 \u0063\u0068\u0075\u0079\u1ec3\u006e \u006c\u00e0 {0}. +commandCooldown=\u00a7c\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0064\u00f9\u006e\u0067 \u006c\u1ea1\u0069 \u006c\u1ec7\u006e\u0068 \u0111\u00f3 \u0074\u0072\u006f\u006e\u0067 {0}. +createKitFailed=\u00a74\u0110\u00e3 \u0063\u00f3 \u006c\u1ed7\u0069 \u0078\u1ea3\u0079 \u0072\u0061 \u006b\u0068\u0069 \u0074\u1ea1\u006f \u0062\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 {0}. +createKitSeparator=\u00a7m----------------------- +createKitSuccess=\u00a76\u0042\u1ed9 \u0064\u1ee5\u006e\u0067 \u0063\u1ee5 \u0111\u00e3 \u0074\u1ea1\u006f: \u00a7f{0}\n\u00a76\u0054\u0068\u1edd\u0069 \u0067\u0069\u0061\u006e \u0068\u1ed3\u0069: \u00a7f{1}\n\u00a76\u0110\u1ecb\u0061 \u0063\u0068\u1ec9: \u00a7f{2}\n\u00a76\u0053\u0061\u006f \u0063\u0068\u00e9\u0070 \u006e\u1ed9\u0069 \u0064\u0075\u006e\u0067 \u0074\u0072\u006f\u006e\u0067 \u006c\u0069\u00ea\u006e \u006b\u1ebf\u0074 \u1edf \u0074\u0072\u00ea\u006e \u0076\u00e0\u006f \u0074\u1ec7\u0070 \u0063\u006f\u006e\u0066\u0069\u0067\u002e\u0079\u006d\u006c \u0063\u1ee7\u0061 \u0062\u1ea1\u006e. From 16b2c3dee38c1b82c9a781677e16932c177a19bb Mon Sep 17 00:00:00 2001 From: md678685 Date: Fri, 15 Jun 2018 19:09:27 +0100 Subject: [PATCH 061/333] Reset pending confirmations on login (#2033) On login, resets any pending confirmations for the user. Fixes #2021, closes #2023. --- .../src/com/earth2me/essentials/EssentialsPlayerListener.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index d67e8d9c6..b4f080e05 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -308,6 +308,9 @@ public class EssentialsPlayerListener implements Listener { user.setGodModeEnabled(false); ess.getLogger().log(Level.INFO, "Set god mode to false for {0} because they had it enabled without permission.", user.getName()); } + + user.setConfirmingClearCommand(null); + user.getConfirmingPayments().clear(); user.stopTransaction(); } From 27d9f3725af2a314614d27ea2174b96a16125f17 Mon Sep 17 00:00:00 2001 From: md678685 Date: Fri, 15 Jun 2018 19:18:55 +0100 Subject: [PATCH 062/333] Wrap constructScalar for SnakeYAML 1.21 (#2040) In theory, fixes #1974, fixes #1975 and fixes #1976, and also means that Spigot are free to upgrade SnakeYAML to 1.21 again when ready. --- .../essentials/storage/BukkitConstructor.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java index 54f780e52..2d82f134e 100644 --- a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java +++ b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java @@ -13,6 +13,8 @@ import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor; import org.yaml.snakeyaml.introspector.PropertyUtils; import org.yaml.snakeyaml.nodes.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Locale; @@ -32,10 +34,30 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { private class ConstructBukkitScalar extends ConstructScalar { + + private Method constructScalarMethod = null; + + protected String constructScalarRefl(ScalarNode scalarNode) { + try { + if (constructScalarMethod == null) { + constructScalarMethod = ConstructScalar.class.getMethod("constructScalar", ScalarNode.class); + } + return (String) constructScalarMethod.invoke(this, scalarNode); + } catch (NoSuchMethodException + | SecurityException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + e.printStackTrace(); + } + + return null; + } + @Override public Object construct(final Node node) { if (node.getType().equals(Material.class)) { - final String val = (String) constructScalar((ScalarNode) node); + final String val = constructScalarRefl((ScalarNode) node); Material mat; if (NumberUtil.isInt(val)) { final int typeId = Integer.parseInt(val); @@ -46,7 +68,7 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { return mat; } if (node.getType().equals(MaterialData.class)) { - final String val = (String) constructScalar((ScalarNode) node); + final String val = constructScalarRefl((ScalarNode) node); if (val.isEmpty()) { return null; } @@ -71,7 +93,7 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { return new MaterialData(mat, data); } if (node.getType().equals(ItemStack.class)) { - final String val = (String) constructScalar((ScalarNode) node); + final String val = constructScalarRefl((ScalarNode) node); if (val.isEmpty()) { return null; } @@ -134,7 +156,7 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { return stack; } if (node.getType().equals(EnchantmentLevel.class)) { - final String val = (String) constructScalar((ScalarNode) node); + final String val = constructScalarRefl((ScalarNode) node); if (val.isEmpty()) { return null; } From 4873beb100f999e6a839a36d8ccce4e65ecc4931 Mon Sep 17 00:00:00 2001 From: md678685 Date: Fri, 15 Jun 2018 19:20:06 +0100 Subject: [PATCH 063/333] Allow updating the compass target to be optional (#1937) If `compass-towards-home-perm` is enabled in the EssentialsX config, then the permission `essentials.home.compass` is checked before changing the player's compass target. Closes #1918. --- .../essentials/EssentialsPlayerListener.java | 3 +++ .../com/earth2me/essentials/ISettings.java | 2 ++ .../src/com/earth2me/essentials/Settings.java | 12 ++++++++++++ Essentials/src/config.yml | 19 +++++++++++++------ 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index b4f080e05..57a5b620e 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -353,7 +353,10 @@ public class EssentialsPlayerListener implements Listener { } // Makes the compass item ingame always point to the first essentials home. #EasterEgg + // EssentialsX: This can now optionally require a permission to enable, if set in the config. private void updateCompass(final User user) { + if (ess.getSettings().isCompassTowardsHomePerm() && !user.isAuthorized("essentials.home.compass")) return; + Location loc = user.getHome(user.getLocation()); if (loc == null) { loc = user.getBase().getBedSpawnLocation(); diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 367b4dbae..77b800836 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -306,4 +306,6 @@ public interface ISettings extends IConf { List getDefaultEnabledConfirmCommands(); boolean isConfirmCommandEnabledByDefault(String commandName); + + boolean isCompassTowardsHomePerm(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 56b4e50d5..cb1dbe2f4 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -533,6 +533,7 @@ public class Settings implements net.ess3.api.ISettings { currencyFormat = _getCurrencyFormat(); unprotectedSigns = _getUnprotectedSign(); defaultEnabledConfirmCommands = _getDefaultEnabledConfirmCommands(); + isCompassTowardsHomePerm = _isCompassTowardsHomePerm(); } private List itemSpawnBl = new ArrayList(); @@ -1439,4 +1440,15 @@ public class Settings implements net.ess3.api.ISettings { public boolean isConfirmCommandEnabledByDefault(String commandName) { return getDefaultEnabledConfirmCommands().contains(commandName.toLowerCase()); } + + private boolean isCompassTowardsHomePerm; + + private boolean _isCompassTowardsHomePerm() { + return config.getBoolean("compass-towards-home-perm", false); + } + + @Override + public boolean isCompassTowardsHomePerm() { + return isCompassTowardsHomePerm; + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 28fcf6ca1..24b8af5e7 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -522,6 +522,13 @@ default-enabled-confirm-commands: #- pay #- clearinventory +# Set the timeout, in seconds for players to accept a tpa before the request is cancelled. +# Set to 0 for no timeout. +tpa-accept-cancellation: 120 + +# Allow players to set hats by clicking on their helmet slot. +allow-direct-hat: true + ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # @@ -551,12 +558,12 @@ sethome-multiple: # In this example someone with 'essentials.sethome.multiple' and 'essentials.sethome.multiple.vip' will have 5 homes. # Remember, they MUST have both permission nodes in order to be able to set multiple homes. -# Set the timeout, in seconds for players to accept a tpa before the request is cancelled. -# Set to 0 for no timeout. -tpa-accept-cancellation: 120 - -# Allow players to set hats by clicking on their helmet slot. -allow-direct-hat: true +# Controls whether players need the permission "essentials.home.compass" in order to point +# the player's compass at their first home. +# +# Leaving this as false will retain Essentials' original behaviour, which is to always +# change the compass' direction to point towards their first home. +compass-towards-home-perm: false ############################################################ # +------------------------------------------------------+ # From de57a8c6025c8581b8eec9342e5812d871589914 Mon Sep 17 00:00:00 2001 From: md678685 Date: Fri, 15 Jun 2018 19:21:18 +0100 Subject: [PATCH 064/333] Disable EssProtect emergency mode when Ess loads late (#1954) Related: EssentialsX/Essentials#1951. --- .../essentials/protect/EmergencyListener.java | 14 +++++++++ .../essentials/protect/EssentialsProtect.java | 30 +++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EmergencyListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EmergencyListener.java index c48295aa1..7a9f2bba8 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EmergencyListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EmergencyListener.java @@ -10,9 +10,16 @@ import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.server.PluginEnableEvent; public class EmergencyListener implements Listener { + EssentialsProtect plugin; + + EmergencyListener(final EssentialsProtect essProtPlugin) { + plugin = essProtPlugin; + } + @EventHandler(priority = EventPriority.LOW) public void onBlockBurn(final BlockBurnEvent event) { event.setCancelled(true); @@ -47,4 +54,11 @@ public class EmergencyListener implements Listener { public void onEntityDamage(final EntityDamageEvent event) { event.setCancelled(true); } + + @EventHandler + public void onPluginEnabled(final PluginEnableEvent event) { + if (event.getPlugin().getName().equals("Essentials")) { + plugin.disableEmergencyMode(); + } + } } diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java index be3679365..49d12e521 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java @@ -1,6 +1,7 @@ package com.earth2me.essentials.protect; import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -19,6 +20,8 @@ public class EssentialsProtect extends JavaPlugin implements IProtect { private final Map> settingsList = new EnumMap>(ProtectConfig.class); private EssentialsConnect ess = null; + private final EmergencyListener emListener = new EmergencyListener(this); + @Override public void onEnable() { final PluginManager pm = this.getServer().getPluginManager(); @@ -27,6 +30,12 @@ public class EssentialsProtect extends JavaPlugin implements IProtect { enableEmergencyMode(pm); return; } + + initialize(pm, essPlugin); + } + + private void initialize(final PluginManager pm, final Plugin essPlugin) { + LOGGER.log(Level.INFO, "Continuing to enable Protect."); ess = new EssentialsConnect(essPlugin, this); final EssentialsProtectBlockListener blockListener = new EssentialsProtectBlockListener(this); @@ -40,13 +49,30 @@ public class EssentialsProtect extends JavaPlugin implements IProtect { } private void enableEmergencyMode(final PluginManager pm) { - final EmergencyListener emListener = new EmergencyListener(); pm.registerEvents(emListener, this); for (Player player : getServer().getOnlinePlayers()) { player.sendMessage("Essentials Protect is in emergency mode. Check your log for errors."); } - LOGGER.log(Level.SEVERE, "Essentials not installed or failed to load. Essenials Protect is in emergency mode now."); + LOGGER.log(Level.SEVERE, "Essentials not installed or failed to load. Essentials Protect is in emergency mode now."); + } + + void disableEmergencyMode() { + final PluginManager pm = this.getServer().getPluginManager(); + final Plugin essPlugin = pm.getPlugin("Essentials"); + if (essPlugin == null || !essPlugin.isEnabled()) { + LOGGER.log(Level.SEVERE, "Tried to disable emergency mode, but Essentials still isn't enabled!"); + return; + } + + HandlerList.unregisterAll(emListener); + + for (Player player : getServer().getOnlinePlayers()) { + player.sendMessage("Essentials Protect is no longer in emergency mode."); + } + LOGGER.log(Level.SEVERE, "Essentials was loaded late! Essentials Protect is no longer in emergency mode."); + + initialize(pm, essPlugin); } @Override From 8aa764f69f6d6a6c6dbe1856fbeb544898d31c94 Mon Sep 17 00:00:00 2001 From: md678685 Date: Fri, 15 Jun 2018 19:41:56 +0100 Subject: [PATCH 065/333] Check whether nick equals "off" before formatting Fixes #1910. --- .../src/com/earth2me/essentials/commands/Commandnick.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java index c5ba7386e..40c901163 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java @@ -55,16 +55,16 @@ public class Commandnick extends EssentialsLoopCommand { @Override protected void updatePlayer(final Server server, final CommandSource sender, final User target, final String[] args) throws NotEnoughArgumentsException { final String nick = args[0]; - if (target.getName().equalsIgnoreCase(nick)) { + if ("off".equalsIgnoreCase(nick)) { + setNickname(server, sender, target, null); + target.sendMessage(tl("nickNoMore")); + } else if (target.getName().equalsIgnoreCase(nick)) { String oldName = target.getDisplayName(); setNickname(server, sender, target, nick); if (!target.getDisplayName().equalsIgnoreCase(oldName)) { target.sendMessage(tl("nickNoMore")); } target.sendMessage(tl("nickSet", target.getDisplayName())); - } else if ("off".equalsIgnoreCase(nick)) { - setNickname(server, sender, target, null); - target.sendMessage(tl("nickNoMore")); } else if (nickInUse(server, target, nick)) { throw new NotEnoughArgumentsException(tl("nickInUse")); } else { From aa622f8d27f419a5db9872959be6cda8010de66a Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Mon, 18 Jun 2018 23:38:54 +0200 Subject: [PATCH 066/333] SPECTATOR mode is safe for teleporting everywhere. --- Essentials/src/com/earth2me/essentials/utils/LocationUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java index 64d5bb2c6..17682987c 100644 --- a/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java @@ -224,7 +224,7 @@ public class LocationUtil { } public static boolean isBlockUnsafeForUser(final IUser user, final World world, final int x, final int y, final int z) { - if (user.getBase().isOnline() && world.equals(user.getBase().getWorld()) && (user.getBase().getGameMode() == GameMode.CREATIVE || user.isGodModeEnabled()) && user.getBase().getAllowFlight()) { + if (user.getBase().isOnline() && world.equals(user.getBase().getWorld()) && (user.getBase().getGameMode() == GameMode.CREATIVE || user.getBase().getGameMode() == GameMode.SPECTATOR || user.isGodModeEnabled()) && user.getBase().getAllowFlight()) { return false; } From 6225dc8ed11d18bdb6acb68c2d85aca6acb0cdf8 Mon Sep 17 00:00:00 2001 From: montlikadani Date: Thu, 21 Jun 2018 14:39:25 +0200 Subject: [PATCH 067/333] Update messages_hu.properties --- Essentials/src/messages_hu.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index ed12273eb..08b6dce9f 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -112,7 +112,7 @@ enableUnlimited=\u00a76Lek\u00e9rve v\u00e9gtelen mennyis\u00e9g\u0171 \u00a7c { enchantmentApplied=\u00a76A k\u00f6vetkez\u0151 var\u00e1zs\:\u00a7c {0} \u00a76sikeresen r\u00e1 lett rakva a kezedbe l\u00e9v\u0151 dologra. enchantmentNotFound=\u00a74A var\u00e1zslat nem tal\u00e1lhat\u00f3\! enchantmentPerm=\u00a74Nincs jogod a k\u00f6vetkez\u0151 var\u00e1zslathoz\:\u00a7c {0}\u00a74. -enchantmentRemoved=\u00a76A k\u00f6vetkez\u0151 varรกzslat\:\u00a7c {0} \u00a76sikeresen le lett v\u00e9ve a kezedben l\u00e9v\u0151 dologr\u00f3l. +enchantmentRemoved=\u00a76A k\u00f6vetkez\u0151 var\u00e1zslat\:\u00a7c {0} \u00a76sikeresen le lett v\u00e9ve a kezedben l\u00e9v\u0151 dologr\u00f3l. enchantments=\u00a76Var\u00e1zslatok\:\u00a7r {0} errorCallingCommand=Hiba a parancs h\u00edv\u00e1s\u00e1ban /{0} errorWithMessage=\u00a7cHiba\:\u00a74 {0} From 49201b9945beeebec28af7cab52e50087fe0bd1c Mon Sep 17 00:00:00 2001 From: montlikadani Date: Thu, 28 Jun 2018 17:48:27 +0200 Subject: [PATCH 068/333] Update messages_hu.properties --- Essentials/src/messages_hu.properties | 44 +++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 08b6dce9f..8c7a4dca2 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -35,7 +35,7 @@ banJoin=Ki lett\u00e9l tiltva a szerverr\u0151l. Oka: {0} bed=\u00a7o\u00e1gy\u00a7r bedMissing=\u00a74Az \u00e1gyad nincs be\u00e1ll\u00edtva vagy eltorlaszolt\u00e1k. bedNull=\u00a7m\u00e1gy\u00a7r -bedSet=\u00a76\u00c1gyi kezd\u00f5hely be\u00e1ll\u00edtva\! +bedSet=\u00a76\u00c1gyi kezd\u0151hely be\u00e1ll\u00edtva\! bigTreeFailure=\u00a74Nagy fa gener\u00e1l\u00e1si hiba\! Pr\u00f3b\u00e1ld \u00fajra f\u00fcv\u00f6n vagy f\u00f6ld\u00f6n. bigTreeSuccess=\u00a76Nagy fa gener\u00e1lva. blockList=\u00a76Az Essentials \u00e1tengedte a k\u00f6vetkez\u0151 parancsokat egy m\u00e1sik pluginnak\: @@ -102,7 +102,7 @@ disabled=letiltva disabledToSpawnMob=\u00a74Ennek a l\u00e9nynek a leh\u00edv\u00e1sa jelenleg le van tiltva a konfig f\u00e1jlban. disableUnlimited=\u00a76Letiltva korl\u00e1tlan sz\u00e1m\u00fa\u00a7c {0} \u00a76 {1}. distance=\u00a76T\u00e1vols\u00e1g\: {0} -dontMoveMessage=\u00a76A teleport\u00e1l\u00e1s elkezd\u00f5dik\u00a7c {0}\u00a76 bel\u00fcl. Ne mozogj\! +dontMoveMessage=\u00a76A teleport\u00e1l\u00e1s elkezd\u0151dik\u00a7c {0}\u00a76 bel\u00fcl. Ne mozogj\! downloadingGeoIp=GeoIP adatb\u00e1zis let\u00f6lt\u00e9se folyamatban... Eltarthat egy kis ideig (orsz\u00e1g\: 1.7 MB, v\u00e1ros\: 30MB) duplicatedUserdata=Duplik\u00e1lt felhaszn\u00e1l\u00f3i adatok\: {0} \u00e9s {1}. durability=\u00a76Ez az eszk\u00f6z \u00a7c{0}\u00a76 haszn\u00e1ld balra. @@ -216,7 +216,7 @@ itemNotEnough2=\u00a76Ha el szeretn\u00e9d adni az \u00f6sszes ilyen t\u00e1rgya itemNotEnough3=\u00a76/sell itemname -1 mindet elad, de csak egy elemet, stb. itemsConverted=\u00a76\u00c1talak\u00edtva minden elemet blokkokk\u00e1. itemsCsvNotLoaded=Nem siker\u00fclt bet\u00f6lteni az items.csv\! -itemSellAir=T\u00e9nyleg el akartad adni a leveg\u00f5t? Vegy\u00e9l a kezedbe valami t\u00e1rgyat. +itemSellAir=T\u00e9nyleg el akartad adni a leveg\u0151t? Vegy\u00e9l a kezedbe valami t\u00e1rgyat. itemsNotConverted=\u00a74Nincs olyan elem, amely blokk\u00e1 alak\u00edthat\u00f3. itemSold=\u00a7aEladva \u00a7c{0} \u00a7a({1} {2} {3} minden). itemSoldConsole=\u00a7a{0} \u00a7aeladva {1} \u00a7a{2} \u00a7a({3} elem {4} minden). @@ -226,13 +226,13 @@ jailAlreadyIncarcerated=\u00a74A szem\u00e9ly m\u00e1r b\u00f6rt\u00f6nben van\: jailList=\u00a76B\u00f6rt\u00f6n\u00f6k\:\u00a7r {0} jailMessage=\u00a74A b\u0171ncselekm\u00e9nyt megteszed, akkor itt az id\u0151. jailNotExist=\u00a74Nincs ilyen b\u00f6rt\u00f6n. -jailReleased=\u00a7c{0}\u00a76 kiengedve a b\u00f6rt\u00f6nb\u00f5l. +jailReleased=\u00a7c{0}\u00a76 kiengedve a b\u00f6rt\u00f6nb\u0151l. jailReleasedPlayerNotify=\u00a76Kiengedtek a b\u00f6rt\u00f6nb\u0151l\! jailSentenceExtended=\u00a76B\u00f6rt\u00f6n ideje mostant\u00f3l\: {0} jailSet=\u00a7c{0} \u00a76 b\u00f6rt\u00f6n be\u00e1ll\u00edtva. jumpError=\u00a74Ez b\u00e1ntani fogja a sz\u00e1m\u00edt\u00f3g\u00e9p agy\u00e1t. kickDefault=Ki lett\u00e9l kickelve. -kickedAll=\u00a74\u00d6sszes j\u00e1t\u00e9kos kickelve a szerverr\u00f5l. +kickedAll=\u00a74\u00d6sszes j\u00e1t\u00e9kos kickelve a szerverr\u0151l. kickExempt=\u00a74\u00d5t nem kickelheted. kill=\u00a7c{0}\u00a76 meg\u00f6lve. killExempt=\u00a74Nem \u00f6lheted meg \u00a7c{0}\u00a74-t. @@ -286,7 +286,7 @@ mobsAvailable=\u00a76Enit\u00e1sok\:\u00a7r {0} mobSpawnError=\u00a74Hiba az entit\u00e1s-id\u00e9z\u0151 megv\u00e1ltoztat\u00e1sa k\u00f6zben. mobSpawnLimit=A kiszolg\u00e1l\u00f3i limitre korl\u00e1tozott entit\u00e1s mennyis\u00e9g. mobSpawnTarget=\u00a74A c\u00e9lblokknak entit\u00e1s id\u00e9z\u0151nek kell lennie. -moneyRecievedFrom=\u00a7a{0}-t kapt\u00e1l {1}\u00a7a-t\u00f3l/t\u00f5l. +moneyRecievedFrom=\u00a7a{0}-t kapt\u00e1l {1}\u00a7a-t\u00f3l/t\u0151l. moneySentTo=\u00a7a{0}-t k\u00fcldt\u00e9l {1}\u00a7a-nak/-nek. month=h\u00f3nap months=h\u00f3nap @@ -303,7 +303,7 @@ multiplePotionEffects=\u00a74Ezzel a b\u00e1jitallal t\u00f6bb hat\u00e1s nem al mutedPlayer=\u00a76\u00a7c{0} \u00a76len\u00e9m\u00edtva. mutedPlayerFor=\u00a76\u00a7c{0} \u00a76len\u00e9m\u00edtva\u00a7c {1}\u00a76-ra/-re. mutedUserSpeaks={0} megpr\u00f3b\u00e1lt besz\u00e9lni, de eln\u00e9m\u00edtva: {1} -muteExempt=\u00a74Nem n\u00e9m\u00edthatod \u00f5t. +muteExempt=\u00a74Nem n\u00e9m\u00edthatod \u0151t. muteExemptOffline=\u00a74Nem n\u00e9m\u00edthatsz le Offline j\u00e1t\u00e9kost. muteNotify=\u00a7c{0} \u00a76len\u00e9m\u00edtotta \u00a7c{1}\u00a76-t. muteNotifyFor=\u00a7c{0} \u00a76j\u00e1t\u00e9kos eln\u00e9m\u00edtva \u00a7c{1}\u00a76 \u00a7c {2}\u00a76. @@ -383,7 +383,7 @@ playerMutedFor=\u00a76Le lett\u00e9l n\u00e9m\u00edtva\u00a7c {0}-ra/-re. playerNeverOnServer=\u00a7c{0} \u00a74 m\u00e9g sose j\u00e1rt a szerveren. playerNotFound=\u00a74Nincs ilyen nev\u00fb j\u00e1t\u00e9kos. playerTempBanned=\u00a76A j\u00e1t\u00e9kos \u00a7c{0}\u00a76 ideiglenesen kitiltva \u00a7c{1}\u00a76 \u00a7c{2}\u00a76-ra/-re: \u00a7c{3}\u00a76. -playerUnbanIpAddress=\u00a76\u00a7c{0} \u00a76feloldotta a k\u00f6vetkez\u00f5 IP c\u00edmet\: {1}. +playerUnbanIpAddress=\u00a76\u00a7c{0} \u00a76feloldotta a k\u00f6vetkez\u0151 IP c\u00edmet\: {1}. playerUnbanned=\u00a76\u00a7c{0} \u00a76feloldotta {1}\u00a76-t. playerUnmuted=\u00a76Fel lett oldva a n\u00e9m\u00edt\u00e1sod. pong=Pong\! @@ -394,7 +394,7 @@ posY=\u00a76Y\: {0} (+Fel <-> -Le) posYaw=\u00a76Fordul\u00e1s\: {0} (Forg\u00e1s) posZ=\u00a76Z\: {0} (+D\u00e9l <-> -\u00c9szak) potions=\u00a76Var\u00e1zsitalok\:\u00a7r {0}\u00a76. -powerToolAir=\u00a74Nem csatolhatsz parancsot a leveg\u00f5h\u00f6z. +powerToolAir=\u00a74Nem csatolhatsz parancsot a leveg\u0151h\u00f6z. powerToolAlreadySet=\u00a74A(z)\u00a7c {0}\u00a74 parancs m\u00e1r bevan \u00e1ll\u00edtva \u00a7c{1}\u00a74-hoz/-hez. powerToolAttach=\u00a7c{0}\u00a76 berakva PowerToolnak a(z) {1}-ra/-re. powerToolClearAll=\u00a76\u00d6sszes PowerTool parancs ki\u00fcr\u00edtve. @@ -422,7 +422,7 @@ pWeatherReset=\u00a76A j\u00e1t\u00e9kos id\u0151j\u00e1r\u00e1sa vissza lett \u pWeatherSet=\u00a76A j\u00e1t\u00e9kos id\u0151j\u00e1r\u00e1s\u00e1nak be\u00e1ll\u00edt\u00e1sa \u00a7c{0}\u00a76 \: \u00a7c{1}. questionFormat=\u00a72[K\u00e9rd\u00e9s]\u00a7r {0} radiusTooBig=\u00a74Ez a sug\u00e1r t\u00fal nagy\! A maximum\: {0}. -readNextPage=\u00a76\u00cdrd be a\u00a7c /{0} {1} \u00a76 parancsot a k\u00f6vetkez\u00f5 oldal elolvas\u00e1s\u00e1hoz. +readNextPage=\u00a76\u00cdrd be a\u00a7c /{0} {1} \u00a76 parancsot a k\u00f6vetkez\u0151 oldal elolvas\u00e1s\u00e1hoz. recentlyForeverAlone=\u00a74{0} a k\u00f6zelm\u00faltban ment. recipe=\u00a76\u00a7c{0}\u00a76 receptje (\u00a7c{1}\u00a76 az \u00a7c{2}\u00a76-b\u00f3l/b\u0151l) recipeBadIndex=Nincs recept ennyihez. @@ -446,7 +446,7 @@ requestDenied=\u00a76Teleport\u00e1l\u00e1si k\u00e9relem elutas\u00edtva. requestDeniedFrom=\u00a7c{0} \u00a76elutas\u00edtotta a k\u00e9relmed. requestSent=\u00a76K\u00e9r\u00e9s elk\u00fcldve\u00a7c {0}\u00a76-nak/nek. requestSentAlready=\u00a74M\u00e1r elk\u00fcldted {0}\u00a74 a teleport k\u00e9relmet. -requestTimedOut=\u00a74A teleport\u00e1l\u00e1si k\u00e9relem kifutott az id\u00f5b\u00f5l. +requestTimedOut=\u00a74A teleport\u00e1l\u00e1si k\u00e9relem kifutott az id\u0151b\u0151l. requiredBukkit=\u00a76* \! * Sz\u00fcks\u00e9ged van a CraftBukkit \u00e9p\u00edt\u00e9s\u00e9hez {0}, let\u00f6lt\u00f6d innen http\://dl.bukkit.org/downloads/craftbukkit/ resetBal=\u00a76Egyenleg vissza\u00e1ll\u00edtva \u00a7a{0}-ra/-re \u00a76minden fentl\u00e9v\u0151 j\u00e1t\u00e9kosnak. resetBalAll=\u00a76Egyenleg vissza\u00e1ll\u00edtva \u00a7a{0}\u00a76-ra/-re az \u00f6sszes j\u00e1t\u00e9kosnak. @@ -479,15 +479,15 @@ socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(n\u00e9m\u00edtva) \u00a7 socialSpyPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a7r soloMob=\u00a74A mobok szeretnek egyed\u00fcl maradni. spawned=id\u00e9zve -spawnSet=\u00a76Kezd\u00f5pont be\u00e1ll\u00edtva a \u00a7c{0}\u00a76 csoportnak. +spawnSet=\u00a76Kezd\u0151pont be\u00e1ll\u00edtva a \u00a7c{0}\u00a76 csoportnak. spectator=n\u00e9z\u0151 -sudoExempt=\u00a74Nem k\u00e9nyszer\u00edtheted \u00f5t. +sudoExempt=\u00a74Nem k\u00e9nyszer\u00edtheted \u0151t. sudoRun=\u00a76Er\u00f6ltet\u00e9se\u00a7c {0} \u00a76futtat\u00e1s\:\u00a7r /{1} suicideMessage=\u00a76Viszl\u00e1t sz\u00e9p vil\u00e1g... suicideSuccess=\u00a76{0} \u00a76feladta az \u00e9let\u00e9t. -survival=t\u00fal\u00e9l\u00f5 -takenFromAccount=\u00a7a{0} lev\u00e9ve az egyenlegedr\u00f5l. -takenFromOthersAccount=\u00a7a{0} lev\u00e9ve {1}\u00a7a egyenleg\u00e9r\u00f5l. \u00daj egyenleg\: {2}. +survival=t\u00fal\u00e9l\u0151 +takenFromAccount=\u00a7a{0} lev\u00e9ve az egyenlegedr\u0151l. +takenFromOthersAccount=\u00a7a{0} lev\u00e9ve {1}\u00a7a egyenleg\u00e9r\u0151l. \u00daj egyenleg\: {2}. teleportAAll=\u00a76A teleport\u00e1l\u00e1si k\u00e9relem mindenkinek elk\u00fcldve... teleportAll=\u00a76\u00d6sszes j\u00e1t\u00e9kos teleport\u00e1l\u00e1sa... teleportationCommencing=\u00a76Teleport\u00e1l\u00e1s megkezd\u00e9se... @@ -516,7 +516,7 @@ thunderDuration=\u00a7c {0} \u00a76mennyd\u00f6rg\u00f6tt a vil\u00e1godban\u00a timeBeforeHeal=\u00a74A k\u00f6vetkez\u0151 \u00e9let felt\u00f6lt\u00e9s\:\u00a7c {0}\u00a76. timeBeforeTeleport=\u00a74A k\u00f6vetkez\u0151 teleport\u00e1l\u00e1s\:\u00a7c {0}\u00a76. timeFormat=\u00a7c{0}\u00a76 vagy \u00a7c{1}\u00a76 vagy \u00a7c{2}\u00a76 -timeSetPermission=\u00a74Nincs jogod, hogy \u00e1ll\u00edtsd az id\u00f5t. +timeSetPermission=\u00a74Nincs jogod, hogy \u00e1ll\u00edtsd az id\u0151t. timeSetWorldPermission=\u00a74Nincs jogod be\u00e1ll\u00edtani az id\u0151t a(z) ''{0}'' vil\u00e1gban. timeWorldCurrent=\u00a76A jelenlegi id\u0151\u00a7c {0} \u00a7c{1}\u00a76. timeWorldSet=\u00a76Id\u0151 be\u00e1ll\u00edtva\u00a7c {0}\u00a76-re a(z) \u00a7c{1}\u00a76 vil\u00e1gban. @@ -546,7 +546,7 @@ unmutedPlayer=\u00a7c {0}\u00a76-r\u00f3l fel lett oldva a n\u00e9m\u00edt\u00e1 unsafeTeleportDestination=\u00a74Ahova teleport\u00e1lni szeretn\u00e9l nem biztons\u00e1gos \u00e9s a biztons\u00e1gos teleport\u00e1l\u00e1s kikapcsolva. unvanishedReload=\u00a74Az \u00fajrat\u00f6lt\u00e9s k\u00f6vetkezt\u00e9ben mindenki l\u00e1tni fog. upgradingFilesError=Hiba t\u00f6rt\u00e9nt a f\u00e1jlok friss\u00edt\u00e9se k\u00f6zben. -uptime=\u00a76M\u00fbk\u00f6d\u00e9si id\u00f5\:\u00a7c {0} +uptime=\u00a76M\u00fbk\u00f6d\u00e9si id\u0151\:\u00a7c {0} userAFK=\u00a75{0} \u00a75most AFK \u00e9s nem biztos, hogy v\u00e1laszolni fog. userAFKWithMessage=\u00a75{0} \u00a75most AFK \u00e9s nem biztos, hogy fog v\u00e1laszolni. {1} userdataMoveBackError=Nem siker\u00fclt az userdata/{0}.tmp \u00e1thelyez\u00e9se a userdata/{1}\! @@ -559,7 +559,7 @@ userJailed=\u00a76Beb\u00f6rt\u00f6n\u00f6ztek\! userUnknown=\u00a74Figyelem\: ''\u00a7c{0}\u00a74'' m\u00e9g sose j\u00e1rt a szerveren. usingTempFolderForTesting=H\u0151mapp\u00e1k haszn\u00e1lata a tesztel\u00e9shez\: vanish=\u00a76L\u00e1thatatlans\u00e1g {0}\u00a76-nak/-nek\: {1} -vanished=\u00a76Sikeresen elt\u00fcnt\u00e9l a norm\u00e1lis j\u00e1t\u00e9kosok el\u00f5l \u00e9s a j\u00e1t\u00e9kbeli parancsokb\u00f3l. +vanished=\u00a76Sikeresen elt\u00fcnt\u00e9l a norm\u00e1lis j\u00e1t\u00e9kosok el\u0151l \u00e9s a j\u00e1t\u00e9kbeli parancsokb\u00f3l. versionMismatch=\u00a74Verzi\u00f3 elt\u00e9r\u00e9s\! K\u00e9rj\u00fck, friss\u00edtse a(z) {0} a legfrissebb verzi\u00f3ra. versionMismatchAll=\u00a74Verzi\u00f3 elt\u00e9r\u00e9s\! K\u00e9rj\u00fck, friss\u00edtse az \u00f6sszes Essentials jart a legfrissebb verzi\u00f3ra. voiceSilenced=\u00a76El vagy n\u00e9m\u00edtva\! @@ -575,9 +575,9 @@ warpsCount=\u00a76Van\u00a7c {0} \u00a76warp. Ez az \u00a7c{1}.\u00a76 oldal a \ warpSet=\u00a76Warp\u00a7c {0} \u00a76be\u00e1ll\u00edtva. warpUsePermission=\u00a74Nincs jogod oda warpolni. weatherInvalidWorld=A vil\u00e1g {0} nem tal\u00e1lhat\u00f3\! -weatherStorm=\u00a76Be\u00e1ll\u00edtottad az id\u00f5t \u00a7ces\u00f5sre\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. +weatherStorm=\u00a76Be\u00e1ll\u00edtottad az id\u0151t \u00a7ces\u0151sre\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. weatherStormFor=\u00a76Be\u00e1ll\u00edtottad az id\u0151j\u00e1r\u00e1st \u00a7ces\u0151sre\u00a7c {0}\u00a76 vil\u00e1gban {1} m\u00e1sodpercre. -weatherSun=\u00a76Be\u00e1ll\u00edtottad az id\u00f5t \u00a7cnaposra\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. +weatherSun=\u00a76Be\u00e1ll\u00edtottad az id\u0151t \u00a7cnaposra\u00a76 a(z)\u00a7c {0}\u00a76 vil\u00e1gban. weatherSunFor=\u00a76Be\u00e1ll\u00edtottad az id\u0151j\u00e1r\u00e1st \u00a7cnaposra\u00a7c {0}\u00a76 vil\u00e1gban \u00a76 {1} m\u00e1sodpercre. whoisAFK=\u00a76 - AFK\:\u00a7r {0} whoisAFKSince=\u00a76 - AFK\:\u00a7r {0} (Mivel {1}) @@ -606,4 +606,4 @@ worthSet=\u00a76\u00c1r be\u00e1ll\u00edtva year=\u00e9v years=\u00e9v youAreHealed=\u00a76\u00c9leted felt\u00f6ltve. -youHaveNewMail=\u00a76Van\u00a7c {0} \u00a76\u00fczeneted\! \u00cdrd be a \u00a7c/mail read\u00a76 parancsot, hogy elolvasd \u00f5ket. +youHaveNewMail=\u00a76Van\u00a7c {0} \u00a76\u00fczeneted\! \u00cdrd be a \u00a7c/mail read\u00a76 parancsot, hogy elolvasd \u0151ket. From 187c4eb371e3ae2b130902b045a1a62500b0fa00 Mon Sep 17 00:00:00 2001 From: montlikadani Date: Thu, 28 Jun 2018 18:27:02 +0200 Subject: [PATCH 069/333] Update messages_hu.properties --- Essentials/src/messages_hu.properties | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 8c7a4dca2..5bf5e2b03 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -19,7 +19,7 @@ antiBuildInteract=\u00a74Nincs jogod, hogy interakci\u00f3ba l\u00e9pj a\u00a7c antiBuildPlace=\u00a74Nincs jogod, hogy lehelyezed\u00a7c {0} \u00a74ide. antiBuildUse=\u00a74Nincs jogod, hogy haszn\u00e1ld a k\u00f6vetkez\u0151t\:\u00a7c {0}\u00a74. autoAfkKickReason=Kickelve lett\u00e9l {0} perc AFK miatt\! -backAfterDeath=\u00a76Meghalt\u00e1l\! A \u00a74/back\u00a76 paranccsal visszajuthatsz hal\u00e1lod sz\u00ednhely\u00e9re. +backAfterDeath=\u00a76Meghalt\u00e1l\! A \u00a74/back\u00a76 paranccsal visszajuthatsz a hal\u00e1lod sz\u00ednhely\u00e9re. backupDisabled=\u00a74A ment\u00e9s nincs k\u00e9sz. backupFinished=\u00a76A biztons\u00e1gi ment\u00e9s k\u00e9sz. backupStarted=\u00a76A biztons\u00e1gi ment\u00e9s elkezdve. @@ -119,7 +119,7 @@ errorWithMessage=\u00a7cHiba\:\u00a74 {0} essentialsHelp1=A f\u00e1jl t\u00f6r\u00f6tt, \u00e9s az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijav\u00edtani a f\u00e1jlt, akkor menjen http\://tiny.cc/EssentialsChat essentialsHelp2=A f\u00e1jl t\u00f6r\u00f6tt, \u00e9s az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja kijav\u00edtani a f\u00e1jlt, \u00edrja be /essentials help a j\u00e1t\u00e9kban vagy menjen http\://tiny.cc/EssentialsChat essentialsReload=\u00a76Essentials \u00fajrat\u00f6ltve\u00a7c {0}. -exp=\u00a7c{0}\u00a7c {1} \u00a76xp (szint\u00a7c {2}\u00a76) \u00e9s kell\u00a7c {3} \u00a76t\u00f6bb xp a szintl\u00e9p\u00e9shez. +exp=\u00a7c{0}\u00a7c {1} \u00a76xp (szint\u00a7c {2}\u00a76) \u00e9s kell\u00a7c {3} xp a szintl\u00e9p\u00e9shez. expSet=\u00a7c{0} \u00a76most van\u00a7c {1} \u00a76xp. extinguish=\u00a76Eloltottad magad. extinguishOthers=\u00a76Eloltottad {0}\u00a76-t. @@ -233,10 +233,10 @@ jailSet=\u00a7c{0} \u00a76 b\u00f6rt\u00f6n be\u00e1ll\u00edtva. jumpError=\u00a74Ez b\u00e1ntani fogja a sz\u00e1m\u00edt\u00f3g\u00e9p agy\u00e1t. kickDefault=Ki lett\u00e9l kickelve. kickedAll=\u00a74\u00d6sszes j\u00e1t\u00e9kos kickelve a szerverr\u0151l. -kickExempt=\u00a74\u00d5t nem kickelheted. +kickExempt=\u00a74\u0151t nem kickelheted. kill=\u00a7c{0}\u00a76 meg\u00f6lve. killExempt=\u00a74Nem \u00f6lheted meg \u00a7c{0}\u00a74-t. -kitContains=\u00a76A csomag \u00a7c{0} \u00a76tartalmaz: +kitContains=\u00a76A(z) \u00a7c{0} \u00a76csomag tartalmaz: kitCost=\ \u00a77\u00a7o({0})\u00a7r kitDelay=\u00a7m{0}\u00a7r kitError=\u00a74Nincs el\u00e9rhet\u0151 csomag. @@ -260,7 +260,7 @@ listHiddenTag=\u00a77[REJTETT]\u00a7r loadWarpError=\u00a74Nem siker\u00fclt a warp bet\u00f6lt\u00e9se {0}. localFormat=[H]<{0}> {1} localNoOne= -mailClear=\u00a76Hogy megjel\u00f6ld olvasottk\u00e9nt \u00edrd be a\u00a7c /mail clear \u00a76parancsot. +mailClear=\u00a76Hogy t\u00f6r\u00f6ld az \u00fczenetet, \u00edrd be a\u00a7c /mail clear \u00a76parancsot. mailCleared=\u00a76\u00dczenetek t\u00f6r\u00f6lve\! mailDelay=T\u00fal sok lev\u00e9l lett elk\u00fcldve az utols\u00f3 percben. Maximum\: {0} mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1} @@ -270,11 +270,11 @@ mailSentTo=\u00a7c{0}\u00a76 elk\u00fcldt\u00fck a k\u00f6vetkez\u0151 levelet\: mailTooLong=\u00a74Az \u00fczeneted t\u00fal hossz\u00fa. Pr\u00f3b\u00e1ld 1000 karakter alatt. markedAsAway=\u00a76M\u00e1r kijel\u00f6lted, mint t\u00e1vol. markedAsNotAway=\u00a76M\u00e1r nem jel\u00f6lted ki. -markMailAsRead=\u00a76Hogy megjel\u00f6ld olvasottk\u00e9nt, \u00edrd be a\u00a7c /mail clear \u00a76parancsot. +markMailAsRead=\u00a76Hogy t\u00f6r\u00f6ld az \u00fczenetet, \u00edrd be a\u00a7c /mail clear \u00a76parancsot. matchingIPAddress=\u00a76Az al\u00e1bbi j\u00e1t\u00e9kosok csatlakoztak utolj\u00e1ra err\u0151l az IP c\u00edmr\u0151l\: maxHomes=\u00a74Nem \u00e1ll\u00edthatsz be t\u00f6bb\u00a7c {0} \u00a74otthont. maxMoney=\u00a74Ez a tranzakci\u00f3 meghaladja a be\u00e1ll\u00edtott maxim\u00e1lis tranzakci\u00f3 hat\u00e1r\u00e9rt\u00e9k\u00e9t. -mayNotJail=\u00a74\u00d5t nem teheted b\u00f6rt\u00f6nbe\! +mayNotJail=\u00a74\u0151t nem teheted b\u00f6rt\u00f6nbe\! mayNotJailOffline=\u00a74Nem b\u00f6rt\u00f6n\u00f6zhetsz be Offline j\u00e1t\u00e9kost. me=\u00e9n minimumPayAmount=\u00a7cA minim\u00e1lis \u00f6sszeg, amit fizethetsz, {0}. @@ -381,7 +381,7 @@ playerKicked=\u00a7c{0} \u00a76 kickelte {1}-t. Indok\: {2}. playerMuted=\u00a76El lett\u00e9l n\u00e9m\u00edtva\! playerMutedFor=\u00a76Le lett\u00e9l n\u00e9m\u00edtva\u00a7c {0}-ra/-re. playerNeverOnServer=\u00a7c{0} \u00a74 m\u00e9g sose j\u00e1rt a szerveren. -playerNotFound=\u00a74Nincs ilyen nev\u00fb j\u00e1t\u00e9kos. +playerNotFound=\u00a74Nincs ilyen nev\u0171 j\u00e1t\u00e9kos. playerTempBanned=\u00a76A j\u00e1t\u00e9kos \u00a7c{0}\u00a76 ideiglenesen kitiltva \u00a7c{1}\u00a76 \u00a7c{2}\u00a76-ra/-re: \u00a7c{3}\u00a76. playerUnbanIpAddress=\u00a76\u00a7c{0} \u00a76feloldotta a k\u00f6vetkez\u0151 IP c\u00edmet\: {1}. playerUnbanned=\u00a76\u00a7c{0} \u00a76feloldotta {1}\u00a76-t. @@ -394,7 +394,7 @@ posY=\u00a76Y\: {0} (+Fel <-> -Le) posYaw=\u00a76Fordul\u00e1s\: {0} (Forg\u00e1s) posZ=\u00a76Z\: {0} (+D\u00e9l <-> -\u00c9szak) potions=\u00a76Var\u00e1zsitalok\:\u00a7r {0}\u00a76. -powerToolAir=\u00a74Nem csatolhatsz parancsot a leveg\u0151h\u00f6z. +powerToolAir=\u00a74Nem csatolhatsz parancsot leveg\u0151h\u00f6z. powerToolAlreadySet=\u00a74A(z)\u00a7c {0}\u00a74 parancs m\u00e1r bevan \u00e1ll\u00edtva \u00a7c{1}\u00a74-hoz/-hez. powerToolAttach=\u00a7c{0}\u00a76 berakva PowerToolnak a(z) {1}-ra/-re. powerToolClearAll=\u00a76\u00d6sszes PowerTool parancs ki\u00fcr\u00edtve. @@ -422,7 +422,7 @@ pWeatherReset=\u00a76A j\u00e1t\u00e9kos id\u0151j\u00e1r\u00e1sa vissza lett \u pWeatherSet=\u00a76A j\u00e1t\u00e9kos id\u0151j\u00e1r\u00e1s\u00e1nak be\u00e1ll\u00edt\u00e1sa \u00a7c{0}\u00a76 \: \u00a7c{1}. questionFormat=\u00a72[K\u00e9rd\u00e9s]\u00a7r {0} radiusTooBig=\u00a74Ez a sug\u00e1r t\u00fal nagy\! A maximum\: {0}. -readNextPage=\u00a76\u00cdrd be a\u00a7c /{0} {1} \u00a76 parancsot a k\u00f6vetkez\u0151 oldal elolvas\u00e1s\u00e1hoz. +readNextPage=\u00a76\u00cdrd be a\u00a7c /{0} {1}\u00a76 parancsot a k\u00f6vetkez\u0151 oldal elolvas\u00e1s\u00e1hoz. recentlyForeverAlone=\u00a74{0} a k\u00f6zelm\u00faltban ment. recipe=\u00a76\u00a7c{0}\u00a76 receptje (\u00a7c{1}\u00a76 az \u00a7c{2}\u00a76-b\u00f3l/b\u0151l) recipeBadIndex=Nincs recept ennyihez. @@ -524,7 +524,7 @@ totalSellableAll=\u00a7aAz \u00f6sszes eladhat\u00f3 dolgod\u00e9rt \u00e9s bloc totalSellableBlocks=\u00a7aAz \u00f6sszes eladhat\u00f3 blockjaid\u00e9rt \u00a7c{1}\u00a7a-t kapsz. totalWorthAll=\u00a7aMinden t\u00e1rgyat \u00e9s blokkot eladt\u00e1l egy teljes \u00e9rt\u00e9kre \u00a7c{1}\u00a7a. totalWorthBlocks=\u00a7aEladtad az \u00f6sszes blokkot, \u00f6sszesen \u00e9rt\u00e9kben \u00a7c{1}\u00a7a. -tps=\u00a76Jelenlegi TPS\= {0} +tps=\u00a76Jelenlegi TPS \= {0} tradeSignEmpty=\u00a74A t\u00e1bla nem tud neked adni \u00e1rut. tradeSignEmptyOwner=\u00a74A t\u00e1bl\u00e1b\u00f3l m\u00e9g nem v\u00e1s\u00e1rolt senki. treeFailure=\u00a74Fa termel\u00e9si hiba. Pr\u00f3b\u00e1ld \u00fajra a f\u00f6ld\u00f6n. @@ -546,7 +546,7 @@ unmutedPlayer=\u00a7c {0}\u00a76-r\u00f3l fel lett oldva a n\u00e9m\u00edt\u00e1 unsafeTeleportDestination=\u00a74Ahova teleport\u00e1lni szeretn\u00e9l nem biztons\u00e1gos \u00e9s a biztons\u00e1gos teleport\u00e1l\u00e1s kikapcsolva. unvanishedReload=\u00a74Az \u00fajrat\u00f6lt\u00e9s k\u00f6vetkezt\u00e9ben mindenki l\u00e1tni fog. upgradingFilesError=Hiba t\u00f6rt\u00e9nt a f\u00e1jlok friss\u00edt\u00e9se k\u00f6zben. -uptime=\u00a76M\u00fbk\u00f6d\u00e9si id\u0151\:\u00a7c {0} +uptime=\u00a76M\u0171k\u00f6d\u00e9si id\u0151\:\u00a7c {0} userAFK=\u00a75{0} \u00a75most AFK \u00e9s nem biztos, hogy v\u00e1laszolni fog. userAFKWithMessage=\u00a75{0} \u00a75most AFK \u00e9s nem biztos, hogy fog v\u00e1laszolni. {1} userdataMoveBackError=Nem siker\u00fclt az userdata/{0}.tmp \u00e1thelyez\u00e9se a userdata/{1}\! @@ -589,7 +589,7 @@ whoisGeoLocation=\u00a76 - Helyezked\u00e9s\:\u00a7r {0} whoisGod=\u00a76 - Isten m\u00f3d\:\u00a7r {0} whoisHealth=\u00a76 - \u00c9let\:\u00a7r {0}/20 whoisHunger=\u00a76 - \u00c9hs\u00e9g\:\u00a7r {0}/20 (+{1} tel\u00edtetts\u00e9g) -whoisIPAddress=\u00a76 - IP C\u00edm\:\u00a7r {0} +whoisIPAddress=\u00a76 - IP c\u00edm\:\u00a7r {0} whoisJail=\u00a76 - B\u00f6rt\u00f6n\:\u00a7r {0} whoisLocation=\u00a76 - Helye\:\u00a7r ({0}, {1}, {2}, {3}) whoisMoney=\u00a76 - P\u00e9nz\:\u00a7r {0} @@ -602,7 +602,7 @@ whoisTop=\u00a76 \=\=\=\=\=\= Ki is \u0151:\u00a7c {0} \u00a76\=\=\=\=\=\= whoisUuid=\u00a76 - UUID\:\u00a7r {0} worth=\u00a7aStackel\u00e9s {0} \u00e9rdemes \u00a7c{1}\u00a7a ({2} elem(ek) {3} minden) worthMeta=\u00a7aStackel\u00e9s {0} az {1} \u00e9rt\u00e9k\u0171 metaadatokkal \u00a7c{2}\u00a7a ({3} elem(ek) {4} minden) -worthSet=\u00a76\u00c1r be\u00e1ll\u00edtva +worthSet=\u00a76\u00c1r be\u00e1ll\u00edtva. year=\u00e9v years=\u00e9v youAreHealed=\u00a76\u00c9leted felt\u00f6ltve. From a44775cafb9cd01318c89c6a9896a07cee772f95 Mon Sep 17 00:00:00 2001 From: md678685 Date: Tue, 17 Jul 2018 07:33:14 +0100 Subject: [PATCH 070/333] Prevent users being duplicated in the ignore list Fixes #2064, as well as alleviating the issue encountered in kangarko/ChatControl-Pro#627 for EssentialsX users. --- Essentials/src/com/earth2me/essentials/UserData.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 1fe8f5581..9a0265438 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -467,10 +467,11 @@ public abstract class UserData extends PlayerExtension implements IConf { } public void setIgnoredPlayer(IUser user, boolean set) { + final String entry = user.getName().toLowerCase(Locale.ENGLISH); if (set) { - ignoredPlayers.add(user.getName().toLowerCase(Locale.ENGLISH)); + if (!ignoredPlayers.contains(entry)) ignoredPlayers.add(entry); } else { - ignoredPlayers.remove(user.getName().toLowerCase(Locale.ENGLISH)); + ignoredPlayers.remove(entry); } setIgnoredPlayers(ignoredPlayers); } From 03b25a0f063d50046e9bb0870db6f6ddef216f51 Mon Sep 17 00:00:00 2001 From: DoNotSpamPls Date: Tue, 17 Jul 2018 11:38:01 +0300 Subject: [PATCH 071/333] Set target to Java 8 (for 1.13) & update Maven plugins (#1922) @DoNotSpamPls This is the same PR as the last one (PR #1823), but I messed that one up accidently, sorry for that! --- .travis.yml | 18 ------------------ Essentials/pom.xml | 4 ++-- EssentialsGeoIP/pom.xml | 8 +------- EssentialsXMPP/pom.xml | 11 +++-------- README.md | 2 +- nbactions.xml | 2 -- nms/ReflectionProvider/pom.xml | 7 ------- nms/UpdatedMetaProvider/pom.xml | 9 +-------- pom.xml | 26 +++++++++++++------------- 9 files changed, 21 insertions(+), 66 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index c72688b41..000000000 --- a/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: java -jdk: - - oraclejdk7 - - openjdk7 - - openjdk6 -script: mvn compile test -install: true -notifications: - irc: - channels: - - "irc.esper.net#drtshock" - on_success: change - on_failure: always - email: - recipients: - - "drtshock13@gmail.com" - on_success: change - on_failure: always diff --git a/Essentials/pom.xml b/Essentials/pom.xml index c2e2b8480..ae5d8849e 100644 --- a/Essentials/pom.xml +++ b/Essentials/pom.xml @@ -23,7 +23,7 @@ org.apache.maven.plugins maven-compiler-plugin - 2.3.2 + 3.7.0 false @@ -31,7 +31,7 @@ org.apache.maven.plugins maven-shade-plugin - 1.4 + 3.1.0 package diff --git a/EssentialsGeoIP/pom.xml b/EssentialsGeoIP/pom.xml index 1f69e5578..b6e839e79 100644 --- a/EssentialsGeoIP/pom.xml +++ b/EssentialsGeoIP/pom.xml @@ -18,12 +18,6 @@ - - scm:git:https://github.com/essentials/Essentials.git - scm:git:https://github.com/essentials/Essentials.git - https://github.com/essentials/Essentials - - net.ess3 @@ -42,7 +36,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.1 + 3.1.0 package diff --git a/EssentialsXMPP/pom.xml b/EssentialsXMPP/pom.xml index a127be087..412cc76ad 100644 --- a/EssentialsXMPP/pom.xml +++ b/EssentialsXMPP/pom.xml @@ -23,11 +23,13 @@ net.ess3 EssentialsX ${project.version} + provided org.igniterealtime.smack smack 3.2.1 + compile @@ -36,7 +38,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.1 + 3.1.0 package @@ -45,13 +47,6 @@ - - - - org.igniterealtime.smack:smack - - -
    diff --git a/README.md b/README.md index b5be087ef..7779623dc 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ EssentialsX is almost a completely drop-in replacement for Essentials. However, * **If you have an unsupported permissions plugin but still wish to use wildcards, enable `use-bukkit-permissions` in the configuration. Otherwise, the plugin will fall back to config-based permissions.** -* **EssentialsX requires Java 7 or higher.** +* **EssentialsX requires Java 8 or higher.** * **1.7.10 is no longer supported.** diff --git a/nbactions.xml b/nbactions.xml index bdec16480..b4d59eee5 100644 --- a/nbactions.xml +++ b/nbactions.xml @@ -6,8 +6,6 @@ package dependency:copy - - diff --git a/nms/ReflectionProvider/pom.xml b/nms/ReflectionProvider/pom.xml index 101327ba5..6906b71f7 100644 --- a/nms/ReflectionProvider/pom.xml +++ b/nms/ReflectionProvider/pom.xml @@ -12,13 +12,6 @@ ReflectionProvider - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - net.ess3 diff --git a/nms/UpdatedMetaProvider/pom.xml b/nms/UpdatedMetaProvider/pom.xml index 9ed83fb85..dfa6a4f14 100644 --- a/nms/UpdatedMetaProvider/pom.xml +++ b/nms/UpdatedMetaProvider/pom.xml @@ -11,14 +11,7 @@ 4.0.0 UpdatedMetaProvider - - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - + net.ess3 diff --git a/pom.xml b/pom.xml index 8e557c94b..6c81a14b1 100644 --- a/pom.xml +++ b/pom.xml @@ -17,9 +17,9 @@ - scm:git:https://github.com/drtshock/Essentials.git - scm:git:https://github.com/drtshock/Essentials.git - https://github.com/drtshock/Essentials + scm:git:https://github.com/EssentialsX/Essentials.git + scm:git:https://github.com/EssentialsX/Essentials.git + https://github.com/EssentialsX/Essentials @@ -59,13 +59,13 @@ junit junit - 4.11 + 4.12 test org.projectlombok lombok - 1.12.2 + 1.16.20 provided @@ -77,10 +77,10 @@ org.apache.maven.plugins maven-compiler-plugin - 3.1 + 3.7.0 - 1.7 - 1.7 + 1.8 + 1.8 @@ -109,7 +109,7 @@ org.apache.maven.plugins maven-dependency-plugin - 2.8 + 3.0.2 jars true @@ -155,7 +155,7 @@ maven-resources-plugin - 2.6 + 3.0.2 package @@ -186,7 +186,7 @@ com.google.code.maven-replacer-plugin replacer - 1.5.2 + 1.5.3 process-sources @@ -240,12 +240,12 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.0.0 org.apache.maven.plugins maven-deploy-plugin - 2.8.1 + 2.8.2 true From 768b92749f769b94992ace988f435b005c26a64b Mon Sep 17 00:00:00 2001 From: Ali Moghnieh Date: Sun, 29 Jul 2018 17:39:32 +0100 Subject: [PATCH 072/333] update bukkit to 1.13-R0.1-SNAPSHOT. This commit just fixes compilation errors. --- .../com/earth2me/essentials/Enchantments.java | 10 ++--- .../essentials/EssentialsBlockListener.java | 8 +++- .../src/com/earth2me/essentials/ItemDb.java | 8 +++- .../earth2me/essentials/OfflinePlayer.java | 41 +++++++++++++++++++ .../essentials/commands/Commandspawner.java | 8 +++- .../essentials/craftbukkit/FakeWorld.java | 7 +++- .../essentials/storage/BukkitConstructor.java | 18 ++------ .../essentials/utils/LocationUtil.java | 21 ++++++++-- Essentials/src/plugin.yml | 1 + .../com/earth2me/essentials/FakeServer.java | 25 +++++++---- .../src/net/ess3/nms/SpawnerProvider.java | 8 +++- pom.xml | 2 +- 12 files changed, 121 insertions(+), 36 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Enchantments.java b/Essentials/src/com/earth2me/essentials/Enchantments.java index d71233ee5..f8c957420 100644 --- a/Essentials/src/com/earth2me/essentials/Enchantments.java +++ b/Essentials/src/com/earth2me/essentials/Enchantments.java @@ -1,6 +1,8 @@ package com.earth2me.essentials; import com.earth2me.essentials.utils.NumberUtil; + +import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; import java.util.HashMap; @@ -200,11 +202,9 @@ public class Enchantments { } public static Enchantment getByName(String name) { - Enchantment enchantment; - if (NumberUtil.isInt(name)) { - enchantment = Enchantment.getById(Integer.parseInt(name)); - } else { - enchantment = Enchantment.getByName(name.toUpperCase(Locale.ENGLISH)); + Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(name.toLowerCase())); + if (enchantment == null) { + enchantment = Enchantment.getByName(name.toUpperCase()); } if (enchantment == null) { enchantment = ENCHANTMENTS.get(name.toLowerCase(Locale.ENGLISH)); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java index 59b6c0f97..dc6e954ba 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java @@ -31,8 +31,14 @@ public class EssentialsBlockListener implements Listener { if (is == null) { return; } + Material MOB_SPAWNER; + try { + MOB_SPAWNER = Material.SPAWNER; + } catch (Exception e) { + MOB_SPAWNER = Material.valueOf("MOB_SPAWNER"); + } - if (is.getType() == Material.MOB_SPAWNER && event.getItemInHand() != null && event.getPlayer() != null && event.getItemInHand().getType() == Material.MOB_SPAWNER) { + if (is.getType() == MOB_SPAWNER && event.getItemInHand() != null && event.getPlayer() != null && event.getItemInHand().getType() == MOB_SPAWNER) { final BlockState blockState = event.getBlockPlaced().getState(); if (blockState instanceof CreatureSpawner) { final CreatureSpawner spawner = (CreatureSpawner) blockState; diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 6f5ec31db0..b9d74510b 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -184,7 +184,13 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { } retval = ess.getServer().getUnsafe().modifyItemStack(retval, nbt); } - if (mat == Material.MOB_SPAWNER) { + Material MOB_SPAWNER; + try { + MOB_SPAWNER = Material.SPAWNER; + } catch (Exception e) { + MOB_SPAWNER = Material.valueOf("MOB_SPAWNER"); + } + if (mat == MOB_SPAWNER) { if (metaData == 0) metaData = EntityType.PIG.getTypeId(); try { retval = ess.getSpawnerProvider().setEntityType(retval, EntityType.fromId(metaData)); diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java index ecf44956e..1d3ab0f71 100644 --- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java +++ b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java @@ -9,6 +9,7 @@ import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.block.Block; import org.bukkit.block.PistonMoveReaction; +import org.bukkit.block.data.BlockData; import org.bukkit.conversations.Conversation; import org.bukkit.conversations.ConversationAbandonedEvent; import org.bukkit.entity.*; @@ -470,6 +471,11 @@ public class OfflinePlayer implements Player { public void sendBlockChange(Location lctn, Material mtrl, byte b) { } + @Override + public void sendBlockChange(Location loc, BlockData block) { + + } + @Override public void setLastDamageCause(EntityDamageEvent ede) { } @@ -639,6 +645,31 @@ public class OfflinePlayer implements Player { public void setPlayerListName(String name) { } + @Override + public String getPlayerListHeader() { + return null; + } + + @Override + public String getPlayerListFooter() { + return null; + } + + @Override + public void setPlayerListHeader(String header) { + + } + + @Override + public void setPlayerListFooter(String footer) { + + } + + @Override + public void setPlayerListHeaderFooter(String header, String footer) { + + } + @Override public String getPlayerListName() { return name; @@ -1191,6 +1222,16 @@ public class OfflinePlayer implements Player { public void setGliding(boolean b) { } + @Override + public boolean isSwimming() { + return false; + } + + @Override + public void setSwimming(boolean swimming) { + + } + @Override public void setAI(boolean b) { } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java index 33704ece1..1e24f752e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java @@ -28,7 +28,13 @@ public class Commandspawner extends EssentialsCommand { } final Location target = LocationUtil.getTarget(user.getBase()); - if (target == null || target.getBlock().getType() != Material.MOB_SPAWNER) { + Material MOB_SPAWNER; + try { + MOB_SPAWNER = Material.SPAWNER; + } catch (Exception e) { + MOB_SPAWNER = Material.valueOf("MOB_SPAWNER"); + } + if (target == null || target.getBlock().getType() != MOB_SPAWNER) { throw new Exception(tl("mobSpawnTarget")); } diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java index d6810d023..1f2b0409d 100644 --- a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java +++ b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java @@ -154,6 +154,11 @@ public class FakeWorld implements World { throw new UnsupportedOperationException("Not supported yet."); } + @Override + public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) { + return false; + } + @Override public LightningStrike strikeLightning(Location lctn) { throw new UnsupportedOperationException("Not supported yet."); @@ -703,4 +708,4 @@ public class FakeWorld implements World { public List getNearbyEntities(Location loc, double x, double y, double z) { throw new UnsupportedOperationException("Not supported yet."); } -} \ No newline at end of file +} diff --git a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java index 959d5e3d6..f32aefd73 100644 --- a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java +++ b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java @@ -1,9 +1,11 @@ package com.earth2me.essentials.storage; +import com.earth2me.essentials.Enchantments; import com.earth2me.essentials.utils.NumberUtil; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; @@ -94,13 +96,7 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { if (split3.length < 1) { continue; } - Enchantment enchantment; - if (NumberUtil.isInt(split3[0])) { - final int enchantId = Integer.parseInt(split3[0]); - enchantment = Enchantment.getById(enchantId); - } else { - enchantment = Enchantment.getByName(split3[0].toUpperCase(Locale.ENGLISH)); - } + Enchantment enchantment = Enchantments.getByName(split3[0]); if (enchantment == null) { continue; } @@ -128,13 +124,7 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { if (split.length == 0) { return null; } - Enchantment enchant; - if (NumberUtil.isInt(split[0])) { - final int typeId = Integer.parseInt(split[0]); - enchant = Enchantment.getById(typeId); - } else { - enchant = Enchantment.getByName(split[0].toUpperCase(Locale.ENGLISH)); - } + Enchantment enchant = Enchantments.getByName(split[0]); if (enchant == null) { return null; } diff --git a/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java index 6fdfbe05d..ec616f043 100644 --- a/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java @@ -30,7 +30,10 @@ public class LocationUtil { TRANSPARENT_MATERIALS.addAll(HOLLOW_MATERIALS); TRANSPARENT_MATERIALS.add(Material.WATER); - TRANSPARENT_MATERIALS.add(Material.FLOWING_WATER); + try { + TRANSPARENT_MATERIALS.add(Material.valueOf("FLOWING_WATER")); + } catch (Exception ignored) { // 1.13 WATER uses Levelled + } } public static final int RADIUS = 3; @@ -109,7 +112,6 @@ public class LocationUtil { switch (below.getType()) { case LAVA: - case FLOWING_LAVA: case FIRE: case BLACK_BED: case BLUE_BED: @@ -129,8 +131,19 @@ public class LocationUtil { case YELLOW_BED: return true; } - - if (world.getBlockAt(x, y, z).getType() == Material.PORTAL) { + try { + if (below.getType() == Material.valueOf("FLOWING_LAVA")) { + return true; + } + } catch (Exception ignored) { // 1.13 LAVA uses Levelled + } + Material PORTAL; + try { + PORTAL = Material.NETHER_PORTAL; + } catch (Exception ignored) { + PORTAL = Material.valueOf("PORTAL"); + } + if (world.getBlockAt(x, y, z).getType() == PORTAL) { return true; } diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 03c1374a7..0117f30a9 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -7,6 +7,7 @@ website: http://tiny.cc/EssentialsCommands description: Provides an essential, core set of commands for Bukkit. softdepend: [Vault] authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Iaccidentally, drtshock, vemacs, SupaHam, md678685] +api-version: 1.13 commands: afk: description: Marks you as away-from-keyboard. diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java index 20b0d0fad..75078fa3c 100644 --- a/Essentials/test/com/earth2me/essentials/FakeServer.java +++ b/Essentials/test/com/earth2me/essentials/FakeServer.java @@ -45,6 +45,7 @@ import java.io.UnsupportedEncodingException; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.Future; +import java.util.function.Consumer; import java.util.logging.Logger; @@ -207,11 +208,6 @@ public class FakeServer implements Server { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public void cancelAllTasks() { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public boolean isCurrentlyRunning(int i) { throw new UnsupportedOperationException("Not supported yet."); @@ -971,8 +967,23 @@ public class FakeServer implements Server { } @Override - public BlockData createData(Material material) { - throw new UnsupportedOperationException("Not supported yet."); + public BlockData createBlockData(Material material) { + return null; + } + + @Override + public BlockData createBlockData(Material material, Consumer consumer) { + return null; + } + + @Override + public BlockData createBlockData(String data) throws IllegalArgumentException { + return null; + } + + @Override + public BlockData createBlockData(Material material, String data) throws IllegalArgumentException { + return null; } @Override diff --git a/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java b/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java index 9f74d9f4f..702fbe7d5 100644 --- a/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java +++ b/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java @@ -31,7 +31,13 @@ public abstract class SpawnerProvider implements Provider { public boolean tryProvider() { try { EntityType type = EntityType.CREEPER; - ItemStack is = setEntityType(new ItemStack(Material.MOB_SPAWNER), type); + Material MOB_SPAWNER; + try { + MOB_SPAWNER = Material.SPAWNER; + } catch (Exception e) { + MOB_SPAWNER = Material.valueOf("MOB_SPAWNER"); + } + ItemStack is = setEntityType(new ItemStack(MOB_SPAWNER), type); EntityType readType = getEntityType(is); return type == readType; } catch (Throwable t) { diff --git a/pom.xml b/pom.xml index 6c81a14b1..c7693b8f3 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ org.bukkit bukkit - 18w02a-R0.1-SNAPSHOT + 1.13-R0.1-SNAPSHOT provided From bef440760a168bfcc00390db9309bea415284bf0 Mon Sep 17 00:00:00 2001 From: md678685 Date: Sun, 5 Aug 2018 20:45:04 +0100 Subject: [PATCH 073/333] Remove deprecated economy libs and support None of these economy plugins are supported any more, and removing these allows EssentialsX to be used as a dependency without locally `mvn install`ing the plugin. --- Essentials/pom.xml | 28 -- .../essentials/register/payment/Methods.java | 5 - .../register/payment/methods/BOSE7.java | 271 --------------- .../register/payment/methods/MCUR.java | 163 --------- .../register/payment/methods/iCo5.java | 312 ------------------ .../register/payment/methods/iCo6.java | 201 ----------- lib/BOSEconomy.jar | Bin 279896 -> 0 bytes lib/MultiCurrency.jar | Bin 13232 -> 0 bytes lib/iCo5.jar | Bin 174297 -> 0 bytes lib/iCo6.jar | Bin 135693 -> 0 bytes 10 files changed, 980 deletions(-) delete mode 100644 Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java delete mode 100644 Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java delete mode 100644 Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java delete mode 100644 Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java delete mode 100644 lib/BOSEconomy.jar delete mode 100644 lib/MultiCurrency.jar delete mode 100644 lib/iCo5.jar delete mode 100644 lib/iCo6.jar diff --git a/Essentials/pom.xml b/Essentials/pom.xml index ae5d8849e..cfdfa07c9 100644 --- a/Essentials/pom.xml +++ b/Essentials/pom.xml @@ -45,34 +45,6 @@ - - BOSEconomy - BOSEconomy - v0.7.8.1 - system - ${project.basedir}/../lib/BOSEconomy.jar - - - iConomy - iConomy5 - 5 - system - ${project.basedir}/../lib/iCo5.jar - - - iConomy - iConomy6 - 6 - system - ${project.basedir}/../lib/iCo6.jar - - - MultiCurrency - MultiCurrency - 2.2 - system - ${project.basedir}/../lib/MultiCurrency.jar - net.milkbowl.vault Vault diff --git a/Essentials/src/com/earth2me/essentials/register/payment/Methods.java b/Essentials/src/com/earth2me/essentials/register/payment/Methods.java index 3cfa6b630..9316da190 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/Methods.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/Methods.java @@ -42,11 +42,6 @@ public class Methods { * Implement all methods along with their respective name & class. */ private static void _init() { - addMethod("iConomy", new com.earth2me.essentials.register.payment.methods.iCo6()); - addMethod("iConomy", new com.earth2me.essentials.register.payment.methods.iCo5()); - addMethod("BOSEconomy", new com.earth2me.essentials.register.payment.methods.BOSE7()); - addMethod("Currency", new com.earth2me.essentials.register.payment.methods.MCUR()); - Dependencies.add("MultiCurrency"); addMethod("Vault", new com.earth2me.essentials.register.payment.methods.VaultEco()); } diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java deleted file mode 100644 index 5616d2d95..000000000 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java +++ /dev/null @@ -1,271 +0,0 @@ -package com.earth2me.essentials.register.payment.methods; - -import com.earth2me.essentials.register.payment.Method; -import cosine.boseconomy.BOSEconomy; -import org.bukkit.plugin.Plugin; - - -/** - * BOSEconomy 7 Implementation of Method - * - * @author Acrobot - * @author Nijikokun (@nijikokun) @copyright (c) 2011 @license AOL license - * - */ -public class BOSE7 implements Method { - private BOSEconomy BOSEconomy; - - @Override - public BOSEconomy getPlugin() { - return this.BOSEconomy; - } - - @Override - public String getName() { - return "BOSEconomy"; - } - - @Override - public String getLongName() { - return getName(); - } - - @Override - public String getVersion() { - return "0.7.0"; - } - - @Override - public int fractionalDigits() { - return this.BOSEconomy.getFractionalDigits(); - } - - @Override - public String format(double amount) { - String currency = this.BOSEconomy.getMoneyNamePlural(); - - if (amount == 1) { - currency = this.BOSEconomy.getMoneyName(); - } - - return amount + " " + currency; - } - - @Override - public boolean hasBanks() { - return true; - } - - @Override - public boolean hasBank(String bank) { - return this.BOSEconomy.bankExists(bank); - } - - @Override - public boolean hasAccount(String name) { - return this.BOSEconomy.playerRegistered(name, false); - } - - @Override - public boolean hasBankAccount(String bank, String name) { - return this.BOSEconomy.isBankOwner(bank, name) || this.BOSEconomy.isBankMember(bank, name); - } - - @Override - public boolean createAccount(String name) { - if (hasAccount(name)) { - return false; - } - - this.BOSEconomy.registerPlayer(name); - return true; - } - - @Override - public boolean createAccount(String name, Double balance) { - if (hasAccount(name)) { - return false; - } - - this.BOSEconomy.registerPlayer(name); - this.BOSEconomy.setPlayerMoney(name, balance, false); - return true; - } - - @Override - public MethodAccount getAccount(String name) { - if (!hasAccount(name)) { - return null; - } - - return new BOSEAccount(name, this.BOSEconomy); - } - - @Override - public MethodBankAccount getBankAccount(String bank, String name) { - if (!hasBankAccount(bank, name)) { - return null; - } - - return new BOSEBankAccount(bank, BOSEconomy); - } - - @Override - public boolean isCompatible(Plugin plugin) { - return plugin.getDescription().getName().equalsIgnoreCase("boseconomy") && plugin instanceof BOSEconomy && !plugin.getDescription().getVersion().equals("0.6.2"); - } - - @Override - public void setPlugin(Plugin plugin) { - BOSEconomy = (BOSEconomy) plugin; - } - - - public class BOSEAccount implements MethodAccount { - private final String name; - private final BOSEconomy BOSEconomy; - - public BOSEAccount(String name, BOSEconomy bOSEconomy) { - this.name = name; - this.BOSEconomy = bOSEconomy; - } - - @Override - public double balance() { - return this.BOSEconomy.getPlayerMoneyDouble(this.name); - } - - @Override - public boolean set(double amount) { - return this.BOSEconomy.setPlayerMoney(this.name, amount, false); - } - - @Override - public boolean add(double amount) { - return this.BOSEconomy.addPlayerMoney(this.name, amount, false); - } - - @Override - public boolean subtract(double amount) { - double balance = this.balance(); - return this.BOSEconomy.setPlayerMoney(this.name, (balance - amount), false); - } - - @Override - public boolean multiply(double amount) { - double balance = this.balance(); - return this.BOSEconomy.setPlayerMoney(this.name, (balance * amount), false); - } - - @Override - public boolean divide(double amount) { - double balance = this.balance(); - return this.BOSEconomy.setPlayerMoney(this.name, (balance / amount), false); - } - - @Override - public boolean hasEnough(double amount) { - return (this.balance() >= amount); - } - - @Override - public boolean hasOver(double amount) { - return (this.balance() > amount); - } - - @Override - public boolean hasUnder(double amount) { - return (this.balance() < amount); - } - - @Override - public boolean isNegative() { - return (this.balance() < 0); - } - - @Override - public boolean remove() { - return false; - } - } - - - public class BOSEBankAccount implements MethodBankAccount { - private final String bank; - private final BOSEconomy BOSEconomy; - - public BOSEBankAccount(String bank, BOSEconomy bOSEconomy) { - this.bank = bank; - this.BOSEconomy = bOSEconomy; - } - - @Override - public String getBankName() { - return this.bank; - } - - @Override - public int getBankId() { - return -1; - } - - @Override - public double balance() { - return this.BOSEconomy.getBankMoneyDouble(bank); - } - - @Override - public boolean set(double amount) { - return this.BOSEconomy.setBankMoney(bank, amount, true); - } - - @Override - public boolean add(double amount) { - double balance = this.balance(); - return this.BOSEconomy.setBankMoney(bank, (balance + amount), false); - } - - @Override - public boolean subtract(double amount) { - double balance = this.balance(); - return this.BOSEconomy.setBankMoney(bank, (balance - amount), false); - } - - @Override - public boolean multiply(double amount) { - double balance = this.balance(); - return this.BOSEconomy.setBankMoney(bank, (balance * amount), false); - } - - @Override - public boolean divide(double amount) { - double balance = this.balance(); - return this.BOSEconomy.setBankMoney(bank, (balance / amount), false); - } - - @Override - public boolean hasEnough(double amount) { - return (this.balance() >= amount); - } - - @Override - public boolean hasOver(double amount) { - return (this.balance() > amount); - } - - @Override - public boolean hasUnder(double amount) { - return (this.balance() < amount); - } - - @Override - public boolean isNegative() { - return (this.balance() < 0); - } - - @Override - public boolean remove() { - return this.BOSEconomy.removeBank(bank); - } - } -} \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java deleted file mode 100644 index b470051b6..000000000 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java +++ /dev/null @@ -1,163 +0,0 @@ -package com.earth2me.essentials.register.payment.methods; - -import com.earth2me.essentials.register.payment.Method; -import me.ashtheking.currency.Currency; -import me.ashtheking.currency.CurrencyList; -import org.bukkit.plugin.Plugin; - - -/** - * MultiCurrency Method implementation. - * - * @author Acrobot @copyright (c) 2011 @license AOL license - */ -public class MCUR implements Method { - private Currency currencyList; - - @Override - public Object getPlugin() { - return this.currencyList; - } - - @Override - public String getName() { - return "MultiCurrency"; - } - - @Override - public String getLongName() { - return getName(); - } - - @Override - public String getVersion() { - return "0.09"; - } - - @Override - public int fractionalDigits() { - return -1; - } - - @Override - public String format(double amount) { - return amount + " Currency"; - } - - @Override - public boolean hasBanks() { - return false; - } - - @Override - public boolean hasBank(String bank) { - return false; - } - - @Override - public boolean hasAccount(String name) { - return true; - } - - @Override - public boolean hasBankAccount(String bank, String name) { - return false; - } - - @Override - public boolean createAccount(String name) { - CurrencyList.setValue((String) CurrencyList.maxCurrency(name)[0], name, 0); - return true; - } - - @Override - public boolean createAccount(String name, Double balance) { - CurrencyList.setValue((String) CurrencyList.maxCurrency(name)[0], name, balance); - return true; - } - - @Override - public MethodAccount getAccount(String name) { - return new MCurrencyAccount(name); - } - - @Override - public MethodBankAccount getBankAccount(String bank, String name) { - return null; - } - - @Override - public boolean isCompatible(Plugin plugin) { - return (plugin.getDescription().getName().equalsIgnoreCase("Currency") || plugin.getDescription().getName().equalsIgnoreCase("MultiCurrency")) && plugin instanceof Currency; - } - - @Override - public void setPlugin(Plugin plugin) { - currencyList = (Currency) plugin; - } - - - public class MCurrencyAccount implements MethodAccount { - private final String name; - - public MCurrencyAccount(String name) { - this.name = name; - } - - @Override - public double balance() { - return CurrencyList.getValue((String) CurrencyList.maxCurrency(name)[0], name); - } - - @Override - public boolean set(double amount) { - CurrencyList.setValue((String) CurrencyList.maxCurrency(name)[0], name, amount); - return true; - } - - @Override - public boolean add(double amount) { - return CurrencyList.add(name, amount); - } - - @Override - public boolean subtract(double amount) { - return CurrencyList.subtract(name, amount); - } - - @Override - public boolean multiply(double amount) { - return CurrencyList.multiply(name, amount); - } - - @Override - public boolean divide(double amount) { - return CurrencyList.divide(name, amount); - } - - @Override - public boolean hasEnough(double amount) { - return CurrencyList.hasEnough(name, amount); - } - - @Override - public boolean hasOver(double amount) { - return CurrencyList.hasOver(name, amount); - } - - @Override - public boolean hasUnder(double amount) { - return CurrencyList.hasUnder(name, amount); - } - - @Override - public boolean isNegative() { - return CurrencyList.isNegative(name); - } - - @Override - public boolean remove() { - return CurrencyList.remove(name); - } - } -} diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java deleted file mode 100644 index 8a5dd6428..000000000 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java +++ /dev/null @@ -1,312 +0,0 @@ -package com.earth2me.essentials.register.payment.methods; - -import com.earth2me.essentials.register.payment.Method; -import com.iConomy.iConomy; -import com.iConomy.system.Account; -import com.iConomy.system.BankAccount; -import com.iConomy.system.Holdings; -import com.iConomy.util.Constants; -import org.bukkit.plugin.Plugin; - - -/** - * iConomy 5 Implementation of Method - * - * @author Nijikokun (@nijikokun) @copyright (c) 2011 @license AOL license - * - */ -public class iCo5 implements Method { - private iConomy iConomy; - - @Override - public iConomy getPlugin() { - return this.iConomy; - } - - @Override - public String getName() { - return "iConomy"; - } - - @Override - public String getLongName() { - return getName(); - } - - @Override - public String getVersion() { - return "5"; - } - - @Override - public int fractionalDigits() { - return 2; - } - - @Override - public String format(double amount) { - return com.iConomy.iConomy.format(amount); - } - - @Override - public boolean hasBanks() { - return Constants.Banking; - } - - @Override - public boolean hasBank(String bank) { - return (hasBanks()) && com.iConomy.iConomy.Banks.exists(bank); - } - - @Override - public boolean hasAccount(String name) { - return com.iConomy.iConomy.hasAccount(name); - } - - @Override - public boolean hasBankAccount(String bank, String name) { - return (hasBank(bank)) && com.iConomy.iConomy.getBank(bank).hasAccount(name); - } - - @Override - public boolean createAccount(String name) { - if (hasAccount(name)) { - return false; - } - - return com.iConomy.iConomy.Accounts.create(name); - } - - @Override - public boolean createAccount(String name, Double balance) { - if (hasAccount(name)) { - return false; - } - - if (!com.iConomy.iConomy.Accounts.create(name)) { - return false; - } - - getAccount(name).set(balance); - - return true; - } - - @Override - public MethodAccount getAccount(String name) { - return new iCoAccount(com.iConomy.iConomy.getAccount(name)); - } - - @Override - public MethodBankAccount getBankAccount(String bank, String name) { - return new iCoBankAccount(com.iConomy.iConomy.getBank(bank).getAccount(name)); - } - - @Override - public boolean isCompatible(Plugin plugin) { - return plugin.getDescription().getName().equalsIgnoreCase("iconomy") && plugin.getClass().getName().equals("com.iConomy.iConomy") && plugin instanceof iConomy; - } - - @Override - public void setPlugin(Plugin plugin) { - iConomy = (iConomy) plugin; - } - - - public class iCoAccount implements MethodAccount { - private final Account account; - private final Holdings holdings; - - public iCoAccount(Account account) { - this.account = account; - this.holdings = account.getHoldings(); - } - - public Account getiCoAccount() { - return account; - } - - @Override - public double balance() { - return this.holdings.balance(); - } - - @Override - public boolean set(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.set(amount); - return true; - } - - @Override - public boolean add(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.add(amount); - return true; - } - - @Override - public boolean subtract(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.subtract(amount); - return true; - } - - @Override - public boolean multiply(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.multiply(amount); - return true; - } - - @Override - public boolean divide(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.divide(amount); - return true; - } - - @Override - public boolean hasEnough(double amount) { - return this.holdings.hasEnough(amount); - } - - @Override - public boolean hasOver(double amount) { - return this.holdings.hasOver(amount); - } - - @Override - public boolean hasUnder(double amount) { - return this.holdings.hasUnder(amount); - } - - @Override - public boolean isNegative() { - return this.holdings.isNegative(); - } - - @Override - public boolean remove() { - if (this.account == null) { - return false; - } - this.account.remove(); - return true; - } - } - - - public class iCoBankAccount implements MethodBankAccount { - private final BankAccount account; - private final Holdings holdings; - - public iCoBankAccount(BankAccount account) { - this.account = account; - this.holdings = account.getHoldings(); - } - - public BankAccount getiCoBankAccount() { - return account; - } - - @Override - public String getBankName() { - return this.account.getBankName(); - } - - @Override - public int getBankId() { - return this.account.getBankId(); - } - - @Override - public double balance() { - return this.holdings.balance(); - } - - @Override - public boolean set(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.set(amount); - return true; - } - - @Override - public boolean add(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.add(amount); - return true; - } - - @Override - public boolean subtract(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.subtract(amount); - return true; - } - - @Override - public boolean multiply(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.multiply(amount); - return true; - } - - @Override - public boolean divide(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.divide(amount); - return true; - } - - @Override - public boolean hasEnough(double amount) { - return this.holdings.hasEnough(amount); - } - - @Override - public boolean hasOver(double amount) { - return this.holdings.hasOver(amount); - } - - @Override - public boolean hasUnder(double amount) { - return this.holdings.hasUnder(amount); - } - - @Override - public boolean isNegative() { - return this.holdings.isNegative(); - } - - @Override - public boolean remove() { - if (this.account == null) { - return false; - } - this.account.remove(); - return true; - } - } -} \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java deleted file mode 100644 index 0c099a782..000000000 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.earth2me.essentials.register.payment.methods; - -import com.earth2me.essentials.register.payment.Method; -import com.iCo6.iConomy; -import com.iCo6.system.Account; -import com.iCo6.system.Accounts; -import com.iCo6.system.Holdings; -import org.bukkit.plugin.Plugin; - - -/** - * iConomy 6 Implementation of Method - * - * @author Nijikokun (@nijikokun) @copyright (c) 2011 @license AOL license - * - */ -public class iCo6 implements Method { - private iConomy iConomy; - - @Override - public iConomy getPlugin() { - return this.iConomy; - } - - @Override - public String getName() { - return "iConomy"; - } - - @Override - public String getLongName() { - return getName(); - } - - @Override - public String getVersion() { - return "6"; - } - - @Override - public int fractionalDigits() { - return 2; - } - - @Override - public String format(double amount) { - return com.iCo6.iConomy.format(amount); - } - - @Override - public boolean hasBanks() { - return false; - } - - @Override - public boolean hasBank(String bank) { - return false; - } - - @Override - public boolean hasAccount(String name) { - return (new Accounts()).exists(name); - } - - @Override - public boolean hasBankAccount(String bank, String name) { - return false; - } - - @Override - public boolean createAccount(String name) { - if (hasAccount(name)) { - return false; - } - - return (new Accounts()).create(name); - } - - @Override - public boolean createAccount(String name, Double balance) { - if (hasAccount(name)) { - return false; - } - - return (new Accounts()).create(name, balance); - } - - @Override - public MethodAccount getAccount(String name) { - return new iCoAccount((new Accounts()).get(name)); - } - - @Override - public MethodBankAccount getBankAccount(String bank, String name) { - return null; - } - - @Override - public boolean isCompatible(Plugin plugin) { - return plugin.getDescription().getName().equalsIgnoreCase("iconomy") && plugin.getClass().getName().equals("com.iCo6.iConomy") && plugin instanceof iConomy; - } - - @Override - public void setPlugin(Plugin plugin) { - iConomy = (iConomy) plugin; - } - - - public class iCoAccount implements MethodAccount { - private final Account account; - private final Holdings holdings; - - public iCoAccount(Account account) { - this.account = account; - this.holdings = account.getHoldings(); - } - - public Account getiCoAccount() { - return account; - } - - @Override - public double balance() { - return this.holdings.getBalance(); - } - - @Override - public boolean set(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.setBalance(amount); - return true; - } - - @Override - public boolean add(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.add(amount); - return true; - } - - @Override - public boolean subtract(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.subtract(amount); - return true; - } - - @Override - public boolean multiply(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.multiply(amount); - return true; - } - - @Override - public boolean divide(double amount) { - if (this.holdings == null) { - return false; - } - this.holdings.divide(amount); - return true; - } - - @Override - public boolean hasEnough(double amount) { - return this.holdings.hasEnough(amount); - } - - @Override - public boolean hasOver(double amount) { - return this.holdings.hasOver(amount); - } - - @Override - public boolean hasUnder(double amount) { - return this.holdings.hasUnder(amount); - } - - @Override - public boolean isNegative() { - return this.holdings.isNegative(); - } - - @Override - public boolean remove() { - if (this.account == null) { - return false; - } - this.account.remove(); - return true; - } - } -} diff --git a/lib/BOSEconomy.jar b/lib/BOSEconomy.jar deleted file mode 100644 index 14add8d948165f9d366d9c99217c052520a157d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279896 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 lzdxqI;LMS+mig=&hoPk-2lT_W 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

    -SJOD>m8a{_BqH@*R*(7UP2BDKJ^g&G#BtD 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 diff --git a/lib/MultiCurrency.jar b/lib/MultiCurrency.jar deleted file mode 100644 index 2140699e6e159d98d718f8251d48cc44933e9b2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13232 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 diff --git a/lib/iCo5.jar b/lib/iCo5.jar deleted file mode 100644 index 71a5d7141de3ec1ae157791ef83dac83d9e98d46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174297 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

    coW*!T{jy1 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 fI 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 From d3cd4e356dd331aeb4b205d49b2c0810a330f94b Mon Sep 17 00:00:00 2001 From: md678685 Date: Sun, 5 Aug 2018 20:51:39 +0100 Subject: [PATCH 074/333] Add missing OfflinePlayer 1.13 methods --- .../src/com/earth2me/essentials/OfflinePlayer.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java index 1d3ab0f71..f74f348d3 100644 --- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java +++ b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java @@ -234,6 +234,15 @@ public class OfflinePlayer implements Player { return server; } + @Override + public boolean isPersistent() { + return false; + } + + @Override + public void setPersistent(boolean persistent) { + } + public Vector getMomentum() { return getVelocity(); } @@ -1232,6 +1241,11 @@ public class OfflinePlayer implements Player { } + @Override + public boolean isRiptiding() { + return false; + } + @Override public void setAI(boolean b) { } From 504a7aef0f023f87798fc6833adb0731a219d6a0 Mon Sep 17 00:00:00 2001 From: md678685 Date: Mon, 6 Aug 2018 17:09:50 +0100 Subject: [PATCH 075/333] Add 1.13 mobs --- Essentials/src/com/earth2me/essentials/Mob.java | 8 ++++++++ .../src/com/earth2me/essentials/MobData.java | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/Mob.java b/Essentials/src/com/earth2me/essentials/Mob.java index f2519a7cf..548f62326 100644 --- a/Essentials/src/com/earth2me/essentials/Mob.java +++ b/Essentials/src/com/earth2me/essentials/Mob.java @@ -75,6 +75,14 @@ public enum Mob { HUSK("Husk", Enemies.ENEMY, "HUSK"), ILLUSIONER("Illusioner", Enemies.ENEMY, "ILLUSIONER"), PARROT("Parrot", Enemies.NEUTRAL, "PARROT"), + TURTLE("Turtle", Enemies.NEUTRAL, "TURTLE"), + PHANTOM("Phantom", Enemies.ENEMY, "PHANTOM"), + COD("Cod", Enemies.NEUTRAL, "COD"), + SALMON("Salmon", Enemies.NEUTRAL, "SALMON"), + PUFFERFISH("Pufferfish", Enemies.NEUTRAL, "PUFFERFISH"), + TROPICAL_FISH("Tropical Fish", Enemies.NEUTRAL, "TROPICAL_FISH"), + DROWNED("Drowned", Enemies.ENEMY, "DROWNED"), + DOLPHIN("Dolphin", Enemies.NEUTRAL, "DOLPHIN"), ; public static final Logger logger = Logger.getLogger("Essentials"); diff --git a/Essentials/src/com/earth2me/essentials/MobData.java b/Essentials/src/com/earth2me/essentials/MobData.java index 033123fa5..358c9749a 100644 --- a/Essentials/src/com/earth2me/essentials/MobData.java +++ b/Essentials/src/com/earth2me/essentials/MobData.java @@ -95,6 +95,18 @@ public enum MobData { BLUE_PARROT("blue", EntityType.PARROT, Parrot.Variant.BLUE, true), CYAN_PARROT("cyan", EntityType.PARROT, Parrot.Variant.CYAN, true), GRAY_PARROT("gray", EntityType.PARROT, Parrot.Variant.GRAY, true), + KOB_TROPICAL_FISH("kob", EntityType.TROPICAL_FISH, TropicalFish.Pattern.KOB, true), + SUNSTREAK_TROPICAL_FISH("sunstreak", EntityType.TROPICAL_FISH, TropicalFish.Pattern.SUNSTREAK, true), + SNOOPER_TROPICAL_FISH("snooper", EntityType.TROPICAL_FISH, TropicalFish.Pattern.SNOOPER, true), + DASHER_TROPICAL_FISH("dasher", EntityType.TROPICAL_FISH, TropicalFish.Pattern.DASHER, true), + BRINELY_TROPICAL_FISH("brinely", EntityType.TROPICAL_FISH, TropicalFish.Pattern.BRINELY, true), + SPOTTY_TROPICAL_FISH("spotty", EntityType.TROPICAL_FISH, TropicalFish.Pattern.SPOTTY, true), + FLOPPER_TROPICAL_FISH("flopper", EntityType.TROPICAL_FISH, TropicalFish.Pattern.FLOPPER, true), + STRIPEY_TROPICAL_FISH("stripey", EntityType.TROPICAL_FISH, TropicalFish.Pattern.STRIPEY, true), + GLITTER_TROPICAL_FISH("glitter", EntityType.TROPICAL_FISH, TropicalFish.Pattern.GLITTER, true), + BLOCKFISH_TROPICAL_FISH("blockfish", EntityType.TROPICAL_FISH, TropicalFish.Pattern.BLOCKFISH, true), + BETTY_TROPICAL_FISH("betty", EntityType.TROPICAL_FISH, TropicalFish.Pattern.BETTY, true), + CLAYFISH_TROPICAL_FISH("clayfish", EntityType.TROPICAL_FISH, TropicalFish.Pattern.CLAYFISH, true); ; @@ -252,6 +264,8 @@ public enum MobData { } } else if (this.value instanceof Parrot.Variant) { ((Parrot) spawned).setVariant((Parrot.Variant) this.value); + } else if (this.value instanceof TropicalFish.Pattern) { + ((TropicalFish) spawned).setPattern((TropicalFish.Pattern) this.value); } } } From b8a8232bc3db6ce8ca52cfd66e5eabe010a7e1c5 Mon Sep 17 00:00:00 2001 From: md678685 Date: Mon, 6 Aug 2018 18:19:30 +0100 Subject: [PATCH 076/333] Wrap all constructScalar calls with reflection Allows configs to function with both SnakeYAML 1.19 and 1.21. --- .../essentials/storage/BukkitConstructor.java | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java index 2d82f134e..894a5d3bb 100644 --- a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java +++ b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java @@ -9,6 +9,7 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.material.MaterialData; import org.bukkit.plugin.Plugin; +import org.yaml.snakeyaml.constructor.BaseConstructor; import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor; import org.yaml.snakeyaml.introspector.PropertyUtils; import org.yaml.snakeyaml.nodes.*; @@ -32,28 +33,28 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { setPropertyUtils(propertyUtils); } + private Method constructScalarMethod = null; + + protected String constructScalarRefl(ScalarNode scalarNode) { + try { + if (constructScalarMethod == null) { + constructScalarMethod = BaseConstructor.class.getDeclaredMethod("constructScalar", ScalarNode.class); + } + return (String) constructScalarMethod.invoke(this, scalarNode); + } catch (NoSuchMethodException + | SecurityException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + e.printStackTrace(); + } + + return null; + } + private class ConstructBukkitScalar extends ConstructScalar { - private Method constructScalarMethod = null; - - protected String constructScalarRefl(ScalarNode scalarNode) { - try { - if (constructScalarMethod == null) { - constructScalarMethod = ConstructScalar.class.getMethod("constructScalar", ScalarNode.class); - } - return (String) constructScalarMethod.invoke(this, scalarNode); - } catch (NoSuchMethodException - | SecurityException - | IllegalAccessException - | IllegalArgumentException - | InvocationTargetException e) { - e.printStackTrace(); - } - - return null; - } - @Override public Object construct(final Node node) { if (node.getType().equals(Material.class)) { @@ -191,6 +192,7 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { } private class ConstructBukkitMapping extends ConstructMapping { + @Override public Object construct(final Node node) { if (node.getType().equals(Location.class)) { @@ -203,25 +205,25 @@ public class BukkitConstructor extends CustomClassLoaderConstructor { return null; } for (NodeTuple nodeTuple : mnode.getValue()) { - final String key = (String) constructScalar((ScalarNode) nodeTuple.getKeyNode()); + final String key = constructScalarRefl((ScalarNode) nodeTuple.getKeyNode()); final ScalarNode snode = (ScalarNode) nodeTuple.getValueNode(); if (key.equalsIgnoreCase("world")) { - worldName = (String) constructScalar(snode); + worldName = constructScalarRefl(snode); } if (key.equalsIgnoreCase("x")) { - x = Double.parseDouble((String) constructScalar(snode)); + x = Double.parseDouble(constructScalarRefl(snode)); } if (key.equalsIgnoreCase("y")) { - y = Double.parseDouble((String) constructScalar(snode)); + y = Double.parseDouble(constructScalarRefl(snode)); } if (key.equalsIgnoreCase("z")) { - z = Double.parseDouble((String) constructScalar(snode)); + z = Double.parseDouble(constructScalarRefl(snode)); } if (key.equalsIgnoreCase("yaw")) { - yaw = Float.parseFloat((String) constructScalar(snode)); + yaw = Float.parseFloat(constructScalarRefl(snode)); } if (key.equalsIgnoreCase("pitch")) { - pitch = Float.parseFloat((String) constructScalar(snode)); + pitch = Float.parseFloat(constructScalarRefl(snode)); } } if (worldName == null || worldName.isEmpty()) { From 3e1857b96673573019b960a29d633228860ba0a1 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 8 Aug 2018 15:42:29 +0100 Subject: [PATCH 077/333] Add module for FlattenedProvider --- Essentials/pom.xml | 6 ++++++ nms/FlattenedProvider/pom.xml | 36 +++++++++++++++++++++++++++++++++++ pom.xml | 1 + 3 files changed, 43 insertions(+) create mode 100644 nms/FlattenedProvider/pom.xml diff --git a/Essentials/pom.xml b/Essentials/pom.xml index 7f35d18c6..8483f9af2 100644 --- a/Essentials/pom.xml +++ b/Essentials/pom.xml @@ -106,6 +106,12 @@ + + net.ess3 + FlattenedProvider + 2.15.0 + compile + diff --git a/nms/FlattenedProvider/pom.xml b/nms/FlattenedProvider/pom.xml new file mode 100644 index 000000000..ce63a9be3 --- /dev/null +++ b/nms/FlattenedProvider/pom.xml @@ -0,0 +1,36 @@ + + + + EssentialsXParent + net.ess3 + 2.15.0 + ../../pom.xml + + 4.0.0 + + FlattenedProvider + + + + project.local + local repo + file:${project.basedir}/lib + + + + + + org.bukkit + craftbukkit + 1.13-R0.1-SNAPSHOT + provided + + + net.ess3 + NMSProvider + 2.15.0 + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index f8a0da05d..d8faeff12 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,7 @@ nms/1_8_R2Provider nms/LegacyProvider nms/ReflectionProvider + nms/FlattenedProvider From c5376d3088a7332a2df473c472ada939b1cb6a4b Mon Sep 17 00:00:00 2001 From: md678685 Date: Fri, 10 Aug 2018 22:07:02 +0100 Subject: [PATCH 078/333] Implement ItemDbProviders, pt 1 --- .../com/earth2me/essentials/Essentials.java | 10 + .../nms/flattened/FlatItemDbProvider.java | 75 +++++ nms/IdProvider/pom.xml | 32 +++ .../ess3/nms/ids/LegacyItemDbProvider.java | 261 ++++++++++++++++++ .../src/net/ess3/nms/ItemDbProvider.java | 240 ++++++++++++++++ pom.xml | 1 + 6 files changed, 619 insertions(+) create mode 100644 nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatItemDbProvider.java create mode 100644 nms/IdProvider/pom.xml create mode 100644 nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java create mode 100644 nms/NMSProvider/src/net/ess3/nms/ItemDbProvider.java diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index d49761f49..09c90abc9 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -34,9 +34,12 @@ import com.google.common.collect.Iterables; import net.ess3.api.*; import net.ess3.api.IEssentials; import net.ess3.api.ISettings; +import net.ess3.nms.ItemDbProvider; import net.ess3.nms.PotionMetaProvider; import net.ess3.nms.SpawnEggProvider; import net.ess3.nms.SpawnerProvider; +import net.ess3.nms.flattened.FlatItemDbProvider; +import net.ess3.nms.legacy.LegacyItemDbProvider; import net.ess3.nms.legacy.LegacyPotionMetaProvider; import net.ess3.nms.refl.ReflSpawnEggProvider; import net.ess3.nms.updatedmeta.BasePotionDataProvider; @@ -103,6 +106,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient EssentialsTimer timer; private final transient Set vanishedPlayers = new LinkedHashSet<>(); private transient Method oldGetOnlinePlayers; + private transient ItemDbProvider itemDbProvider; private transient SpawnerProvider spawnerProvider; private transient SpawnEggProvider spawnEggProvider; private transient PotionMetaProvider potionMetaProvider; @@ -211,6 +215,12 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { execTimer.mark("Init(Worth/ItemDB)"); jails = new Jails(this); confList.add(jails); + + itemDbProvider = new ProviderFactory<>(getLogger(), + Arrays.asList( + FlatItemDbProvider.class, + LegacyItemDbProvider.class + ), "item database").getProvider(); spawnerProvider = new ProviderFactory<>(getLogger(), Arrays.asList( BlockMetaSpawnerProvider.class, diff --git a/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatItemDbProvider.java b/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatItemDbProvider.java new file mode 100644 index 000000000..77f396edd --- /dev/null +++ b/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatItemDbProvider.java @@ -0,0 +1,75 @@ +package net.ess3.nms.flattened; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonParser; +import net.ess3.nms.ItemDbProvider; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionType; + +import java.util.List; +import java.util.stream.Collectors; + +public class FlatItemDbProvider extends ItemDbProvider { + private static Gson gson = new Gson(); + + + @Override + public Material resolve(String name) { + return null; + } + + @Override + public boolean supportsLegacyIds() { + return false; + } + + @Override + public int getLegacyId(Material material) { + return -1; + } + + @Override + public Material getFromLegacyId(int id) { + return null; + } + + @Override + public String getPrimaryName(ItemStack item) { + return null; + } + + @Override + public List getNames(ItemStack item) { + return null; + } + + @Override + public void rebuild(List lines) { + String json = lines.stream().collect(Collectors.joining("\n")); + JsonArray jsonArray = (new JsonParser()).parse(json).getAsJsonArray(); + jsonArray.forEach(element -> { + if (element.isJsonObject()) { + } + }); + } + + @Override + public boolean tryProvider() { + // Build the database initially so that we can actually test the provider + this.rebuild(this.loadResource("/items.json")); + return super.tryProvider(); + } + + @Override + public String getHumanName() { + return "Post-1.13 item database provider"; + } + + private class MaterialData { + private Material material; + private PotionType potionEnum; + private String potionModifier; + } +} diff --git a/nms/IdProvider/pom.xml b/nms/IdProvider/pom.xml new file mode 100644 index 000000000..3756f2e7f --- /dev/null +++ b/nms/IdProvider/pom.xml @@ -0,0 +1,32 @@ + + + + EssentialsXParent + net.ess3 + 2.15.0 + ../../pom.xml + + 4.0.0 + + IdProvider + + + + net.ess3 + NMSProvider + 2.15.0 + + + net.ess3 + ReflectionProvider + 2.15.0 + + + org.bukkit + bukkit + 1.12.2-R0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java b/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java new file mode 100644 index 000000000..4a47ccbc1 --- /dev/null +++ b/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java @@ -0,0 +1,261 @@ +package net.ess3.nms.ids; + +import net.ess3.nms.ItemDbProvider; +import net.ess3.nms.PotionMetaProvider; +import net.ess3.nms.SpawnEggProvider; +import net.ess3.nms.refl.ReflUtil; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class LegacyItemDbProvider extends ItemDbProvider { + private final transient Map items = new HashMap<>(); + private final transient Map> names = new HashMap<>(); + private final transient Map primaryNames = new HashMap<>(); + private final transient Map legacyIds = new HashMap<>(); + private final transient Map durabilities = new HashMap<>(); + private final transient Map nbtData = new HashMap<>(); + + private final transient Pattern splitPattern = Pattern.compile("((.*)[:+',;.](\\d+))"); + private final transient Pattern csvSplitPattern = Pattern.compile("(\"([^\"]*)\"|[^,]*)(,|$)"); + + @Override + public Material resolve(String name) { + return null; + } + + @Override + public ItemStack getStack(String name) throws Exception { + int itemid = 0; + String itemname; + short metaData = 0; + + Matcher parts = splitPattern.matcher(name); + if (parts.matches()) { + itemname = parts.group(2); + metaData = Short.parseShort(parts.group(3)); + } else { + itemname = name; + } + + if (isInt(itemname)) { + itemid = Integer.parseInt(itemname); + } else if (isInt(name)) { + itemid = Integer.parseInt(name); + } else { + itemname = itemname.toLowerCase(Locale.ENGLISH); + } + + if (itemid < 1) { + if (items.containsKey(itemname)) { + itemid = items.get(itemname); + if (durabilities.containsKey(itemname) && metaData == 0) { + metaData = durabilities.get(itemname); + } + } + } + + if (itemid < 1) { + throw new Exception("Unknown item name " + itemname); + } + + ItemData data = legacyIds.get(itemid); + if (data == null) { + throw new Exception("Unknown item ID " + itemid); + } + + Material mat = data.getMaterial(); + ItemStack retval = new ItemStack(mat); + if (nbtData.containsKey(itemname)) { + String nbt = nbtData.get(itemname); + if (nbt.startsWith("*")) { + nbt = nbtData.get(nbt.substring(1)); + } + retval = Bukkit.getServer().getUnsafe().modifyItemStack(retval, nbt); + } + + + Material MOB_SPAWNER; + try { + MOB_SPAWNER = Material.valueOf("SPAWNER"); + } catch (Exception e) { + MOB_SPAWNER = Material.valueOf("MOB_SPAWNER"); + } + if (mat == MOB_SPAWNER) { + if (metaData == 0) metaData = EntityType.PIG.getTypeId(); + try { + retval = getSpawnerProvider().setEntityType(retval, EntityType.fromId(metaData)); + } catch (IllegalArgumentException e) { + throw new Exception("Can't spawn entity ID " + metaData + " from mob spawners."); + } + } else if (mat == Material.MONSTER_EGG) { + EntityType type; + try { + type = EntityType.fromId(metaData); + } catch (IllegalArgumentException e) { + throw new Exception("Can't spawn entity ID " + metaData + " from spawn eggs."); + } + retval = getSpawnEggProvider().createEggItem(type); + } else if (mat.name().endsWith("POTION") + && ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_11_R1)) { // Only apply this to pre-1.11 as items.csv might only work in 1.11 + retval = getPotionMetaProvider().createPotionItem(mat, metaData); + } else { + retval.setDurability(metaData); + } + retval.setAmount(mat.getMaxStackSize()); + return retval; + } + + @Override + public boolean supportsLegacyIds() { + return true; + } + + @Override + public int getLegacyId(Material material) throws Exception { + for (Map.Entry entry : items.entrySet()) { + if (material.name().toLowerCase(Locale.ENGLISH).equalsIgnoreCase(entry.getKey())) { + return entry.getValue(); + } + } + + throw new Exception("Item ID missing for material " + material.name()); + } + + @Override + public Material getFromLegacyId(int id) { + ItemData data = this.legacyIds.get(id); + if (data == null) { + return null; + } + + return data.getMaterial(); + } + + @Override + public String getPrimaryName(ItemStack item) { + return null; + } + + @Override + public List getNames(ItemStack item) { + return null; + } + + @Override + public void rebuild(List lines) { + durabilities.clear(); + items.clear(); + names.clear(); + primaryNames.clear(); + + lines.stream() + .filter(line -> line.length() > 0 && !(line.charAt(0) == '#')) + .map(this::parseLine) + .filter(itemData -> itemData != null) + .forEach(this::addItem); + + for (List nameList : names.values()) { + nameList.sort(LengthCompare.INSTANCE); + } + } + + private ItemData parseLine(String line) { + String itemName = null; + int numeric = -1; + short data = 0; + String nbt = null; + + int col = 0; + Matcher matcher = csvSplitPattern.matcher(line); + while (matcher.find()) { + String match = matcher.group(1); + if (StringUtils.stripToNull(match) == null) { + continue; + } + match = StringUtils.strip(match.trim(), "\""); + switch (col) { + case 0: + itemName = match.toLowerCase(Locale.ENGLISH); + break; + case 1: + numeric = Integer.parseInt(match); + break; + case 2: + data = Short.parseShort(match); + break; + case 3: + nbt = StringUtils.stripToNull(match); + break; + default: + continue; + } + col++; + } + // Invalid row + if (itemName == null || numeric < 0) { + return null; + } + + Material material = Material.matchMaterial(itemName); + if (material == null) { + return null; + } + + return new ItemData(itemName, material, numeric, data, nbt); + } + + private void addItem(ItemData itemData) { + final String name = itemData.getItemName(); + final int numeric = itemData.getItemNo(); + final short data = itemData.getItemData(); + final String nbt = itemData.getNbt(); + + durabilities.put(name, data); + items.put(name, numeric); + + if (nbt != null) { + nbtData.put(itemData.getItemName(), nbt); + } + + if (names.containsKey(itemData)) { + List nameList = names.get(itemData); + nameList.add(name); + } else { + List nameList = new ArrayList<>(); + nameList.add(name); + names.put(itemData, nameList); + primaryNames.put(itemData, name); + } + + legacyIds.put(numeric, itemData); + } + + @Override + public boolean tryProvider() { + // Build the database initially so that we can actually test the provider + this.rebuild(this.loadResource("/items.csv")); + return super.tryProvider(); + } + + @Override + public String getHumanName() { + return "Pre-1.13 item database provider"; + } + + private boolean isInt(String integer) { + try { + Integer.parseInt(integer); + return true; + } catch (NumberFormatException e) { + return false; + } + } +} diff --git a/nms/NMSProvider/src/net/ess3/nms/ItemDbProvider.java b/nms/NMSProvider/src/net/ess3/nms/ItemDbProvider.java new file mode 100644 index 000000000..9f643be02 --- /dev/null +++ b/nms/NMSProvider/src/net/ess3/nms/ItemDbProvider.java @@ -0,0 +1,240 @@ +package net.ess3.nms; + +import net.ess3.providers.Provider; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionType; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; +import java.util.stream.Collectors; + +public abstract class ItemDbProvider implements Provider { + + private SpawnerProvider spawnerProvider; + private SpawnEggProvider spawnEggProvider; + private PotionMetaProvider potionMetaProvider; + + /** + * Resolves a material name to its corresponding Material + * + * @param name The material name to look up + * @return The corresponding Material for the given name + */ + public abstract Material resolve(String name); + + /** + * Whether the provider supports legacy ID values or not. + * + * @return True if the provider supports legacy IDs, otherwise false + */ + public abstract boolean supportsLegacyIds(); + + /** + * Get the legacy ID for the material. + * + * @param material The material to look up + * @return The ID corresponding to the material, or null if not supported + */ + public abstract int getLegacyId(Material material) throws Exception; + + /** + * Get the material for the legacy ID. + * + * @param id The ID to look up + * @return The material corresponding to the ID, or -1 if not supported + */ + public abstract Material getFromLegacyId(int id); + + /** + * Get the primary name for the item in the given stack. + * + * @param item The ItemStack to check + * @return The primary name for the item + */ + public abstract String getPrimaryName(ItemStack item); + + /** + * Get all names for the item in the given stack. + * + * @param item The ItemStack to check + * @return The names for the item + */ + public abstract List getNames(ItemStack item); + + /** + * Rebuild the item database, using the given lines of a file. + * + * @param lines The lines of the file from which the database should be built. + */ + public abstract void rebuild(List lines); + + /** + * Creates a stack of a given item by its name. + * + * @param name The material name to look up + * @return An ItemStack of size 1 of the given item + */ + public ItemStack getStack(String name) throws Exception { + return new ItemStack(resolve(name)); + } + + /** + * Creates a stack with the given amount of a given item by its name. + * + * @param name The material name to look up + * @param amount The amount of items in the returned ItemStack + * @return An ItemStack with the given amount of the given item + */ + public ItemStack getStack(String name, int amount) throws Exception { + ItemStack is = getStack(name); + is.setAmount(amount); + return is; + } + + /** + * Read a resource from the jar. + * Used to build the database before data from a ManagedFile is available. + * + * @param name The name of the resource to load. + * @return The lines of the resource. + */ + protected List loadResource(final String name) { + try (InputStreamReader isr = new InputStreamReader(ItemDbProvider.class.getResourceAsStream(name))) { + BufferedReader br = new BufferedReader(isr); + return br.lines().collect(Collectors.toList()); + } catch (IOException e) { + return null; + } + } + + @Override + public boolean tryProvider() { + try { + getStack("cstone"); + getStack("diorite"); + getStack("steelbar", 5); + getStack("aoepot"); + getStack("skeletonegg", 12); + return true; + } catch (Exception e) { + return false; + } + } + + protected SpawnerProvider getSpawnerProvider() { + return spawnerProvider; + } + + public void setSpawnerProvider(SpawnerProvider spawnerProvider) { + this.spawnerProvider = spawnerProvider; + } + + protected SpawnEggProvider getSpawnEggProvider() { + return spawnEggProvider; + } + + public void setSpawnEggProvider(SpawnEggProvider spawnEggProvider) { + this.spawnEggProvider = spawnEggProvider; + } + + protected PotionMetaProvider getPotionMetaProvider() { + return potionMetaProvider; + } + + public void setPotionMetaProvider(PotionMetaProvider potionMetaProvider) { + this.potionMetaProvider = potionMetaProvider; + } + + public static class ItemData { + final private String itemName; + final private Material material; + private int legacyId; + private short itemData; + final private String nbt; + private PotionData potionData; + + public ItemData(String itemName, Material material, String nbt) { + this.itemName = itemName; + this.material = material; + this.nbt = nbt; + } + + public ItemData(String itemName, Material material, String nbt, PotionData potionData) { + this.itemName = itemName; + this.material = material; + this.nbt = nbt; + this.potionData = potionData; + } + + @Deprecated + public ItemData(String itemName, Material material, final int legacyId, final short itemData, String nbt) { + this.itemName = itemName; + this.material = material; + this.legacyId = legacyId; + this.itemData = itemData; + this.nbt = nbt; + } + + public String getItemName() { + return itemName; + } + + public Material getMaterial() { + return material; + } + + @Deprecated + public int getItemNo() { + return legacyId; + } + + public short getItemData() { + return itemData; + } + + public String getNbt() { + return nbt; + } + + @Override + public int hashCode() { + return (31 * material.hashCode()) ^ itemData; + } + + @Override + public boolean equals(Object o) { + if (o == null) { + return false; + } + if (!(o instanceof ItemData)) { + return false; + } + ItemData pairo = (ItemData) o; + return this.material == pairo.getMaterial() && this.itemData == pairo.getItemData() && this.nbt.equals(pairo.getNbt()); + } + } + + public static class PotionData { + private PotionType bukkitType; + private String vanillaType; + private boolean isStrong; + private boolean isLong; + } + + protected static class LengthCompare implements java.util.Comparator { + + public static final LengthCompare INSTANCE = new LengthCompare(); + + public LengthCompare() { + super(); + } + + @Override + public int compare(String s1, String s2) { + return s1.length() - s2.length(); + } + } +} diff --git a/pom.xml b/pom.xml index d8faeff12..c4374ac32 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,7 @@ nms/1_8_R2Provider nms/LegacyProvider nms/ReflectionProvider + nms/IdProvider nms/FlattenedProvider From a1e98f898b19daa87d57f9a1af90ca9c563d4fb0 Mon Sep 17 00:00:00 2001 From: Steve Green Date: Tue, 14 Aug 2018 08:35:33 -0400 Subject: [PATCH 079/333] Add missing methods for OfflinePlayer, FakeWorld, and FakeServer. --- .../com/earth2me/essentials/OfflinePlayer.java | 4 ++++ .../essentials/craftbukkit/FakeWorld.java | 15 +++++++++++++++ .../test/com/earth2me/essentials/FakeServer.java | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java index f74f348d3..9730fa667 100644 --- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java +++ b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java @@ -1529,4 +1529,8 @@ public class OfflinePlayer implements Player { public PistonMoveReaction getPistonMoveReaction() { return null; } + + @Override + public void updateCommands() { + } } diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java index 1f2b0409d..1613fcba7 100644 --- a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java +++ b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java @@ -708,4 +708,19 @@ public class FakeWorld implements World { public List getNearbyEntities(Location loc, double x, double y, double z) { throw new UnsupportedOperationException("Not supported yet."); } + + @Override + public T getGameRuleDefault(GameRule arg0) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public T getGameRuleValue(GameRule arg0) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean setGameRule(GameRule arg0, T arg1) { + throw new UnsupportedOperationException("Not supported yet."); + } } diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java index 75078fa3c..339335f4a 100644 --- a/Essentials/test/com/earth2me/essentials/FakeServer.java +++ b/Essentials/test/com/earth2me/essentials/FakeServer.java @@ -25,6 +25,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.generator.ChunkGenerator; import org.bukkit.help.HelpMap; import org.bukkit.inventory.*; +import org.bukkit.loot.LootTable; import org.bukkit.map.MapView; import org.bukkit.permissions.Permissible; import org.bukkit.permissions.Permission; @@ -1152,4 +1153,9 @@ public class FakeServer implements Server { } } + @Override + public LootTable getLootTable(NamespacedKey arg0) { + throw new UnsupportedOperationException("Not supported yet."); + } + } From 4be28ba193495ce728189b75bb53bb06b5a47475 Mon Sep 17 00:00:00 2001 From: md678685 Date: Tue, 14 Aug 2018 18:57:47 +0100 Subject: [PATCH 080/333] Implement ItemDbProviders, pt 2 --- nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java b/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java index 4a47ccbc1..67ece3d3d 100644 --- a/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java +++ b/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java @@ -159,7 +159,7 @@ public class LegacyItemDbProvider extends ItemDbProvider { lines.stream() .filter(line -> line.length() > 0 && !(line.charAt(0) == '#')) .map(this::parseLine) - .filter(itemData -> itemData != null) + .filter(Objects::nonNull) .forEach(this::addItem); for (List nameList : names.values()) { From 4e165d375c463d5f755e2abf03185c38b4c2f638 Mon Sep 17 00:00:00 2001 From: md678685 Date: Tue, 14 Aug 2018 19:29:28 +0100 Subject: [PATCH 081/333] Fix playtime calculation --- .../src/com/earth2me/essentials/commands/Commandwhois.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java index eace45dd8..2b0232fb0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java @@ -36,7 +36,7 @@ public class Commandwhois extends EssentialsCommand { sender.sendMessage(tl("whoisHunger", user.getBase().getFoodLevel(), user.getBase().getSaturation())); sender.sendMessage(tl("whoisExp", SetExpFix.getTotalExperience(user.getBase()), user.getBase().getLevel())); sender.sendMessage(tl("whoisLocation", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ())); - long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(Statistic.PLAY_ONE_MINUTE) * 60); + long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(Statistic.PLAY_ONE_MINUTE) * 60 * 1000); sender.sendMessage(tl("whoisPlaytime", DateUtil.formatDateDiff(playtimeMs))); if (!ess.getSettings().isEcoDisabled()) { sender.sendMessage(tl("whoisMoney", NumberUtil.displayCurrency(user.getMoney(), ess))); From 5009b3b5459caf8aef0e03c31db7605ae258d864 Mon Sep 17 00:00:00 2001 From: md678685 Date: Tue, 14 Aug 2018 19:29:28 +0100 Subject: [PATCH 082/333] Revert "Fix playtime calculation" This reverts commit 4e165d375c463d5f755e2abf03185c38b4c2f638. --- .../src/com/earth2me/essentials/commands/Commandwhois.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java index 2b0232fb0..eace45dd8 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java @@ -36,7 +36,7 @@ public class Commandwhois extends EssentialsCommand { sender.sendMessage(tl("whoisHunger", user.getBase().getFoodLevel(), user.getBase().getSaturation())); sender.sendMessage(tl("whoisExp", SetExpFix.getTotalExperience(user.getBase()), user.getBase().getLevel())); sender.sendMessage(tl("whoisLocation", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ())); - long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(Statistic.PLAY_ONE_MINUTE) * 60 * 1000); + long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(Statistic.PLAY_ONE_MINUTE) * 60); sender.sendMessage(tl("whoisPlaytime", DateUtil.formatDateDiff(playtimeMs))); if (!ess.getSettings().isEcoDisabled()) { sender.sendMessage(tl("whoisMoney", NumberUtil.displayCurrency(user.getMoney(), ess))); From 52d814f2cc410169f0e72d1a2e8f585e3d773e91 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 15:26:11 +0100 Subject: [PATCH 083/333] Properly fix inaccurate playtime measurement https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/commits/b848d8ce633871b52115247b089029749c02f579 --- .../earth2me/essentials/commands/Commandwhois.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java index eace45dd8..a47c4ead9 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java @@ -16,8 +16,17 @@ import static com.earth2me.essentials.I18n.tl; public class Commandwhois extends EssentialsCommand { + private Statistic playOneTick; + public Commandwhois() { super("whois"); + try { + // For some reason, in 1.13 PLAY_ONE_MINUTE = ticks played + // https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/commits/b848d8ce633871b52115247b089029749c02f579 + playOneTick = Statistic.valueOf("PLAY_ONE_MINUTE"); + } catch (IllegalArgumentException e) { + playOneTick = Statistic.valueOf("PLAY_ONE_TICK"); + } } @Override @@ -36,7 +45,7 @@ public class Commandwhois extends EssentialsCommand { sender.sendMessage(tl("whoisHunger", user.getBase().getFoodLevel(), user.getBase().getSaturation())); sender.sendMessage(tl("whoisExp", SetExpFix.getTotalExperience(user.getBase()), user.getBase().getLevel())); sender.sendMessage(tl("whoisLocation", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ())); - long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(Statistic.PLAY_ONE_MINUTE) * 60); + long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(playOneTick) * 50); sender.sendMessage(tl("whoisPlaytime", DateUtil.formatDateDiff(playtimeMs))); if (!ess.getSettings().isEcoDisabled()) { sender.sendMessage(tl("whoisMoney", NumberUtil.displayCurrency(user.getMoney(), ess))); From c27d05fd4ba5914ffc6b09bbc130913ff4ae866d Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 16:40:01 +0100 Subject: [PATCH 084/333] Fix dependency on IdProvider --- Essentials/pom.xml | 6 ++++++ Essentials/src/com/earth2me/essentials/Essentials.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Essentials/pom.xml b/Essentials/pom.xml index 8483f9af2..bd44cb37f 100644 --- a/Essentials/pom.xml +++ b/Essentials/pom.xml @@ -106,6 +106,12 @@ + + net.ess3 + IdProvider + 2.15.0 + compile + net.ess3 FlattenedProvider diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 09c90abc9..109c89c23 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -39,7 +39,7 @@ import net.ess3.nms.PotionMetaProvider; import net.ess3.nms.SpawnEggProvider; import net.ess3.nms.SpawnerProvider; import net.ess3.nms.flattened.FlatItemDbProvider; -import net.ess3.nms.legacy.LegacyItemDbProvider; +import net.ess3.nms.ids.LegacyItemDbProvider; import net.ess3.nms.legacy.LegacyPotionMetaProvider; import net.ess3.nms.refl.ReflSpawnEggProvider; import net.ess3.nms.updatedmeta.BasePotionDataProvider; From 773979cb37fb8e61cc862066064e52e816468a77 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 16:56:46 +0100 Subject: [PATCH 085/333] Provide ItemDb provider with other providers Provide providers to the provider that needs the providers. Provider provider provider provide provider. --- Essentials/src/com/earth2me/essentials/Essentials.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 109c89c23..f54cb2e0c 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -238,6 +238,9 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { BasePotionDataProvider.class, LegacyPotionMetaProvider.class ), "potion meta").getProvider(); + itemDbProvider.setSpawnerProvider(spawnerProvider); + itemDbProvider.setSpawnEggProvider(spawnEggProvider); + itemDbProvider.setPotionMetaProvider(potionMetaProvider); reload(); } catch (YAMLException exception) { if (pm.getPlugin("EssentialsUpdate") != null) { From 04feed8524daa7dfc7a386df05de9f3892ff1ff6 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 17:46:55 +0100 Subject: [PATCH 086/333] Add 1.13+ spawn egg provider Not sure how necessary this is, but I've done it anyway --- .../com/earth2me/essentials/Essentials.java | 2 ++ .../nms/flattened/FlatSpawnEggProvider.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index f54cb2e0c..eaa0a5dfa 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -39,6 +39,7 @@ import net.ess3.nms.PotionMetaProvider; import net.ess3.nms.SpawnEggProvider; import net.ess3.nms.SpawnerProvider; import net.ess3.nms.flattened.FlatItemDbProvider; +import net.ess3.nms.flattened.FlatSpawnEggProvider; import net.ess3.nms.ids.LegacyItemDbProvider; import net.ess3.nms.legacy.LegacyPotionMetaProvider; import net.ess3.nms.refl.ReflSpawnEggProvider; @@ -230,6 +231,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { ), "mob spawner").getProvider(); spawnEggProvider = new ProviderFactory<>(getLogger(), Arrays.asList( + FlatSpawnEggProvider.class, ReflSpawnEggProvider.class, LegacySpawnEggProvider.class ), "spawn egg").getProvider(); diff --git a/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java b/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java new file mode 100644 index 000000000..5ea4402e0 --- /dev/null +++ b/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java @@ -0,0 +1,31 @@ +package net.ess3.nms.flattened; + +import net.ess3.nms.SpawnEggProvider; +import net.ess3.nms.refl.ReflUtil; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; + +public class FlatSpawnEggProvider extends SpawnEggProvider { + @Override + public ItemStack createEggItem(EntityType type) throws IllegalArgumentException { + String name = type.name() + "_SPAWN_EGG"; + Material material = Material.valueOf(name); + return new ItemStack(material); + } + + @Override + public EntityType getSpawnedType(ItemStack eggItem) throws IllegalArgumentException { + String materialName = eggItem.getType().name(); + if (materialName.contains("_SPAWN_EGG")) { + return EntityType.valueOf(materialName.replace("_SPAWN_EGG", "")); + } else { + throw new IllegalArgumentException("Not a spawn egg"); + } + } + + @Override + public String getHumanName() { + return "1.13+ flat spawn egg provider"; + } +} From 299afdc6a1339f1be7c353c91b6fc57e6bdf1e31 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 18:05:44 +0100 Subject: [PATCH 087/333] Add V1_13_R1 to ReflUtil --- nms/ReflectionProvider/src/net/ess3/nms/refl/ReflUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/nms/ReflectionProvider/src/net/ess3/nms/refl/ReflUtil.java b/nms/ReflectionProvider/src/net/ess3/nms/refl/ReflUtil.java index e2273d354..5ed8aa833 100644 --- a/nms/ReflectionProvider/src/net/ess3/nms/refl/ReflUtil.java +++ b/nms/ReflectionProvider/src/net/ess3/nms/refl/ReflUtil.java @@ -23,6 +23,7 @@ public class ReflUtil { public static final NMSVersion V1_10_R1 = NMSVersion.fromString("v1_10_R1"); public static final NMSVersion V1_11_R1 = NMSVersion.fromString("v1_11_R1"); public static final NMSVersion V1_12_R1 = NMSVersion.fromString("v1_12_R1"); + public static final NMSVersion V1_13_R1 = NMSVersion.fromString("v1_13_R1"); private static NMSVersion nmsVersionObject; private static String nmsVersion; From 0e9232ba815996fd966a24f54d4f93bf04053dbd Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 19:40:08 +0100 Subject: [PATCH 088/333] Remove breaking import --- .../src/net/ess3/nms/flattened/FlatSpawnEggProvider.java | 1 - 1 file changed, 1 deletion(-) diff --git a/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java b/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java index 5ea4402e0..b3e5f3f46 100644 --- a/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java +++ b/nms/FlattenedProvider/src/net/ess3/nms/flattened/FlatSpawnEggProvider.java @@ -1,7 +1,6 @@ package net.ess3.nms.flattened; import net.ess3.nms.SpawnEggProvider; -import net.ess3.nms.refl.ReflUtil; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; From 340baa9703a6fd612bc67286344299c50072c275 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 19:40:35 +0100 Subject: [PATCH 089/333] Add IEssentials#getItemDbProvider method --- Essentials/src/com/earth2me/essentials/Essentials.java | 5 +++++ Essentials/src/net/ess3/api/IEssentials.java | 3 +++ 2 files changed, 8 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index eaa0a5dfa..a71a13fe3 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -887,6 +887,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { return potionMetaProvider; } + @Override + public ItemDbProvider getItemDbProvider() { + return itemDbProvider; + } + private static void addDefaultBackPermissionsToWorld(World w) { String permName = "essentials.back.into." + w.getName(); diff --git a/Essentials/src/net/ess3/api/IEssentials.java b/Essentials/src/net/ess3/api/IEssentials.java index 1e76dda17..dc418b512 100644 --- a/Essentials/src/net/ess3/api/IEssentials.java +++ b/Essentials/src/net/ess3/api/IEssentials.java @@ -1,5 +1,6 @@ package net.ess3.api; +import net.ess3.nms.ItemDbProvider; import net.ess3.nms.PotionMetaProvider; import net.ess3.nms.SpawnEggProvider; @@ -12,4 +13,6 @@ public interface IEssentials extends com.earth2me.essentials.IEssentials { SpawnEggProvider getSpawnEggProvider(); PotionMetaProvider getPotionMetaProvider(); + + ItemDbProvider getItemDbProvider(); } From 3ef0f20b0df82f0fabcd19365830d66591ed3c67 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 19:42:12 +0100 Subject: [PATCH 090/333] Add tipped arrows support on 1.9/1.10 On a side note, need to investigate why the potion provider is only needed on 1.10 and below - I don't remember what changed in 1.11? --- nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java b/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java index 67ece3d3d..37260afe1 100644 --- a/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java +++ b/nms/IdProvider/src/net/ess3/nms/ids/LegacyItemDbProvider.java @@ -103,7 +103,7 @@ public class LegacyItemDbProvider extends ItemDbProvider { throw new Exception("Can't spawn entity ID " + metaData + " from spawn eggs."); } retval = getSpawnEggProvider().createEggItem(type); - } else if (mat.name().endsWith("POTION") + } else if ((mat.name().endsWith("POTION") || mat.name().equals("TIPPED_ARROW")) && ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_11_R1)) { // Only apply this to pre-1.11 as items.csv might only work in 1.11 retval = getPotionMetaProvider().createPotionItem(mat, metaData); } else { From 3fb4b7958da889f2f13574c9137794d90b4b3a2f Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 19:50:15 +0100 Subject: [PATCH 091/333] Strip out legacy ItemDb code, pt 1 --- .../src/com/earth2me/essentials/ItemDb.java | 85 ++----------------- 1 file changed, 6 insertions(+), 79 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 358ea9ba7..022a96cee 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -3,6 +3,7 @@ package com.earth2me.essentials; import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.StringUtil; import net.ess3.api.IEssentials; +import net.ess3.nms.ItemDbProvider; import net.ess3.nms.refl.ReflUtil; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; @@ -29,6 +30,7 @@ import static com.earth2me.essentials.I18n.tl; public class ItemDb implements IConf, net.ess3.api.IItemDb { protected static final Logger LOGGER = Logger.getLogger("Essentials"); private final transient IEssentials ess; + private final transient ItemDbProvider provider; private final transient Map items = new HashMap<>(); private final transient Map> names = new HashMap<>(); private final transient Map primaryName = new HashMap<>(); @@ -41,6 +43,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { public ItemDb(final IEssentials ess) { this.ess = ess; + this.provider = ess.getItemDbProvider(); file = new ManagedFile("items.csv", ess); } @@ -130,88 +133,12 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { @Override public ItemStack get(final String id, final int quantity) throws Exception { - final ItemStack retval = get(id.toLowerCase(Locale.ENGLISH)); - retval.setAmount(quantity); - return retval; + return provider.getStack(id, quantity); } @Override public ItemStack get(final String id) throws Exception { - int itemid = 0; - String itemname; - short metaData = 0; - Matcher parts = splitPattern.matcher(id); - if (parts.matches()) { - itemname = parts.group(2); - metaData = Short.parseShort(parts.group(3)); - } else { - itemname = id; - } - - if (NumberUtil.isInt(itemname)) { - itemid = Integer.parseInt(itemname); - } else if (NumberUtil.isInt(id)) { - itemid = Integer.parseInt(id); - } else { - itemname = itemname.toLowerCase(Locale.ENGLISH); - } - - if (itemid < 1) { - if (items.containsKey(itemname)) { - itemid = items.get(itemname); - if (durabilities.containsKey(itemname) && metaData == 0) { - metaData = durabilities.get(itemname); - } - } - } - - if (itemid < 1) { - throw new Exception(tl("unknownItemName", itemname)); - } - - ItemData data = legacyIds.get(itemid); - if (data == null) { - throw new Exception(tl("unknownItemId", itemid)); - } - - Material mat = data.getMaterial(); - ItemStack retval = new ItemStack(mat); - if (nbtData.containsKey(itemname)) { - String nbt = nbtData.get(itemname); - if (nbt.startsWith("*")) { - nbt = nbtData.get(nbt.substring(1)); - } - retval = ess.getServer().getUnsafe().modifyItemStack(retval, nbt); - } - Material MOB_SPAWNER; - try { - MOB_SPAWNER = Material.SPAWNER; - } catch (Exception e) { - MOB_SPAWNER = Material.valueOf("MOB_SPAWNER"); - } - if (mat == MOB_SPAWNER) { - if (metaData == 0) metaData = EntityType.PIG.getTypeId(); - try { - retval = ess.getSpawnerProvider().setEntityType(retval, EntityType.fromId(metaData)); - } catch (IllegalArgumentException e) { - throw new Exception("Can't spawn entity ID " + metaData + " from mob spawners."); - } - } else if (mat == Material.LEGACY_MONSTER_EGG) { - EntityType type; - try { - type = EntityType.fromId(metaData); - } catch (IllegalArgumentException e) { - throw new Exception("Can't spawn entity ID " + metaData + " from spawn eggs."); - } - retval = ess.getSpawnEggProvider().createEggItem(type); - } else if (mat.name().endsWith("POTION") - && ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_11_R1)) { // Only apply this to pre-1.11 as items.csv might only work in 1.11 - retval = ess.getPotionMetaProvider().createPotionItem(mat, metaData); - } else { - retval.setDurability(metaData); - } - retval.setAmount(mat.getMaxStackSize()); - return retval; + return provider.getStack(id); } @Override @@ -456,7 +383,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb { @Override public Material getFromLegacyId(int id) { ItemData data = this.legacyIds.get(id); - if(data == null) { + if (data == null) { return null; } From a3029131300996ebb0434ea664b4e80227e8d6e7 Mon Sep 17 00:00:00 2001 From: md678685 Date: Wed, 15 Aug 2018 20:08:22 +0100 Subject: [PATCH 092/333] Clean up unused files --- WebPush/apikey.php | 5 - WebPush/index.php | 59 - WebPush/nbproject/private/private.properties | 8 - WebPush/nbproject/project.properties | 7 - WebPush/simple_html_dom.php | 1727 ------------------ WebPush/upload.php | 89 - nbactions.xml | 26 - 7 files changed, 1921 deletions(-) delete mode 100644 WebPush/apikey.php delete mode 100644 WebPush/index.php delete mode 100644 WebPush/nbproject/private/private.properties delete mode 100644 WebPush/nbproject/project.properties delete mode 100644 WebPush/simple_html_dom.php delete mode 100644 WebPush/upload.php delete mode 100644 nbactions.xml diff --git a/WebPush/apikey.php b/WebPush/apikey.php deleted file mode 100644 index 59f2bf3ac..000000000 --- a/WebPush/apikey.php +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/WebPush/index.php b/WebPush/index.php deleted file mode 100644 index 56193ebf7..000000000 --- a/WebPush/index.php +++ /dev/null @@ -1,59 +0,0 @@ - - diff --git a/WebPush/nbproject/private/private.properties b/WebPush/nbproject/private/private.properties deleted file mode 100644 index 8c2a80c6f..000000000 --- a/WebPush/nbproject/private/private.properties +++ /dev/null @@ -1,8 +0,0 @@ -copy.src.files=false -copy.src.target= -index.file=index.php -remote.connection=localhost-d13e79 -remote.directory=/upload -remote.upload=ON_SAVE -run.as=REMOTE -url=http://ess.khhq.net/upload/ diff --git a/WebPush/nbproject/project.properties b/WebPush/nbproject/project.properties deleted file mode 100644 index 6ffde2f50..000000000 --- a/WebPush/nbproject/project.properties +++ /dev/null @@ -1,7 +0,0 @@ -include.path=${php.global.include.path} -php.version=PHP_5 -source.encoding=UTF-8 -src.dir=. -tags.asp=false -tags.short=true -web.root=. diff --git a/WebPush/simple_html_dom.php b/WebPush/simple_html_dom.php deleted file mode 100644 index 3f96f8d95..000000000 --- a/WebPush/simple_html_dom.php +++ /dev/null @@ -1,1727 +0,0 @@ -size is the "real" number of bytes the dom was created from. - * but for most purposes, it's a really good estimation. - * Paperg - Added the forceTagsClosed to the dom constructor. Forcing tags closed is great for malformed html, but it CAN lead to parsing errors. - * Allow the user to tell us how much they trust the html. - * Paperg add the text and plaintext to the selectors for the find syntax. plaintext implies text in the innertext of a node. text implies that the tag is a text node. - * This allows for us to find tags based on the text they contain. - * Create find_ancestor_tag to see if a tag is - at any level - inside of another specific tag. - * Paperg: added parse_charset so that we know about the character set of the source document. - * NOTE: If the user's system has a routine called get_last_retrieve_url_contents_content_type availalbe, we will assume it's returning the content-type header from the - * last transfer or curl_exec, and we will parse that and use it in preference to any other method of charset detection. - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @author S.C. Chen - * @author John Schlick - * @author Rus Carroll - * @version 1.11 ($Rev: 184 $) - * @package PlaceLocalInclude - * @subpackage simple_html_dom - */ -/** - * All of the Defines for the classes below. - * @author S.C. Chen - */ -define('HDOM_TYPE_ELEMENT', 1); -define('HDOM_TYPE_COMMENT', 2); -define('HDOM_TYPE_TEXT', 3); -define('HDOM_TYPE_ENDTAG', 4); -define('HDOM_TYPE_ROOT', 5); -define('HDOM_TYPE_UNKNOWN', 6); -define('HDOM_QUOTE_DOUBLE', 0); -define('HDOM_QUOTE_SINGLE', 1); -define('HDOM_QUOTE_NO', 3); -define('HDOM_INFO_BEGIN', 0); -define('HDOM_INFO_END', 1); -define('HDOM_INFO_QUOTE', 2); -define('HDOM_INFO_SPACE', 3); -define('HDOM_INFO_TEXT', 4); -define('HDOM_INFO_INNER', 5); -define('HDOM_INFO_OUTER', 6); -define('HDOM_INFO_ENDSPACE', 7); -define('DEFAULT_TARGET_CHARSET', 'UTF-8'); -define('DEFAULT_BR_TEXT', "\r\n"); - -// helper functions -// ----------------------------------------------------------------------------- -// get html dom from file -// $maxlen is defined in the code as PHP_STREAM_COPY_ALL which is defined as -1. -function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT) -{ - // We DO force the tags to be terminated. - $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $defaultBRText); - // For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done. - $contents = file_get_contents($url, $use_include_path, $context, $offset); - // Paperg - use our own mechanism for getting the contents as we want to control the timeout. -// $contents = retrieve_url_contents($url); - if (empty($contents)) - { - return false; - } - // The second parameter can force the selectors to all be lowercase. - $dom->load($contents, $lowercase, $stripRN); - return $dom; -} - -// get html dom from string -function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT) -{ - $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $defaultBRText); - if (empty($str)) - { - $dom->clear(); - return false; - } - $dom->load($str, $lowercase, $stripRN); - return $dom; -} - -// dump html dom tree -function dump_html_tree($node, $show_attr=true, $deep=0) -{ - $node->dump($node); -} - -/** - * simple html dom node - * PaperG - added ability for "find" routine to lowercase the value of the selector. - * PaperG - added $tag_start to track the start position of the tag in the total byte index - * - * @package PlaceLocalInclude - */ -class simple_html_dom_node -{ - public $nodetype = HDOM_TYPE_TEXT; - public $tag = 'text'; - public $attr = array(); - public $children = array(); - public $nodes = array(); - public $parent = null; - public $_ = array(); - public $tag_start = 0; - private $dom = null; - - function __construct($dom) - { - $this->dom = $dom; - $dom->nodes[] = $this; - } - - function __destruct() - { - $this->clear(); - } - - function __toString() - { - return $this->outertext(); - } - - // clean up memory due to php5 circular references memory leak... - function clear() - { - $this->dom = null; - $this->nodes = null; - $this->parent = null; - $this->children = null; - } - - // dump node's tree - function dump($show_attr=true, $deep=0) - { - $lead = str_repeat(' ', $deep); - - echo $lead . $this->tag; - if ($show_attr && count($this->attr) > 0) - { - echo '('; - foreach ($this->attr as $k => $v) - echo "[$k]=>\"" . $this->$k . '", '; - echo ')'; - } - echo "\n"; - - foreach ($this->nodes as $c) - $c->dump($show_attr, $deep + 1); - } - - // Debugging function to dump a single dom node with a bunch of information about it. - function dump_node() - { - echo $this->tag; - if (count($this->attr) > 0) - { - echo '('; - foreach ($this->attr as $k => $v) - { - echo "[$k]=>\"" . $this->$k . '", '; - } - echo ')'; - } - if (count($this->attr) > 0) - { - echo ' $_ ('; - foreach ($this->_ as $k => $v) - { - if (is_array($v)) - { - echo "[$k]=>("; - foreach ($v as $k2 => $v2) - { - echo "[$k2]=>\"" . $v2 . '", '; - } - echo ")"; - } - else - { - echo "[$k]=>\"" . $v . '", '; - } - } - echo ")"; - } - - if (isset($this->text)) - { - echo " text: (" . $this->text . ")"; - } - - echo " children: " . count($this->children); - echo " nodes: " . count($this->nodes); - echo " tag_start: " . $this->tag_start; - echo "\n"; - } - - // returns the parent of node - function parent() - { - return $this->parent; - } - - // returns children of node - function children($idx=-1) - { - if ($idx === -1) - return $this->children; - if (isset($this->children[$idx])) - return $this->children[$idx]; - return null; - } - - // returns the first child of node - function first_child() - { - if (count($this->children) > 0) - return $this->children[0]; - return null; - } - - // returns the last child of node - function last_child() - { - if (($count = count($this->children)) > 0) - return $this->children[$count - 1]; - return null; - } - - // returns the next sibling of node - function next_sibling() - { - if ($this->parent === null) - return null; - $idx = 0; - $count = count($this->parent->children); - while ($idx < $count && $this !== $this->parent->children[$idx]) - ++$idx; - if (++$idx >= $count) - return null; - return $this->parent->children[$idx]; - } - - // returns the previous sibling of node - function prev_sibling() - { - if ($this->parent === null) - return null; - $idx = 0; - $count = count($this->parent->children); - while ($idx < $count && $this !== $this->parent->children[$idx]) - ++$idx; - if (--$idx < 0) - return null; - return $this->parent->children[$idx]; - } - - // function to locate a specific ancestor tag in the path to the root. - function find_ancestor_tag($tag) - { - global $debugObject; - if (is_object($debugObject)) - { - $debugObject->debugLogEntry(1); - } - - // Start by including ourselves in the comparison. - $returnDom = $this; - - while (!is_null($returnDom)) - { - if (is_object($debugObject)) - { - $debugObject->debugLog(2, "Current tag is: " . $returnDom->tag); - } - - if ($returnDom->tag == $tag) - { - break; - } - $returnDom = $returnDom->parent; - } - return $returnDom; - } - - // get dom node's inner html - function innertext() - { - if (isset($this->_[HDOM_INFO_INNER])) - return $this->_[HDOM_INFO_INNER]; - if (isset($this->_[HDOM_INFO_TEXT])) - return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - $ret = ''; - foreach ($this->nodes as $n) - $ret .= $n->outertext(); - return $ret; - } - - // get dom node's outer text (with tag) - function outertext() - { - global $debugObject; - if (is_object($debugObject)) - { - $text = ''; - if ($this->tag == 'text') - { - if (!empty($this->text)) - { - $text = " with text: " . $this->text; - } - } - $debugObject->debugLog(1, 'Innertext of tag: ' . $this->tag . $text); - } - - if ($this->tag === 'root') - return $this->innertext(); - - // trigger callback - if ($this->dom && $this->dom->callback !== null) - { - call_user_func_array($this->dom->callback, array($this)); - } - - if (isset($this->_[HDOM_INFO_OUTER])) - return $this->_[HDOM_INFO_OUTER]; - if (isset($this->_[HDOM_INFO_TEXT])) - return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - // render begin tag - if ($this->dom && $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]) - { - $ret = $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]->makeup(); - } - else - { - $ret = ""; - } - - // render inner text - if (isset($this->_[HDOM_INFO_INNER])) - { - // If it's a br tag... don't return the HDOM_INNER_INFO that we may or may not have added. - if ($this->tag != "br") - { - $ret .= $this->_[HDOM_INFO_INNER]; - } - } - else - { - if ($this->nodes) - { - foreach ($this->nodes as $n) - { - $ret .= $this->convert_text($n->outertext()); - } - } - } - - // render end tag - if (isset($this->_[HDOM_INFO_END]) && $this->_[HDOM_INFO_END] != 0) - $ret .= 'tag . '>'; - return $ret; - } - - // get dom node's plain text - function text() - { - if (isset($this->_[HDOM_INFO_INNER])) - return $this->_[HDOM_INFO_INNER]; - switch ($this->nodetype) - { - case HDOM_TYPE_TEXT: return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - case HDOM_TYPE_COMMENT: return ''; - case HDOM_TYPE_UNKNOWN: return ''; - } - if (strcasecmp($this->tag, 'script') === 0) - return ''; - if (strcasecmp($this->tag, 'style') === 0) - return ''; - - $ret = ''; - // In rare cases, (always node type 1 or HDOM_TYPE_ELEMENT - observed for some span tags, and some p tags) $this->nodes is set to NULL. - // NOTE: This indicates that there is a problem where it's set to NULL without a clear happening. - // WHY is this happening? - if (!is_null($this->nodes)) - { - foreach ($this->nodes as $n) - { - $ret .= $this->convert_text($n->text()); - } - } - return $ret; - } - - function xmltext() - { - $ret = $this->innertext(); - $ret = str_ireplace('', '', $ret); - return $ret; - } - - // build node's text with tag - function makeup() - { - // text, comment, unknown - if (isset($this->_[HDOM_INFO_TEXT])) - return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - $ret = '<' . $this->tag; - $i = -1; - - foreach ($this->attr as $key => $val) - { - ++$i; - - // skip removed attribute - if ($val === null || $val === false) - continue; - - $ret .= $this->_[HDOM_INFO_SPACE][$i][0]; - //no value attr: nowrap, checked selected... - if ($val === true) - $ret .= $key; - else - { - switch ($this->_[HDOM_INFO_QUOTE][$i]) - { - case HDOM_QUOTE_DOUBLE: $quote = '"'; - break; - case HDOM_QUOTE_SINGLE: $quote = '\''; - break; - default: $quote = ''; - } - $ret .= $key . $this->_[HDOM_INFO_SPACE][$i][1] . '=' . $this->_[HDOM_INFO_SPACE][$i][2] . $quote . $val . $quote; - } - } - $ret = $this->dom->restore_noise($ret); - return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>'; - } - - // find elements by css selector - //PaperG - added ability for find to lowercase the value of the selector. - function find($selector, $idx=null, $lowercase=false) - { - $selectors = $this->parse_selector($selector); - if (($count = count($selectors)) === 0) - return array(); - $found_keys = array(); - - // find each selector - for ($c = 0; $c < $count; ++$c) - { - // The change on the below line was documented on the sourceforge code tracker id 2788009 - // used to be: if (($levle=count($selectors[0]))===0) return array(); - if (($levle = count($selectors[$c])) === 0) - return array(); - if (!isset($this->_[HDOM_INFO_BEGIN])) - return array(); - - $head = array($this->_[HDOM_INFO_BEGIN] => 1); - - // handle descendant selectors, no recursive! - for ($l = 0; $l < $levle; ++$l) - { - $ret = array(); - foreach ($head as $k => $v) - { - $n = ($k === -1) ? $this->dom->root : $this->dom->nodes[$k]; - //PaperG - Pass this optional parameter on to the seek function. - $n->seek($selectors[$c][$l], $ret, $lowercase); - } - $head = $ret; - } - - foreach ($head as $k => $v) - { - if (!isset($found_keys[$k])) - $found_keys[$k] = 1; - } - } - - // sort keys - ksort($found_keys); - - $found = array(); - foreach ($found_keys as $k => $v) - $found[] = $this->dom->nodes[$k]; - - // return nth-element or array - if (is_null($idx)) - return $found; - else if ($idx < 0) - $idx = count($found) + $idx; - return (isset($found[$idx])) ? $found[$idx] : null; - } - - // seek for given conditions - // PaperG - added parameter to allow for case insensitive testing of the value of a selector. - protected function seek($selector, &$ret, $lowercase=false) - { - global $debugObject; - if (is_object($debugObject)) - { - $debugObject->debugLogEntry(1); - } - - list($tag, $key, $val, $exp, $no_key) = $selector; - - // xpath index - if ($tag && $key && is_numeric($key)) - { - $count = 0; - foreach ($this->children as $c) - { - if ($tag === '*' || $tag === $c->tag) - { - if (++$count == $key) - { - $ret[$c->_[HDOM_INFO_BEGIN]] = 1; - return; - } - } - } - return; - } - - $end = (!empty($this->_[HDOM_INFO_END])) ? $this->_[HDOM_INFO_END] : 0; - if ($end == 0) - { - $parent = $this->parent; - while (!isset($parent->_[HDOM_INFO_END]) && $parent !== null) - { - $end -= 1; - $parent = $parent->parent; - } - $end += $parent->_[HDOM_INFO_END]; - } - - for ($i = $this->_[HDOM_INFO_BEGIN] + 1; $i < $end; ++$i) - { - $node = $this->dom->nodes[$i]; - - $pass = true; - - if ($tag === '*' && !$key) - { - if (in_array($node, $this->children, true)) - $ret[$i] = 1; - continue; - } - - // compare tag - if ($tag && $tag != $node->tag && $tag !== '*') - { - $pass = false; - } - // compare key - if ($pass && $key) - { - if ($no_key) - { - if (isset($node->attr[$key])) - $pass = false; - } else - { - if (($key != "plaintext") && !isset($node->attr[$key])) - $pass = false; - } - } - // compare value - if ($pass && $key && $val && $val !== '*') - { - // If they have told us that this is a "plaintext" search then we want the plaintext of the node - right? - if ($key == "plaintext") - { - // $node->plaintext actually returns $node->text(); - $nodeKeyValue = $node->text(); - } - else - { - // this is a normal search, we want the value of that attribute of the tag. - $nodeKeyValue = $node->attr[$key]; - } - if (is_object($debugObject)) - { - $debugObject->debugLog(2, "testing node: " . $node->tag . " for attribute: " . $key . $exp . $val . " where nodes value is: " . $nodeKeyValue); - } - - //PaperG - If lowercase is set, do a case insensitive test of the value of the selector. - if ($lowercase) - { - $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue)); - } - else - { - $check = $this->match($exp, $val, $nodeKeyValue); - } - if (is_object($debugObject)) - { - $debugObject->debugLog(2, "after match: " . ($check ? "true" : "false")); - } - - // handle multiple class - if (!$check && strcasecmp($key, 'class') === 0) - { - foreach (explode(' ', $node->attr[$key]) as $k) - { - // Without this, there were cases where leading, trailing, or double spaces lead to our comparing blanks - bad form. - if (!empty($k)) - { - if ($lowercase) - { - $check = $this->match($exp, strtolower($val), strtolower($k)); - } - else - { - $check = $this->match($exp, $val, $k); - } - if ($check) - break; - } - } - } - if (!$check) - $pass = false; - } - if ($pass) - $ret[$i] = 1; - unset($node); - } - // It's passed by reference so this is actually what this function returns. - if (is_object($debugObject)) - { - $debugObject->debugLog(1, "EXIT - ret: ", $ret); - } - } - - protected function match($exp, $pattern, $value) - { - global $debugObject; - if (is_object($debugObject)) - { - $debugObject->debugLogEntry(1); - } - - switch ($exp) - { - case '=': - return ($value === $pattern); - case '!=': - return ($value !== $pattern); - case '^=': - return preg_match("/^" . preg_quote($pattern, '/') . "/", $value); - case '$=': - return preg_match("/" . preg_quote($pattern, '/') . "$/", $value); - case '*=': - if ($pattern[0] == '/') - { - return preg_match($pattern, $value); - } - return preg_match("/" . $pattern . "/i", $value); - } - return false; - } - - protected function parse_selector($selector_string) - { - global $debugObject; - if (is_object($debugObject)) - { - $debugObject->debugLogEntry(1); - } - - // pattern of CSS selectors, modified from mootools - // Paperg: Add the colon to the attrbute, so that it properly finds like google does. - // Note: if you try to look at this attribute, yo MUST use getAttribute since $dom->x:y will fail the php syntax check. -// Notice the \[ starting the attbute? and the @? following? This implies that an attribute can begin with an @ sign that is not captured. -// This implies that an html attribute specifier may start with an @ sign that is NOT captured by the expression. -// farther study is required to determine of this should be documented or removed. -// $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; - $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-:]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; - preg_match_all($pattern, trim($selector_string) . ' ', $matches, PREG_SET_ORDER); - if (is_object($debugObject)) - { - $debugObject->debugLog(2, "Matches Array: ", $matches); - } - - $selectors = array(); - $result = array(); - //print_r($matches); - - foreach ($matches as $m) - { - $m[0] = trim($m[0]); - if ($m[0] === '' || $m[0] === '/' || $m[0] === '//') - continue; - // for browser generated xpath - if ($m[1] === 'tbody') - continue; - - list($tag, $key, $val, $exp, $no_key) = array($m[1], null, null, '=', false); - if (!empty($m[2])) - { - $key = 'id'; - $val = $m[2]; - } - if (!empty($m[3])) - { - $key = 'class'; - $val = $m[3]; - } - if (!empty($m[4])) - { - $key = $m[4]; - } - if (!empty($m[5])) - { - $exp = $m[5]; - } - if (!empty($m[6])) - { - $val = $m[6]; - } - - // convert to lowercase - if ($this->dom->lowercase) - { - $tag = strtolower($tag); - $key = strtolower($key); - } - //elements that do NOT have the specified attribute - if (isset($key[0]) && $key[0] === '!') - { - $key = substr($key, 1); - $no_key = true; - } - - $result[] = array($tag, $key, $val, $exp, $no_key); - if (trim($m[7]) === ',') - { - $selectors[] = $result; - $result = array(); - } - } - if (count($result) > 0) - $selectors[] = $result; - return $selectors; - } - - function __get($name) - { - if (isset($this->attr[$name])) - { - return $this->convert_text($this->attr[$name]); - } - switch ($name) - { - case 'outertext': return $this->outertext(); - case 'innertext': return $this->innertext(); - case 'plaintext': return $this->text(); - case 'xmltext': return $this->xmltext(); - default: return array_key_exists($name, $this->attr); - } - } - - function __set($name, $value) - { - switch ($name) - { - case 'outertext': return $this->_[HDOM_INFO_OUTER] = $value; - case 'innertext': - if (isset($this->_[HDOM_INFO_TEXT])) - return $this->_[HDOM_INFO_TEXT] = $value; - return $this->_[HDOM_INFO_INNER] = $value; - } - if (!isset($this->attr[$name])) - { - $this->_[HDOM_INFO_SPACE][] = array(' ', '', ''); - $this->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; - } - $this->attr[$name] = $value; - } - - function __isset($name) - { - switch ($name) - { - case 'outertext': return true; - case 'innertext': return true; - case 'plaintext': return true; - } - //no value attr: nowrap, checked selected... - return (array_key_exists($name, $this->attr)) ? true : isset($this->attr[$name]); - } - - function __unset($name) - { - if (isset($this->attr[$name])) - unset($this->attr[$name]); - } - - // PaperG - Function to convert the text from one character set to another if the two sets are not the same. - function convert_text($text) - { - global $debugObject; - if (is_object($debugObject)) - { - $debugObject->debugLogEntry(1); - } - - $converted_text = $text; - - $sourceCharset = ""; - $targetCharset = ""; - if ($this->dom) - { - $sourceCharset = strtoupper($this->dom->_charset); - $targetCharset = strtoupper($this->dom->_target_charset); - } - if (is_object($debugObject)) - { - $debugObject->debugLog(3, "source charset: " . $sourceCharset . " target charaset: " . $targetCharset); - } - - if (!empty($sourceCharset) && !empty($targetCharset) && (strcasecmp($sourceCharset, $targetCharset) != 0)) - { - // Check if the reported encoding could have been incorrect and the text is actually already UTF-8 - if ((strcasecmp($targetCharset, 'UTF-8') == 0) && ($this->is_utf8($text))) - { - $converted_text = $text; - } - else - { - $converted_text = iconv($sourceCharset, $targetCharset, $text); - } - } - - return $converted_text; - } - - function is_utf8($string) - { - return (utf8_encode(utf8_decode($string)) == $string); - } - - // camel naming conventions - function getAllAttributes() - { - return $this->attr; - } - - function getAttribute($name) - { - return $this->__get($name); - } - - function setAttribute($name, $value) - { - $this->__set($name, $value); - } - - function hasAttribute($name) - { - return $this->__isset($name); - } - - function removeAttribute($name) - { - $this->__set($name, null); - } - - function getElementById($id) - { - return $this->find("#$id", 0); - } - - function getElementsById($id, $idx=null) - { - return $this->find("#$id", $idx); - } - - function getElementByTagName($name) - { - return $this->find($name, 0); - } - - function getElementsByTagName($name, $idx=null) - { - return $this->find($name, $idx); - } - - function parentNode() - { - return $this->parent(); - } - - function childNodes($idx=-1) - { - return $this->children($idx); - } - - function firstChild() - { - return $this->first_child(); - } - - function lastChild() - { - return $this->last_child(); - } - - function nextSibling() - { - return $this->next_sibling(); - } - - function previousSibling() - { - return $this->prev_sibling(); - } -} - -/** - * simple html dom parser - * Paperg - in the find routine: allow us to specify that we want case insensitive testing of the value of the selector. - * Paperg - change $size from protected to public so we can easily access it - * Paperg - added ForceTagsClosed in the constructor which tells us whether we trust the html or not. Default is to NOT trust it. - * - * @package PlaceLocalInclude - */ -class simple_html_dom -{ - public $root = null; - public $nodes = array(); - public $callback = null; - public $lowercase = false; - public $size; - protected $pos; - protected $doc; - protected $char; - protected $cursor; - protected $parent; - protected $noise = array(); - protected $token_blank = " \t\r\n"; - protected $token_equal = ' =/>'; - protected $token_slash = " />\r\n\t"; - protected $token_attr = ' >'; - protected $_charset = ''; - protected $_target_charset = ''; - protected $default_br_text = ""; - // use isset instead of in_array, performance boost about 30%... - protected $self_closing_tags = array('img' => 1, 'br' => 1, 'input' => 1, 'meta' => 1, 'link' => 1, 'hr' => 1, 'base' => 1, 'embed' => 1, 'spacer' => 1); - protected $block_tags = array('root' => 1, 'body' => 1, 'form' => 1, 'div' => 1, 'span' => 1, 'table' => 1); - // Known sourceforge issue #2977341 - // B tags that are not closed cause us to return everything to the end of the document. - protected $optional_closing_tags = array( - 'tr' => array('tr' => 1, 'td' => 1, 'th' => 1), - 'th' => array('th' => 1), - 'td' => array('td' => 1), - 'li' => array('li' => 1), - 'dt' => array('dt' => 1, 'dd' => 1), - 'dd' => array('dd' => 1, 'dt' => 1), - 'dl' => array('dd' => 1, 'dt' => 1), - 'p' => array('p' => 1), - 'nobr' => array('nobr' => 1), - 'b' => array('b' => 1), - ); - - function __construct($str=null, $lowercase=true, $forceTagsClosed=true, $target_charset=DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT) - { - if ($str) - { - if (preg_match("/^http:\/\//i", $str) || is_file($str)) - $this->load_file($str); - else - $this->load($str, $lowercase, $stripRN, $defaultBRText); - } - // Forcing tags to be closed implies that we don't trust the html, but it can lead to parsing errors if we SHOULD trust the html. - if (!$forceTagsClosed) - { - $this->optional_closing_array = array(); - } - $this->_target_charset = $target_charset; - } - - function __destruct() - { - $this->clear(); - } - - // load html from string - function load($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT) - { - global $debugObject; - - // prepare - $this->prepare($str, $lowercase, $stripRN, $defaultBRText); - // strip out comments - $this->remove_noise("''is"); - // strip out cdata - $this->remove_noise("''is", true); - // Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037 - // Script tags removal now preceeds style tag removal. - // strip out