1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-09-06 20:50:46 +02:00

Compare commits

...

101 Commits

Author SHA1 Message Date
KHobbits
d11a295ffd Merge branch '2.x' of github.com:essentials/Essentials into 2.x 2014-09-03 00:21:42 +01:00
KHobbits
ffea359661 rework /seen to be a little stricter on argument matching. 2014-08-18 21:00:03 +01:00
md_5
037456c99d Fix missed cases from previous user iteration optimizations. 2014-08-16 19:04:13 +10:00
KHobbits
5125a137f4 Make sure we close any open inventories of players who leave. 2014-08-14 01:58:17 +01:00
KHobbits
3f1c996959 Use quicker ban lookup to reduce /seen lag. 2014-08-14 01:50:31 +01:00
KHobbits
53a7cd732f Add paging to mail.
Support aliases in rule and baltop output.
2014-08-11 19:03:24 +01:00
KHobbits
4fd026ff99 Add mailFormat TL key. 2014-08-11 18:46:04 +01:00
Necrodoom
d9fbd68529 Misc clarification (socialspy and kit delay)
clarify allow-silent-join-quit
2014-08-11 00:12:43 +01:00
Necrodoom
49d80462d1 Remove outdated try-catches 2014-08-11 00:11:06 +01:00
Necrodoom
1d859e49ad Add /tempban missing syntax 2014-08-11 00:10:09 +01:00
FearFree
a2c43d822c Add amount required to notEnoughMoney TL key.
See https://essentials3.atlassian.net/browse/ESS-5125 for request.
2014-07-19 20:31:50 +01:00
KHobbits
7907565377 Formatting fixes. 2014-07-19 20:11:45 +01:00
SidShakal
d1c014fe16 Fix sticky piston retract breaking essentials sign
Sticky pistons could break signs that were mounted on blocks the pistons were retracting.

This patch extends the protection from just the piston base to include the extended piston arm and the block at the end of the piston arm as well.

This method will very likely need to be changed again when 1.8 comes out, but this should bring us a bit closer, by wrapping the block tests in a loop.
2014-07-19 20:08:38 +01:00
md_5
465041b98b Optimize player / user iteration.
* Add a method for backwards compatability with unmapped code.
* Convert all getOnlinePlayers() calls to use this method, part of the IEssentials interface
* Add a new method getOnlineUsers() Ljava/lang/Iterable;
* Convert appropriate calls to use this method
* Update Bukkit to #1945
* Update CraftBukkit to #3103
2014-07-19 20:07:50 +01:00
Alexander Likhachev
ed56afda26 Add permission check before resetting speed on login The staff of my server asked me to do this fix, but I think it is very useful for all. This commit change is to reset player fly & run speed only if player has no permission to change speed. 2014-07-19 20:07:09 +01:00
KHobbits
23f14bc2d5 If a player already exists in the usermap, don't replace it with a eco npc. 2014-07-19 18:04:35 +01:00
KHobbits
c829a32555 Clean up tempban messages to be a little clearer. 2014-07-14 21:23:56 +01:00
KHobbits
ae984c2055 Update translations from Crowdin (http://translate2.ess3.net) 2014-07-12 22:12:51 +01:00
KHobbits
0c416c8366 Remove ban check from /ess cleanup, no longer required.
Fix ban upgrade script.
2014-07-12 19:13:23 +01:00
FearFree
51be2131f7 Update to new ban method. 2014-07-12 17:40:14 +01:00
KHobbits
575a8142ff Add ban reason to /banip 2014-07-12 17:23:11 +01:00
KHobbits
093a1f677b Still give 'nickNoMore' message when removing a nickname. 2014-07-12 16:48:01 +01:00
KHobbits
8311da2653 Allow for changing of username casing without adding 'nickname' prefix. 2014-07-12 16:43:57 +01:00
KHobbits
b5976a52e0 Prevent users from setting unsafe homes when teleport safety is disabled. 2014-07-12 16:34:18 +01:00
KHobbits
4e6c98ac57 Allow people with god & fly to teleport to unsafe locations even when teleport safety is disabled. 2014-07-12 16:33:50 +01:00
KHobbits
a2c692af39 Converge ban message translations, and add reason support to default tempban tl key. 2014-07-12 16:32:42 +01:00
KHobbits
a131527a15 Switch sudo to command dispatch, this will allow vanilla commands to be executed. 2014-07-12 15:29:25 +01:00
KHobbits
0b925e6fc0 Don't cascade null usernames passed from eco api 2014-07-10 11:48:54 +01:00
KHobbits
97c8f5192e New permission :essentials.tp.position Required to use /tp [player] <x> <y> <z> 2014-07-06 18:41:12 +01:00
Necrodoom
7c372cd978 Add support for vanilla /tp <x> <y> <z> teleport syntax. 2014-07-06 18:41:01 +01:00
KHobbits
02fe58161c Allow forcing adult status on randomly generated /spawnmob mobs. 2014-07-06 18:25:00 +01:00
KHobbits
2ba2ebaa43 Update Bukkit
CB: 3092 B: 1938
2014-07-06 16:40:06 +01:00
KHobbits
549500eaf2 Show warp teleport status to teleport owner. 2014-06-28 18:10:32 +01:00
KHobbits
8e7589e450 Slightly reorder teleport messages to be less confusing. 2014-06-28 18:06:13 +01:00
KHobbits
9b69403ee1 Fix NPE with /list in console 2014-06-27 04:28:33 +01:00
KHobbits
6269ce9a3f Update essentials to support 3rd party vanish toggling. 2014-06-27 01:46:37 +01:00
KHobbits
0f6625aea9 Add some debugging to make it easier to diagnose kit errors. 2014-06-25 19:19:04 +01:00
KHobbits
dbceccaa3e Kit cleanup and refactor. 2014-06-25 19:03:31 +01:00
KHobbits
6c7ba6a76f Allow multiple kits to be spawned per command. 2014-06-23 00:38:13 +01:00
KHobbits
f76a517339 New permission: essentials.signs.trade.override.collect
People with this permission will collect the resources of other peoples trade signs broken with admin permissions (essentials.signs.trade.override).
2014-06-21 21:47:33 +01:00
Necrodoom
2c747ecf36 empty array is not null array 2014-06-19 16:22:38 +01:00
KHobbits
1f8b60081e Reduce a few nickname refresh calls. 2014-06-19 04:02:15 +01:00
KHobbits
a800359e0b Force listener cleanup on plugin disable. 2014-06-19 02:59:08 +01:00
KHobbits
4854961901 Add a lag check for permission system checks.
This doesn't include normal permission checks, since the overhead could be detrimental.
2014-06-19 02:38:28 +01:00
KHobbits
50a815bdb9 Revert "Add spawn location cache to reduce blocking on player respawn."
This reverts commit 7804516793.
2014-06-17 23:27:46 +01:00
KHobbits
1690b9d83d If "sethome-multiple" config section is invalid, silently fallback to default config values. 2014-06-17 00:19:59 +01:00
KHobbits
7804516793 Add spawn location cache to reduce blocking on player respawn. 2014-06-16 19:55:34 +01:00
KHobbits
c54e9b5dba Add default ban reason for tempban reason. 2014-06-14 22:06:26 +01:00
KHobbits
71936cfe22 Check for arraynull on pex group request. 2014-06-14 18:20:49 +01:00
KHobbits
27890e2b22 Only remove first date match from ban reason. 2014-06-14 16:27:34 +01:00
KHobbits
da6df89126 Add optional {2} in 'tempBanned' TL key, for reason. 2014-06-14 16:21:05 +01:00
KHobbits
95ff197910 Show UUID in trackUUID debug message. 2014-06-07 18:21:10 +01:00
KHobbits
2215b0f53f Don't allow old UUID's to accidentally overwrite current UUID for user mapping.
Add some extra logging and uuid debug.
2014-06-07 18:08:25 +01:00
KHobbits
3887fdd47d New permission: essentials.itemspawn.meta-vanilla
Without this permission you cannot use vanilla itemmeta.  You can still use essentials style meta, if you have the appropriate permissions.
2014-06-07 16:08:51 +01:00
KHobbits
7e9328bd25 Try to use consistent UUIDs and not rely on Bukkit lookup while saving. 2014-06-07 15:45:57 +01:00
KHobbits
9d9af25c7f Add local echo of mail being sent on /mail send. 2014-06-05 00:07:27 +01:00
KHobbits
5a2fd19bcf Fix firework recipe in /recipe 2014-06-04 16:13:20 +01:00
KHobbits
3a50850734 Use strings for cachemap key, should prevent accidental key issues. 2014-06-01 21:50:24 +01:00
KHobbits
812de5c35c Add API logging to Eco API. 2014-05-31 20:37:44 +01:00
KHobbits
bffea1d7c8 Extend getUser(Object) to match uuid and offline players. 2014-05-30 22:16:06 +01:00
KHobbits
b00f458e67 Emulate player join for mocking. 2014-05-27 21:14:45 +01:00
KHobbits
80ef955eae Improve fakeServer model 2014-05-27 20:31:13 +01:00
KHobbits
44509ff6e4 Remove online player lookup in usermap.getUUIDMap(), throw log entry on failback. 2014-05-27 18:04:02 +01:00
KHobbits
e1d4129869 Log takeMoney exception, even if we ignore it. 2014-05-27 10:46:25 +01:00
KHobbits
00655f724d Revert writecount reset, this could cause odd behavior. 2014-05-27 06:18:34 +01:00
KHobbits
4590e7ea26 Enforce userdata save on player dispose. 2014-05-27 04:52:52 +01:00
KHobbits
2ac1ce4f56 If we are modifying money, force transaction clear, this is important. 2014-05-27 03:41:18 +01:00
KHobbits
f726035660 Don't check silentjoin.vanish if another plugin has hidden the join message. 2014-05-26 22:08:18 +01:00
KHobbits
57bb1ee475 New permission: essentials.silentjoin.vanish
The server needs silentjoin to be enabled first.
2014-05-25 19:31:55 +01:00
KHobbits
889dde7549 Abort transaction before updating funds on balance overflow. 2014-05-25 17:03:23 +01:00
KHobbits
ada2fe01a2 Utilize write transactions for delaylogin task. 2014-05-25 01:38:37 +01:00
KHobbits
cf29a0ba6a Rename listening methods to be a little more descriptive of their purpose. 2014-05-24 18:47:40 +01:00
KHobbits
c929ebb89a Convert 9 anonymous scheduled tasks to named classes for better logging. 2014-05-18 21:32:07 +01:00
KHobbits
8159530906 Fix invalid TL key. 2014-05-18 19:47:18 +01:00
KHobbits
7e8ba9a256 Exempt named mobs by default from /remove
Named mobs can be removed using /remove named
Killing all mobs now requires /remove all,tamed,named
2014-05-18 14:43:07 +01:00
KHobbits
b145ec59ea Tweak to player login event. 2014-05-18 13:26:27 +01:00
KHobbits
429a7275ee Update worth.yml to be more descriptive. 2014-05-17 04:31:44 +01:00
KHobbits
3bd0608b6e Update /condense syntax hint. 2014-05-17 04:21:51 +01:00
@ArkhamNetwork
9307e0cb71 Optimize PlayerLoginEvent 2014-05-17 04:05:51 +01:00
@ArkhamNetwork
4672e51806 Move the teleport timer to an async task. 2014-05-17 03:35:44 +01:00
KHobbits
18811122b3 Prevent near empty userdata file creation. 2014-05-17 03:06:48 +01:00
KHobbits
cbaf126a25 Stop using old string player lookup. 2014-05-17 02:47:10 +01:00
KHobbits
8e7abe325e Prevent reading and writing the usermap at the same time. 2014-05-17 01:50:41 +01:00
Faris Rehman
ed9e4ecd28 Add user messages. 2014-05-16 20:39:49 +01:00
KHobbits
bd866de950 First draft of /condense 2014-05-16 20:30:06 +01:00
KHobbits
4ecb6b5fdb If Bukkit doesn't know who a player is, but we do, substitute the last known nickname when ban checking. 2014-05-10 21:52:45 +01:00
KHobbits
0d6bca2080 Update English TL keys. 2014-05-10 17:49:37 +01:00
KHobbits
05ef05dcac Update translations from crowdin (http://translate2.ess3.net/) 2014-05-10 16:11:03 +01:00
Luke Anderson (stuntguy3000)
7ba097c640 Improve messages/formatting 2014-05-10 16:03:39 +01:00
Burke D
6adacbb357 Grammatical changes to config.yml 2014-05-10 15:46:08 +01:00
clou44
69f62574c4 Updated Items.csv: Added nemofish and fishnemo.
Added shorter aliases for salmon, pufferfish, and clownfish.
2014-05-10 15:38:29 +01:00
KHobbits
b00c31730f Only dispose users who are offline at point of disposal.
This should cater for quick reconnects on lagged servers.
2014-05-10 15:36:58 +01:00
KHobbits
f09180659d Initialize TL Bundle on plugin start. 2014-05-06 07:00:57 +01:00
KHobbits
c12373bf41 Remove '-' from valid account names again.
This could cause issues with NPC's converted to UUID before this version.
2014-05-05 22:46:46 +01:00
KHobbits
04666b66b4 Reload locale even if it is set to null. 2014-05-05 20:47:48 +01:00
KHobbits
363aee70d5 Better handle TL failover. 2014-05-05 14:48:25 +01:00
KHobbits
01d03d5d41 Update teleport timer to handle UUID rather than player names. 2014-05-05 13:01:20 +01:00
KHobbits
4575fc5aff Better handle corrupted chunks. 2014-05-04 19:39:35 +01:00
ElgarL
27e9e3aa88 Error in logic 2014-05-04 17:12:15 +01:00
ElgarL
b0187698b9 Prevent players who have never logged in before from taking over existing accounts. 2014-05-04 16:22:58 +01:00
KHobbits
0364d4e0de Allow disabling userfile cache on uuid convert.
Add "ignore-userfiles-cache: true" to "upgrades-done.yml" to disable cache, forcing uuid lookup requests.
2014-05-04 13:25:20 +01:00
127 changed files with 5485 additions and 3620 deletions

View File

@@ -24,7 +24,7 @@ public class Backup implements Runnable
{
this.ess = ess;
server = ess.getServer();
if (server.getOnlinePlayers().length > 0)
if (!ess.getOnlinePlayers().isEmpty())
{
ess.runTaskAsynchronously(new Runnable()
{
@@ -146,20 +146,21 @@ public class Backup implements Runnable
}
finally
{
ess.scheduleSyncDelayedTask(new Runnable()
class BackupEnableSaveTask implements Runnable
{
@Override
public void run()
{
server.dispatchCommand(cs, "save-on");
if (server.getOnlinePlayers().length == 0)
if (ess.getOnlinePlayers().isEmpty())
{
stopTask();
}
active = false;
LOGGER.log(Level.INFO, tl("backupFinished"));
}
});
}
ess.scheduleSyncDelayedTask(new BackupEnableSaveTask());
}
}
});

View File

@@ -142,20 +142,13 @@ public class Enchantments
ALIASENCHANTMENTS.put("unlimitedarrows", Enchantment.ARROW_INFINITE);
ALIASENCHANTMENTS.put("ai", Enchantment.ARROW_INFINITE);
try // 1.7 update
{
ENCHANTMENTS.put("luck", Enchantment.LUCK);
ALIASENCHANTMENTS.put("luckofsea", Enchantment.LUCK);
ALIASENCHANTMENTS.put("luckofseas", Enchantment.LUCK);
ALIASENCHANTMENTS.put("rodluck", Enchantment.LUCK);
ENCHANTMENTS.put("luck", Enchantment.LUCK);
ALIASENCHANTMENTS.put("luckofsea", Enchantment.LUCK);
ALIASENCHANTMENTS.put("luckofseas", Enchantment.LUCK);
ALIASENCHANTMENTS.put("rodluck", Enchantment.LUCK);
ENCHANTMENTS.put("lure", Enchantment.LURE);
ALIASENCHANTMENTS.put("rodlure", Enchantment.LURE);
}
catch (java.lang.NoSuchFieldError e)
{
Essentials.wrongVersion();
}
ENCHANTMENTS.put("lure", Enchantment.LURE);
ALIASENCHANTMENTS.put("rodlure", Enchantment.LURE);
}
public static Enchantment getByName(String name)

View File

@@ -35,10 +35,17 @@ 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.google.common.base.Function;
import com.google.common.base.Throwables;
import com.google.common.collect.Iterables;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
@@ -100,6 +107,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
private transient Metrics metrics;
private transient EssentialsTimer timer;
private final transient List<String> vanishedPlayers = new ArrayList<String>();
private transient Method oldGetOnlinePlayers;
public Essentials()
{
@@ -129,14 +137,17 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
}
i18n = new I18n(this);
i18n.onEnable();
i18n.updateLocale("en");
LOGGER.log(Level.INFO, tl("usingTempFolderForTesting"));
LOGGER.log(Level.INFO, dataFolder.toString());
this.initialize(null, server, new PluginDescriptionFile(new FileReader(new File("src" + File.separator + "plugin.yml"))), dataFolder, null, null);
settings = new Settings(this);
i18n.updateLocale("en");
userMap = new UserMap(this);
permissionsHandler = new PermissionsHandler(this, false);
Economy.setEss(this);
confList = new ArrayList<IConf>();
jails = new Jails(this);
registerListeners(server.getPluginManager());
}
@Override
@@ -178,6 +189,16 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
LOGGER.log(Level.INFO, getServer().getBukkitVersion());
}
execTimer.mark("BukkitCheck");
for (Method method : Server.class.getDeclaredMethods())
{
if (method.getName().endsWith("getOnlinePlayers") && method.getReturnType() == Player[].class)
{
oldGetOnlinePlayers = method;
break;
}
}
try
{
final EssentialsUpgrade upgrade = new EssentialsUpgrade(this);
@@ -304,14 +325,14 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
@Override
public void onDisable()
{
for (Player p : getServer().getOnlinePlayers())
for (User user : getOnlineUsers())
{
User user = getUser(p);
if (user.isVanished())
{
user.setVanished(false);
user.sendMessage(tl("unvanishedReload"));
}
user.stopTransaction();
}
cleanupOpenInventories();
if (i18n != null)
@@ -325,6 +346,8 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
Economy.setEss(null);
Trade.closeLog();
getUserMap().getUUIDMap().forceWriteUUIDMap();
HandlerList.unregisterAll(this);
}
@Override
@@ -538,9 +561,8 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
public void cleanupOpenInventories()
{
for (Player player : getServer().getOnlinePlayers())
for (User user : getOnlineUsers())
{
User user = getUser(player);
if (user.isRecipeSee())
{
user.getBase().getOpenInventory().getTopInventory().clear();
@@ -624,6 +646,14 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
{
return getUser((Player)base);
}
if (base instanceof org.bukkit.OfflinePlayer)
{
return getUser(((org.bukkit.OfflinePlayer)base).getUniqueId());
}
if (base instanceof UUID)
{
return getUser((UUID)base);
}
if (base instanceof String)
{
return getOfflineUser((String)base);
@@ -649,7 +679,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
@Override
public User getOfflineUser(final String name)
{
final User user = userMap.getUser(name);
final User user = userMap.getUser(name);
if (user != null && user.getBase() instanceof OfflinePlayer)
{
//This code should attempt to use the last known name of a user, if Bukkit returns name as null.
@@ -690,7 +720,6 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
LOGGER.log(Level.INFO, "Constructing new userfile from base player {0}", base.getName());
}
user = new User(base, this);
user.setLastAccountName(base.getName());
}
else
{
@@ -711,7 +740,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
event.getPlayer().sendMessage("Essentials failed to load, read the log file.");
}
}, this);
for (Player player : getServer().getOnlinePlayers())
for (Player player : getOnlinePlayers())
{
player.sendMessage("Essentials failed to load, read the log file.");
}
@@ -771,7 +800,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
IText broadcast = new SimpleTextInput(message);
final Player[] players = getServer().getOnlinePlayers();
final Collection<Player> players = getOnlinePlayers();
for (Player player : players)
{
@@ -790,7 +819,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
}
}
return players.length;
return players.size();
}
@Override
@@ -804,6 +833,12 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
{
return this.getScheduler().runTaskLaterAsynchronously(this, run, delay);
}
@Override
public BukkitTask runTaskTimerAsynchronously(final Runnable run, final long delay, final long period)
{
return this.getScheduler().runTaskTimerAsynchronously(this, run, delay, period);
}
@Override
public int scheduleSyncDelayedTask(final Runnable run)
@@ -871,6 +906,43 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
return vanishedPlayers;
}
@Override
public Collection<Player> getOnlinePlayers()
{
try
{
return (Collection<Player>)getServer().getOnlinePlayers(); // Needed for sanity here, the Bukkit API is a bit broken in the sense it only allows subclasses of Player to this list
}
catch (NoSuchMethodError ex)
{
try
{
return Arrays.asList((Player[])oldGetOnlinePlayers.invoke(getServer()));
}
catch (InvocationTargetException ex1)
{
throw Throwables.propagate(ex.getCause());
}
catch (IllegalAccessException ex1)
{
throw new RuntimeException("Error invoking oldGetOnlinePlayers", ex1);
}
}
}
@Override
public Iterable<User> getOnlineUsers()
{
return Iterables.transform(getOnlinePlayers(), new Function<Player, User>()
{
@Override
public User apply(Player player)
{
return getUser(player);
}
});
}
private static class EssentialsWorldListener implements Listener, Runnable
{

View File

@@ -56,8 +56,7 @@ public class EssentialsBlockListener implements Listener
final User user = ess.getUser(event.getPlayer());
if (user.hasUnlimited(is) && user.getBase().getGameMode() == GameMode.SURVIVAL)
{
ess.scheduleSyncDelayedTask(
new Runnable()
class UnlimitedItemSpawnTask implements Runnable
{
@Override
public void run()
@@ -65,7 +64,8 @@ public class EssentialsBlockListener implements Listener
user.getBase().getInventory().addItem(is);
user.getBase().updateInventory();
}
});
}
ess.scheduleSyncDelayedTask(new UnlimitedItemSpawnTask());
}
}
}

View File

@@ -15,6 +15,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -35,9 +36,10 @@ public class EssentialsConf extends YamlConfiguration
protected final File configFile;
protected String templateName = null;
protected static final Charset UTF8 = Charset.forName("UTF-8");
private Class<?> resourceClass = EssentialsConf.class;
private Class<?> resourceClass = EssentialsConf.class;
private static final ExecutorService EXECUTOR_SERVICE = Executors.newSingleThreadExecutor();
private final AtomicInteger pendingDiskWrites = new AtomicInteger(0);
private final AtomicBoolean transaction = new AtomicBoolean(false);
public EssentialsConf(final File configFile)
{
@@ -95,7 +97,7 @@ public class EssentialsConf extends YamlConfiguration
LOGGER.log(Level.SEVERE, null, ex);
}
}
if (!configFile.exists())
{
if (legacyFileExists())
@@ -187,22 +189,22 @@ public class EssentialsConf extends YamlConfiguration
LOGGER.log(Level.SEVERE, "The file " + configFile.toString() + " is broken, it has been renamed to " + broken.toString(), ex.getCause());
}
}
public boolean legacyFileExists()
{
return false;
}
public void convertLegacyFile()
{
LOGGER.log(Level.SEVERE, "Unable to import legacy config file.");
}
public boolean altFileExists()
{
return false;
}
public void convertAltFile()
{
LOGGER.log(Level.SEVERE, "Unable to import alt config file.");
@@ -277,6 +279,17 @@ public class EssentialsConf extends YamlConfiguration
this.resourceClass = resClass;
}
public void startTransaction()
{
transaction.set(true);
}
public void stopTransaction()
{
transaction.set(false);
save();
}
public void save()
{
try
@@ -297,9 +310,14 @@ public class EssentialsConf extends YamlConfiguration
@Override
public synchronized void save(final File file) throws IOException
{
delayedSave(file);
if (!transaction.get())
{
delayedSave(file);
}
}
//This may be aborted if there are stagnant requests sitting in queue.
//This needs fixed to discard outstanding save requests.
public synchronized void forceSave()
{
try
@@ -320,9 +338,13 @@ public class EssentialsConf extends YamlConfiguration
}
}
public synchronized void cleanup()
{
forceSave();
}
private Future<?> delayedSave(final File file)
{
//long startTime = System.nanoTime();
if (file == null)
{
throw new IllegalArgumentException("File cannot be null");
@@ -335,12 +357,8 @@ public class EssentialsConf extends YamlConfiguration
return null;
}
pendingDiskWrites.incrementAndGet();
Future<?> future = EXECUTOR_SERVICE.submit(new WriteRunner(configFile, data, pendingDiskWrites));
//LOGGER.log(Level.INFO, configFile + " prepared for writing in " + (System.nanoTime() - startTime) + " nsec.");
return future;
}

View File

@@ -55,7 +55,7 @@ public class EssentialsEntityListener implements Listener
attacker.updateActivity(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 +
final Object shooter = projectile.getShooter();
@@ -105,8 +105,8 @@ public class EssentialsEntityListener implements Listener
final String command = powertoolPlayer.matcher(tempCommand).replaceAll(defender.getName());
if (command != null && !command.isEmpty() && !command.equals(tempCommand))
{
ess.scheduleSyncDelayedTask(
new Runnable()
class PowerToolInteractTask implements Runnable
{
@Override
public void run()
@@ -114,7 +114,8 @@ public class EssentialsEntityListener implements Listener
attacker.getServer().dispatchCommand(attacker.getBase(), command);
LOGGER.log(Level.INFO, String.format("[PT] %s issued server command: /%s", attacker.getName(), command));
}
});
}
ess.scheduleSyncDelayedTask(new PowerToolInteractTask());
event.setCancelled(true);
return;

View File

@@ -5,7 +5,6 @@ import com.earth2me.essentials.textreader.IText;
import com.earth2me.essentials.textreader.KeywordReplacer;
import com.earth2me.essentials.textreader.TextInput;
import com.earth2me.essentials.textreader.TextPager;
import com.earth2me.essentials.utils.DateUtil;
import com.earth2me.essentials.utils.LocationUtil;
import java.io.IOException;
import java.util.Iterator;
@@ -37,25 +36,25 @@ public class EssentialsPlayerListener implements Listener
{
private static final Logger LOGGER = Logger.getLogger("Essentials");
private final transient IEssentials ess;
public EssentialsPlayerListener(final IEssentials parent)
{
this.ess = parent;
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerRespawn(final PlayerRespawnEvent event)
{
final User user = ess.getUser(event.getPlayer());
updateCompass(user);
user.setDisplayNick();
if (ess.getSettings().isTeleportInvulnerability())
{
user.enableInvulnerabilityAfterTeleport();
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerChat(final AsyncPlayerChatEvent event)
{
@@ -89,11 +88,11 @@ public class EssentialsPlayerListener implements Listener
ess.getLogger().info("Ignore could not block chat due to custom chat plugin event.");
}
}
user.updateActivity(true);
user.setDisplayNick();
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerMove(final PlayerMoveEvent event)
{
@@ -103,19 +102,19 @@ public class EssentialsPlayerListener implements Listener
{
return;
}
if (!ess.getSettings().cancelAfkOnMove() && !ess.getSettings().getFreezeAfkPlayers())
{
event.getHandlers().unregister(this);
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.INFO, "Unregistering move listener");
}
return;
}
final User user = ess.getUser(event.getPlayer());
if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers())
{
@@ -146,12 +145,12 @@ public class EssentialsPlayerListener implements Listener
user.updateActivity(true);
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerQuit(final PlayerQuitEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (ess.getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silentquit"))
{
event.setQuitMessage(null);
@@ -164,7 +163,7 @@ public class EssentialsPlayerListener implements Listener
.replace("{PLAYER}", player.getDisplayName())
.replace("{USERNAME}", player.getName()));
}
if (ess.getSettings().removeGodOnDisconnect() && user.isGodModeEnabled())
{
user.setGodModeEnabled(false);
@@ -178,10 +177,23 @@ public class EssentialsPlayerListener implements Listener
{
user.getBase().getOpenInventory().getTopInventory().clear();
}
for (HumanEntity viewer : user.getBase().getInventory().getViewers())
{
if (viewer instanceof Player)
{
User uviewer = ess.getUser((Player)viewer);
if (uviewer.isInvSee())
{
uviewer.getBase().closeInventory();
}
}
}
user.updateActivity(false);
user.dispose();
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(final PlayerJoinEvent event)
{
@@ -199,42 +211,69 @@ public class EssentialsPlayerListener implements Listener
event.setJoinMessage(null);
}
}
public void delayedJoin(final Player player, final String message)
{
if (!player.isOnline())
{
return;
}
ess.getBackup().onPlayerJoin();
final User user = ess.getUser(player);
if (user.isNPC())
final User dUser = ess.getUser(player);
if (dUser.isNPC())
{
user.setNPC(false);
dUser.setNPC(false);
}
final long currentTime = System.currentTimeMillis();
user.checkMuteTimeout(currentTime);
user.updateActivity(false);
ess.scheduleSyncDelayedTask(new Runnable()
dUser.checkMuteTimeout(currentTime);
dUser.updateActivity(false);
IText tempInput = null;
if (!ess.getSettings().isCommandDisabled("motd"))
{
try
{
tempInput = new TextInput(dUser.getSource(), "motd", true, ess);
}
catch (IOException ex)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.WARNING, ex.getMessage(), ex);
}
else
{
LOGGER.log(Level.WARNING, ex.getMessage());
}
}
}
final IText input = tempInput;
class DelayJoinTask implements Runnable
{
@Override
public void run()
{
final User user = ess.getUser(player);
if (!user.getBase().isOnline())
{
return;
}
user.startTransaction();
user.setLastAccountName(user.getBase().getName());
user.setLastLogin(currentTime);
user.setDisplayNick();
updateCompass(user);
if (!ess.getVanishedPlayers().isEmpty() && !user.isAuthorized("essentials.vanish.see"))
{
for (String p : ess.getVanishedPlayers())
@@ -246,15 +285,22 @@ public class EssentialsPlayerListener implements Listener
}
}
}
if (user.isAuthorized("essentials.sleepingignored"))
{
user.getBase().setSleepingIgnored(true);
}
if ((ess.getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silentjoin")) || message == null)
if (ess.getSettings().allowSilentJoinQuit() && (user.isAuthorized("essentials.silentjoin") || user.isAuthorized("essentials.silentjoin.vanish")))
{
// Do nothing - silently join
if (user.isAuthorized("essentials.silentjoin.vanish"))
{
user.setVanished(true);
}
}
else if (message == null)
{
//NOOP
}
else if (ess.getSettings().isCustomJoinMessage())
{
@@ -267,29 +313,14 @@ public class EssentialsPlayerListener implements Listener
{
ess.getServer().broadcastMessage(message);
}
if (!ess.getSettings().isCommandDisabled("motd") && user.isAuthorized("essentials.motd"))
if (input != null && user.isAuthorized("essentials.motd"))
{
try
{
final IText input = new TextInput(user.getSource(), "motd", true, ess);
final IText output = new KeywordReplacer(input, user.getSource(), ess);
final TextPager pager = new TextPager(output, true);
pager.showPage("1", null, "motd", user.getSource());
}
catch (IOException ex)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.WARNING, ex.getMessage(), ex);
}
else
{
LOGGER.log(Level.WARNING, ex.getMessage());
}
}
final IText output = new KeywordReplacer(input, user.getSource(), ess);
final TextPager pager = new TextPager(output, true);
pager.showPage("1", null, "motd", user.getSource());
}
if (!ess.getSettings().isCommandDisabled("mail") && user.isAuthorized("essentials.mail"))
{
final List<String> mail = user.getMails();
@@ -302,7 +333,7 @@ public class EssentialsPlayerListener implements Listener
user.sendMessage(tl("youHaveNewMail", mail.size()));
}
}
if (user.isAuthorized("essentials.fly.safelogin"))
{
user.getBase().setFallDistance(0);
@@ -311,13 +342,20 @@ public class EssentialsPlayerListener implements Listener
user.getBase().setAllowFlight(true);
user.getBase().setFlying(true);
user.getBase().sendMessage(tl("flyMode", tl("enabled"), user.getDisplayName()));
}
}
}
user.getBase().setFlySpeed(0.1f);
user.getBase().setWalkSpeed(0.2f);
if (!user.isAuthorized("essentials.speed"))
{
user.getBase().setFlySpeed(0.1f);
user.getBase().setWalkSpeed(0.2f);
}
user.stopTransaction();
}
});
}
ess.scheduleSyncDelayedTask(new DelayJoinTask());
}
// Makes the compass item ingame always point to the first essentials home. #EasterEgg
@@ -334,64 +372,26 @@ public class EssentialsPlayerListener implements Listener
user.getBase().setCompassTarget(updateLoc);
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin2(final PlayerLoginEvent event)
{
switch (event.getResult())
{
case KICK_BANNED:
break;
default:
return;
}
final String banReason = tl("banFormat", tl("defaultBanReason"), "Console");
event.disallow(Result.KICK_BANNED, banReason);
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerLogin(final PlayerLoginEvent event)
{
switch (event.getResult())
{
case KICK_FULL:
case KICK_BANNED:
break;
default:
return;
}
final User user = ess.getUser(event.getPlayer());
if (event.getResult() == Result.KICK_BANNED || user.getBase().isBanned())
{
final boolean banExpired = user.checkBanTimeout(System.currentTimeMillis());
if (!banExpired)
final User kfuser = ess.getUser(event.getPlayer());
if (kfuser.isAuthorized("essentials.joinfullserver"))
{
String banReason = user.getBanReason();
if (banReason == null || banReason.isEmpty() || banReason.equalsIgnoreCase("ban"))
{
banReason = event.getKickMessage();
}
if (user.getBanTimeout() > 0)
{
//TODO: TL This
banReason += "\n\n" + "Expires in " + DateUtil.formatDateDiff(user.getBanTimeout());
}
event.disallow(Result.KICK_BANNED, banReason);
event.allow();
return;
}
}
if (event.getResult() == Result.KICK_FULL && !user.isAuthorized("essentials.joinfullserver"))
{
event.disallow(Result.KICK_FULL, tl("serverFull"));
return;
break;
default:
break;
}
event.allow();
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerTeleport(final PlayerTeleportEvent event)
{
@@ -411,7 +411,7 @@ public class EssentialsPlayerListener implements Listener
}
}
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerEggThrow(final PlayerEggThrowEvent event)
{
@@ -423,7 +423,7 @@ public class EssentialsPlayerListener implements Listener
user.getBase().updateInventory();
}
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event)
{
@@ -441,7 +441,7 @@ public class EssentialsPlayerListener implements Listener
});
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event)
{
@@ -449,10 +449,9 @@ public class EssentialsPlayerListener implements Listener
final String cmd = event.getMessage().toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH);
if (ess.getSettings().getSocialSpyCommands().contains(cmd) || ess.getSettings().getSocialSpyCommands().contains("*"))
{
for (Player onlinePlayer : ess.getServer().getOnlinePlayers())
for (User spyer : ess.getOnlineUsers())
{
final User spyer = ess.getUser(onlinePlayer);
if (spyer.isSocialSpyEnabled() && !player.equals(onlinePlayer))
if (spyer.isSocialSpyEnabled() && !player.equals(spyer.getBase()))
{
spyer.sendMessage(player.getDisplayName() + " : " + event.getMessage());
}
@@ -464,7 +463,7 @@ public class EssentialsPlayerListener implements Listener
user.updateActivity(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event)
{
@@ -489,7 +488,7 @@ public class EssentialsPlayerListener implements Listener
{
user.getBase().setFlySpeed(user.getBase().getFlySpeed() * 0.99999f);
}
if (user.getBase().getWalkSpeed() > ess.getSettings().getMaxWalkSpeed() && !user.isAuthorized("essentials.speed.bypass"))
{
user.getBase().setWalkSpeed((float)ess.getSettings().getMaxWalkSpeed());
@@ -500,7 +499,7 @@ public class EssentialsPlayerListener implements Listener
}
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChangedWorld(final PlayerChangedWorldEvent event)
{
@@ -512,7 +511,7 @@ public class EssentialsPlayerListener implements Listener
{
user.sendMessage(tl("noGodWorldWarning"));
}
if (!user.getWorld().getName().equals(newWorld))
{
user.sendMessage(tl("currentWorld", newWorld));
@@ -522,7 +521,7 @@ public class EssentialsPlayerListener implements Listener
user.setVanished(user.isAuthorized("essentials.vanish"));
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerInteract(final PlayerInteractEvent event)
{
@@ -571,9 +570,8 @@ public class EssentialsPlayerListener implements Listener
try
{
final Location otarget = LocationUtil.getTarget(user.getBase());
ess.scheduleSyncDelayedTask(
new Runnable()
class DelayedClickJumpTask implements Runnable
{
@Override
public void run()
@@ -587,7 +585,8 @@ public class EssentialsPlayerListener implements Listener
}
user.getBase().teleport(loc, TeleportCause.PLUGIN);
}
});
}
ess.scheduleSyncDelayedTask(new DelayedClickJumpTask());
}
catch (Exception ex)
{
@@ -597,7 +596,7 @@ public class EssentialsPlayerListener implements Listener
}
}
}
private boolean usePowertools(final User user, final int id)
{
final List<String> commandList = user.getPowertool(id);
@@ -621,8 +620,8 @@ public class EssentialsPlayerListener implements Listener
else
{
used = true;
ess.scheduleSyncDelayedTask(
new Runnable()
class PowerToolUseTask implements Runnable
{
@Override
public void run()
@@ -630,12 +629,14 @@ public class EssentialsPlayerListener implements Listener
user.getServer().dispatchCommand(user.getBase(), command);
LOGGER.log(Level.INFO, String.format("[PT] %s issued server command: /%s", user.getName(), command));
}
});
}
ess.scheduleSyncDelayedTask(new PowerToolUseTask());
}
}
return used;
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerPickupItem(final PlayerPickupItemEvent event)
{
@@ -647,14 +648,14 @@ public class EssentialsPlayerListener implements Listener
}
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onInventoryClickEvent(final InventoryClickEvent event)
{
Player refreshPlayer = null;
final Inventory top = event.getView().getTopInventory();
final InventoryType type = top.getType();
if (type == InventoryType.PLAYER)
{
final User user = ess.getUser((Player)event.getWhoClicked());
@@ -699,7 +700,7 @@ public class EssentialsPlayerListener implements Listener
refreshPlayer = user.getBase();
}
}
if (refreshPlayer != null)
{
final Player player = refreshPlayer;
@@ -713,7 +714,7 @@ public class EssentialsPlayerListener implements Listener
}, 1);
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onInventoryCloseEvent(final InventoryCloseEvent event)
{
@@ -752,7 +753,7 @@ public class EssentialsPlayerListener implements Listener
refreshPlayer = user.getBase();
}
}
if (refreshPlayer != null)
{
final Player player = refreshPlayer;
@@ -766,7 +767,7 @@ public class EssentialsPlayerListener implements Listener
}, 1);
}
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerFishEvent(final PlayerFishEvent event)
{

View File

@@ -48,7 +48,7 @@ public class EssentialsTimer implements Runnable
}
lastPoll = startTime;
int count = 0;
for (Player player : ess.getServer().getOnlinePlayers())
for (Player player : ess.getOnlinePlayers())
{
count++;
if (skip1 > 0)

View File

@@ -1,6 +1,7 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.craftbukkit.BanLookup;
import com.earth2me.essentials.craftbukkit.FakeWorld;
import com.earth2me.essentials.settings.Spawns;
import com.earth2me.essentials.storage.YamlStorageWriter;
@@ -14,6 +15,7 @@ import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.ess3.api.IEssentials;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@@ -500,13 +502,15 @@ public class EssentialsUpgrade
{
return;
}
Boolean ignoreUFCache = doneFile.getBoolean("ignore-userfiles-cache", false);
final File userdir = new File(ess.getDataFolder(), "userdata");
if (!userdir.exists())
{
return;
}
int countFiles = 0;
int countReqFiles = 0;
for (String string : userdir.list())
@@ -515,12 +519,12 @@ public class EssentialsUpgrade
{
continue;
}
countFiles++;
final String name = string.substring(0, string.length() - 4);
UUID uuid = null;
try
{
uuid = UUID.fromString(name);
@@ -529,37 +533,37 @@ public class EssentialsUpgrade
{
countReqFiles++;
}
if (countFiles > 100)
{
break;
}
}
}
if (countReqFiles < 1)
{
return;
}
ess.getLogger().info("#### Starting Essentials UUID userdata conversion in a few seconds. ####");
ess.getLogger().info("We recommend you take a backup of your server before upgrading from the old username system.");
try
{
Thread.sleep(10000);
Thread.sleep(15000);
}
catch (InterruptedException ex)
{
// NOOP
}
uuidFileConvert(ess);
uuidFileConvert(ess, ignoreUFCache);
doneFile.setProperty("uuidFileChange", true);
doneFile.save();
}
public static void uuidFileConvert(IEssentials ess)
public static void uuidFileConvert(IEssentials ess, Boolean ignoreUFCache)
{
ess.getLogger().info("Starting Essentials UUID userdata conversion");
@@ -593,7 +597,7 @@ public class EssentialsUpgrade
countFiles++;
final String name = string.substring(0, string.length() - 4);
String name = string.substring(0, string.length() - 4);
EssentialsUserConf config;
UUID uuid = null;
try
@@ -608,7 +612,9 @@ public class EssentialsUpgrade
conf.setProperty("lastAccountName", name);
conf.save();
String uuidString = conf.getString("uuid", null);
String uuidConf = ignoreUFCache ? "force-uuid" : "uuid";
String uuidString = conf.getString(uuidConf, null);
for (int i = 0; i < 4; i++)
{
@@ -625,7 +631,7 @@ public class EssentialsUpgrade
uuid = UUID.nameUUIDFromBytes(("NPC:" + name).getBytes(Charsets.UTF_8));
break;
}
org.bukkit.OfflinePlayer player = ess.getServer().getOfflinePlayer(name);
uuid = player.getUniqueId();
}
@@ -634,7 +640,7 @@ public class EssentialsUpgrade
{
countBukkit++;
break;
}
}
}
if (uuid != null)
@@ -642,19 +648,114 @@ public class EssentialsUpgrade
conf.forceSave();
config = new EssentialsUserConf(name, uuid, new File(userdir, uuid + ".yml"));
config.convertLegacyFile();
ess.getUserMap().trackUUID(uuid, name);
ess.getUserMap().trackUUID(uuid, name, false);
continue;
}
countFails++;
}
}
ess.getUserMap().getUUIDMap().forceWriteUUIDMap();
ess.getLogger().info("Converted " + countFiles + "/" + countFiles + ". Conversion complete.");
ess.getLogger().info("Converted via cache: " + countEssCache + " :: Converted via lookup: " + countBukkit + " :: Failed to convert: " + countFails);
ess.getLogger().info("To rerun the conversion type /essentials uuidconvert");
}
public void banFormatChange()
{
if (doneFile.getBoolean("banFormatChange", false))
{
return;
}
ess.getLogger().info("Starting Essentials ban format conversion");
final File userdir = new File(ess.getDataFolder(), "userdata");
if (!userdir.exists())
{
return;
}
int countFiles = 0;
ess.getLogger().info("Found " + userdir.list().length + " files to convert...");
for (String string : userdir.list())
{
if (!string.endsWith(".yml") || string.length() < 5)
{
continue;
}
final int showProgress = countFiles % 250;
if (showProgress == 0)
{
ess.getLogger().info("Converted " + countFiles + "/" + userdir.list().length);
}
countFiles++;
final File pFile = new File(userdir, string);
final EssentialsConf conf = new EssentialsConf(pFile);
conf.load();
String banReason;
Long banTimeout;
try
{
banReason = conf.getConfigurationSection("ban").getString("reason");
}
catch (NullPointerException n)
{
banReason = null;
}
final String playerName = conf.getString("lastAccountName");
if (playerName != null && playerName.length() > 1 && banReason != null && banReason.length() > 1)
{
try
{
if (conf.getConfigurationSection("ban").contains("timeout"))
{
banTimeout = Long.parseLong(conf.getConfigurationSection("ban").getString("timeout"));
}
else
{
banTimeout = 0L;
}
}
catch (NumberFormatException n)
{
banTimeout = 0L;
}
if (BanLookup.isBanned(ess, playerName))
{
updateBan(playerName, banReason, banTimeout);
}
}
conf.removeProperty("ban");
conf.save();
}
doneFile.setProperty("banFormatChange", true);
doneFile.save();
ess.getLogger().info("Ban format update complete.");
}
private void updateBan(String playerName, String banReason, Long banTimeout)
{
if (banTimeout == 0)
{
Bukkit.getBanList(BanList.Type.NAME).addBan(playerName, banReason, null, Console.NAME);
}
else
{
Bukkit.getBanList(BanList.Type.NAME).addBan(playerName, banReason, new Date(banTimeout), Console.NAME);
}
}
public void beforeSettings()
{
if (!ess.getDataFolder().exists())
@@ -674,6 +775,7 @@ public class EssentialsUpgrade
updateSpawnsToNewSpawnsConfig();
updateJailsToNewJailsConfig();
uuidFileChange();
banFormatChange();
warnMetrics();
}
}

View File

@@ -12,8 +12,8 @@ import org.bukkit.Bukkit;
public class EssentialsUserConf extends EssentialsConf
{
final String username;
final UUID uuid;
public final String username;
public final UUID uuid;
public EssentialsUserConf(final String username, final UUID uuid, final File configFile)
{

View File

@@ -12,6 +12,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import net.ess3.api.IEssentials;
import org.bukkit.Bukkit;
public class I18n implements net.ess3.api.II18n
@@ -23,16 +24,28 @@ public class I18n implements net.ess3.api.II18n
private transient ResourceBundle customBundle;
private transient ResourceBundle localeBundle;
private final transient ResourceBundle defaultBundle;
private final transient Map<String, MessageFormat> messageFormatCache = new HashMap<String, MessageFormat>();
private transient Map<String, MessageFormat> messageFormatCache = new HashMap<String, MessageFormat>();
private final transient IEssentials ess;
private static final Pattern NODOUBLEMARK = Pattern.compile("''");
private static final ResourceBundle NULL_BUNDLE = new ResourceBundle()
{
public Enumeration<String> getKeys()
{
return null;
}
protected Object handleGetObject(String key)
{
return null;
}
};
public I18n(final IEssentials ess)
{
this.ess = ess;
customBundle = ResourceBundle.getBundle(MESSAGES, defaultLocale, new FileResClassLoader(I18n.class.getClassLoader(), ess));
localeBundle = ResourceBundle.getBundle(MESSAGES, defaultLocale);
defaultBundle = ResourceBundle.getBundle(MESSAGES, Locale.ENGLISH);
localeBundle = defaultBundle;
customBundle = NULL_BUNDLE;
}
public void onEnable()
@@ -110,27 +123,43 @@ public class I18n implements net.ess3.api.II18n
public void updateLocale(final String loc)
{
if (loc == null || loc.isEmpty())
if (loc != null && !loc.isEmpty())
{
return;
}
final String[] parts = loc.split("[_\\.]");
if (parts.length == 1)
{
currentLocale = new Locale(parts[0]);
}
if (parts.length == 2)
{
currentLocale = new Locale(parts[0], parts[1]);
}
if (parts.length == 3)
{
currentLocale = new Locale(parts[0], parts[1], parts[2]);
final String[] parts = loc.split("[_\\.]");
if (parts.length == 1)
{
currentLocale = new Locale(parts[0]);
}
if (parts.length == 2)
{
currentLocale = new Locale(parts[0], parts[1]);
}
if (parts.length == 3)
{
currentLocale = new Locale(parts[0], parts[1], parts[2]);
}
}
ResourceBundle.clearCache();
messageFormatCache = new HashMap<String, MessageFormat>();
Logger.getLogger("Essentials").log(Level.INFO, String.format("Using locale %s", currentLocale.toString()));
customBundle = ResourceBundle.getBundle(MESSAGES, currentLocale, new FileResClassLoader(I18n.class.getClassLoader(), ess));
localeBundle = ResourceBundle.getBundle(MESSAGES, currentLocale);
try
{
localeBundle = ResourceBundle.getBundle(MESSAGES, currentLocale);
}
catch (MissingResourceException ex)
{
localeBundle = NULL_BUNDLE;
}
try
{
customBundle = ResourceBundle.getBundle(MESSAGES, currentLocale, new FileResClassLoader(I18n.class.getClassLoader(), ess));
}
catch (MissingResourceException ex)
{
customBundle = NULL_BUNDLE;
}
}
public static String capitalCase(final String input)
@@ -166,7 +195,7 @@ public class I18n implements net.ess3.api.II18n
{
}
}
return super.getResource(string);
return null;
}
@Override
@@ -183,7 +212,7 @@ public class I18n implements net.ess3.api.II18n
{
}
}
return super.getResourceAsStream(string);
return null;
}
}
}

View File

@@ -6,6 +6,7 @@ import com.earth2me.essentials.api.IWarps;
import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.perm.PermissionsHandler;
import com.earth2me.essentials.register.payment.Methods;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
import org.bukkit.World;
@@ -63,12 +64,14 @@ public interface IEssentials extends Plugin
BukkitTask runTaskAsynchronously(Runnable run);
BukkitTask runTaskLaterAsynchronously(Runnable run, long delay);
BukkitTask runTaskTimerAsynchronously(Runnable run, long delay, long period);
int scheduleSyncDelayedTask(Runnable run);
int scheduleSyncDelayedTask(Runnable run, long delay);
int scheduleSyncRepeatingTask(final Runnable run, long delay, long period);
int scheduleSyncRepeatingTask(Runnable run, long delay, long period);
TNTExplodeListener getTNTListener();
@@ -76,7 +79,7 @@ public interface IEssentials extends Plugin
AlternativeCommandsHandler getAlternativeCommandsHandler();
void showError(final CommandSource sender, final Throwable exception, final String commandLabel);
void showError(CommandSource sender, Throwable exception, String commandLabel);
IItemDb getItemDb();
@@ -89,4 +92,8 @@ public interface IEssentials extends Plugin
EssentialsTimer getTimer();
List<String> getVanishedPlayers();
Collection<Player> getOnlinePlayers();
Iterable<User> getOnlineUsers();
}

View File

@@ -193,6 +193,8 @@ public interface ISettings extends IConf
int getMailsPerMinute();
long getEconomyLagWarning();
long getPermissionsLagWarning();
void setEssentialsChatActive(boolean b);

View File

@@ -198,7 +198,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
private class JailListener implements Listener
{
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockBreak(final BlockBreakEvent event)
public void onJailBlockBreak(final BlockBreakEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.isJailed())
@@ -208,7 +208,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event)
public void onJailBlockPlace(final BlockPlaceEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.isJailed())
@@ -218,7 +218,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockDamage(final BlockDamageEvent event)
public void onJailBlockDamage(final BlockDamageEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.isJailed())
@@ -228,7 +228,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEntityDamageByEntity(final EntityDamageByEntityEvent event)
public void onJailEntityDamageByEntity(final EntityDamageByEntityEvent event)
{
if (event.getCause() != DamageCause.ENTITY_ATTACK || event.getEntity().getType() != EntityType.PLAYER)
{
@@ -246,7 +246,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerInteract(final PlayerInteractEvent event)
public void onJailPlayerInteract(final PlayerInteractEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.isJailed())
@@ -256,7 +256,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerRespawn(final PlayerRespawnEvent event)
public void onJailPlayerRespawn(final PlayerRespawnEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (!user.isJailed() || user.getJail() == null || user.getJail().isEmpty())
@@ -282,7 +282,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerTeleport(final PlayerTeleportEvent event)
public void onJailPlayerTeleport(final PlayerTeleportEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (!user.isJailed() || user.getJail() == null || user.getJail().isEmpty())
@@ -309,7 +309,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(final PlayerJoinEvent event)
public void onJailPlayerJoin(final PlayerJoinEvent event)
{
final User user = ess.getUser(event.getPlayer());
final long currentTime = System.currentTimeMillis();

View File

@@ -21,6 +21,24 @@ import org.bukkit.inventory.ItemStack;
public class Kit
{
final IEssentials ess;
final String kitName;
final Map<String, Object> kit;
final Trade charge;
public Kit(final String kitName, final IEssentials ess) throws Exception
{
this.kitName = kitName;
this.ess = ess;
this.kit = ess.getSettings().getKit(kitName);
this.charge = new Trade("kit-" + kitName, new Trade("kit-kit", ess), ess);
if (kit == null)
{
throw new Exception(tl("kitNotFound"));
}
}
//TODO: Convert this to use one of the new text classes?
public static String listKits(final IEssentials ess, final User user) throws Exception
{
@@ -43,9 +61,9 @@ public class Kit
{
cost = tl("kitCost", NumberUtil.displayCurrency(costPrice, ess));
}
final Map<String, Object> kit = ess.getSettings().getKit(kitItem);
if (Kit.getNextUse(user, kitItem, kit) != 0)
Kit kit = new Kit(kitItem, ess);
if (kit.getNextUse(user) != 0)
{
name = tl("kitDelay", name);
}
@@ -62,14 +80,26 @@ public class Kit
}
public static void checkTime(final User user, final String kitName, final Map<String, Object> els) throws Exception
public String getName()
{
final Calendar time = new GregorianCalendar();
long nextUse = getNextUse(user, kitName, els);
return kitName;
}
public void checkPerms(final User user) throws Exception
{
if (!user.isAuthorized("essentials.kits." + kitName))
{
throw new Exception(tl("noKitPermission", "essentials.kits." + kitName));
}
}
public void checkDelay(final User user) throws Exception
{
long nextUse = getNextUse(user);
if (nextUse == 0L)
{
user.setKitTimestamp(kitName, time.getTimeInMillis());
return;
}
else if (nextUse < 0L)
{
@@ -83,7 +113,23 @@ public class Kit
}
}
public static long getNextUse(final User user, final String kitName, final Map<String, Object> els) throws Exception
public void checkAffordable(final User user) throws Exception
{
charge.isAffordableFor(user);
}
public void setTime(final User user) throws Exception
{
final Calendar time = new GregorianCalendar();
user.setKitTimestamp(kitName, time.getTimeInMillis());
}
public void chargeUser(final User user) throws Exception
{
charge.charge(user);
}
public long getNextUse(final User user) throws Exception
{
if (user.isAuthorized("essentials.kit.exemptdelay"))
{
@@ -96,7 +142,7 @@ public class Kit
try
{
// Make sure delay is valid
delay = els.containsKey("delay") ? ((Number)els.get("delay")).doubleValue() : 0.0d;
delay = kit.containsKey("delay") ? ((Number)kit.get("delay")).doubleValue() : 0.0d;
}
catch (Exception e)
{
@@ -134,7 +180,7 @@ public class Kit
}
}
public static List<String> getItems(final IEssentials ess, final User user, final String kitName, final Map<String, Object> kit) throws Exception
public List<String> getItems(final User user) throws Exception
{
if (kit == null)
{
@@ -166,7 +212,12 @@ public class Kit
}
}
public static void expandItems(final IEssentials ess, final User user, final List<String> items) throws Exception
public void expandItems(final User user) throws Exception
{
expandItems(user, getItems(user));
}
public void expandItems(final User user, final List<String> items) throws Exception
{
try
{
@@ -187,11 +238,12 @@ public class Kit
final String[] parts = kitItem.split(" +");
final ItemStack parseStack = ess.getItemDb().get(parts[0], parts.length > 1 ? Integer.parseInt(parts[1]) : 1);
if (parseStack.getType() == Material.AIR) {
if (parseStack.getType() == Material.AIR)
{
continue;
}
final MetaItemStack metaStack = new MetaItemStack(parseStack);
if (parts.length > 2)
@@ -213,10 +265,12 @@ public class Kit
for (ItemStack itemStack : overfilled.values())
{
int spillAmount = itemStack.getAmount();
if (!allowOversizedStacks) {
itemStack.setAmount(spillAmount < itemStack.getMaxStackSize() ? spillAmount : itemStack.getMaxStackSize());
if (!allowOversizedStacks)
{
itemStack.setAmount(spillAmount < itemStack.getMaxStackSize() ? spillAmount : itemStack.getMaxStackSize());
}
while (spillAmount > 0) {
while (spillAmount > 0)
{
user.getWorld().dropItemNaturally(user.getLocation(), itemStack);
spillAmount -= itemStack.getAmount();
}

View File

@@ -128,7 +128,7 @@ public class MetaItemStack
public void parseStringMeta(final CommandSource sender, final boolean allowUnsafe, String[] string, int fromArg, final IEssentials ess) throws Exception
{
if (string[fromArg].startsWith("{"))
if (string[fromArg].startsWith("{") && hasMetaPermission(sender, "vanilla", false, true, ess))
{
try
{

View File

@@ -30,6 +30,7 @@ import org.bukkit.material.Colorable;
public enum MobData
{
BABY_AGEABLE("baby", Ageable.class, Data.BABY, true),
ADULT_AGEABLE("adult", Ageable.class, Data.ADULT, true),
BABY_PIG("piglet", EntityType.PIG, Data.BABY, false),
BABY_WOLF("puppy", EntityType.WOLF, Data.BABY, false),
BABY_CHICKEN("chick", EntityType.CHICKEN, Data.BABY, false),
@@ -83,6 +84,7 @@ public enum MobData
TUXEDO_CAT("tuxedo", EntityType.OCELOT, Ocelot.Type.BLACK_CAT, false),
VILLAGER_ZOMBIE("villager", EntityType.ZOMBIE.getEntityClass(), Data.VILLAGER, true),
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),
IRON_SWORD_ZOMBIE("ironsword", EntityType.ZOMBIE.getEntityClass(), Material.IRON_SWORD, true),
@@ -113,8 +115,10 @@ public enum MobData
public enum Data
{
ADULT,
BABY,
CHEST,
ADULTZOMBIE,
BABYZOMBIE,
VILLAGER,
HORSESADDLE,
@@ -214,10 +218,18 @@ public enum MobData
{
((Wolf)spawned).setAngry(true);
}
else if (this.value.equals(Data.ADULT))
{
((Ageable)spawned).setAdult();
}
else if (this.value.equals(Data.BABY))
{
((Ageable)spawned).setBaby();
}
else if (this.value.equals(Data.ADULTZOMBIE))
{
((Zombie)spawned).setBaby(false);
}
else if (this.value.equals(Data.BABYZOMBIE))
{
((Zombie)spawned).setBaby(true);

View File

@@ -1481,12 +1481,27 @@ public class OfflinePlayer implements Player
@Override
public boolean isBanned()
{
if (base.getName() == null && getName() != null)
{
return server.getBanList(BanList.Type.NAME).isBanned(getName());
}
return base.isBanned();
}
@Override
public void setBanned(boolean banned)
{
if (base.getName() == null && getName() != null)
{
if (banned)
{
server.getBanList(BanList.Type.NAME).addBan(getName(), null, null, null);
}
else
{
server.getBanList(BanList.Type.NAME).pardon(getName());
}
}
base.setBanned(banned);
}

View File

@@ -44,38 +44,43 @@ public class PlayerList
}
// Produce a user summary: There are 5 out of maximum 10 players online.
public static String listSummary(final IEssentials ess, final boolean showHidden)
public static String listSummary(final IEssentials ess, final User user, final boolean showHidden)
{
Server server = ess.getServer();
int playerHidden = 0;
for (Player onlinePlayer : server.getOnlinePlayers())
int hiddenCount = 0;
for (User onlinePlayer : ess.getOnlineUsers())
{
if (ess.getUser(onlinePlayer).isHidden())
if (onlinePlayer.isHidden() || (user != null && !user.getBase().canSee(onlinePlayer.getBase())))
{
playerHidden++;
if (showHidden || user.getBase().canSee(onlinePlayer.getBase()))
{
hiddenCount++;
}
}
}
String online;
if (showHidden && playerHidden > 0)
if (hiddenCount > 0)
{
online = tl("listAmountHidden", server.getOnlinePlayers().length - playerHidden, playerHidden, server.getMaxPlayers());
online = tl("listAmountHidden", ess.getOnlinePlayers().size() - playerHidden, hiddenCount, server.getMaxPlayers());
}
else
{
online = tl("listAmount", server.getOnlinePlayers().length - playerHidden, server.getMaxPlayers());
online = tl("listAmount", ess.getOnlinePlayers().size() - playerHidden, server.getMaxPlayers());
}
return online;
}
// Build the basic player list, divided by groups.
public static Map<String, List<User>> getPlayerLists(final IEssentials ess, final boolean showHidden)
public static Map<String, List<User>> getPlayerLists(final IEssentials ess, final User sender, final boolean showHidden)
{
Server server = ess.getServer();
final Map<String, List<User>> playerList = new HashMap<String, List<User>>();
for (Player onlinePlayer : server.getOnlinePlayers())
for (User onlineUser : ess.getOnlineUsers())
{
final User onlineUser = ess.getUser(onlinePlayer);
if (onlineUser.isHidden() && !showHidden)
if ((sender == null && !showHidden && onlineUser.isHidden()) ||
(sender != null && !showHidden && !sender.getBase().canSee(onlineUser.getBase())))
{
continue;
}

View File

@@ -100,35 +100,20 @@ public class Potions
POTIONS.put("wither", PotionEffectType.WITHER);
ALIASPOTIONS.put("decay", PotionEffectType.WITHER);
POTIONS.put("healthboost", PotionEffectType.HEALTH_BOOST);
ALIASPOTIONS.put("boost", PotionEffectType.HEALTH_BOOST);
try // 1.6 update
{
POTIONS.put("healthboost", PotionEffectType.HEALTH_BOOST);
ALIASPOTIONS.put("boost", PotionEffectType.HEALTH_BOOST);
POTIONS.put("absorption", PotionEffectType.ABSORPTION);
ALIASPOTIONS.put("absorb", PotionEffectType.ABSORPTION);
POTIONS.put("absorption", PotionEffectType.ABSORPTION);
ALIASPOTIONS.put("absorb", PotionEffectType.ABSORPTION);
POTIONS.put("saturation", PotionEffectType.SATURATION);
ALIASPOTIONS.put("food", PotionEffectType.SATURATION);
}
catch (java.lang.NoSuchFieldError e)
{
Essentials.wrongVersion();
}
POTIONS.put("saturation", PotionEffectType.SATURATION);
ALIASPOTIONS.put("food", PotionEffectType.SATURATION);
try // 1.7 update
{
POTIONS.put("waterbreathing", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("underwaterbreathing", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("waterbreath", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("underwaterbreath", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("air", PotionEffectType.WATER_BREATHING);
}
catch (java.lang.NoSuchFieldError e)
{
Essentials.wrongVersion();
}
POTIONS.put("waterbreathing", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("underwaterbreathing", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("waterbreath", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("underwaterbreath", PotionEffectType.WATER_BREATHING);
ALIASPOTIONS.put("air", PotionEffectType.WATER_BREATHING);
}
public static PotionEffectType getByName(String name)

View File

@@ -51,7 +51,8 @@ public class Settings implements net.ess3.api.ISettings
@Override
public Set<String> getMultipleHomes()
{
return config.getConfigurationSection("sethome-multiple").getKeys(false);
final ConfigurationSection section = config.getConfigurationSection("sethome-multiple");
return section == null ? null : section.getKeys(false);
}
@Override
@@ -94,7 +95,6 @@ public class Settings implements net.ess3.api.ISettings
{
return chatRadius;
}
// #easteregg
private char chatShout = '!';
@@ -108,7 +108,6 @@ public class Settings implements net.ess3.api.ISettings
{
return chatShout;
}
// #easteregg
private char chatQuestion = '?';
@@ -122,7 +121,6 @@ public class Settings implements net.ess3.api.ISettings
{
return chatQuestion;
}
private boolean teleportSafety;
public boolean _isTeleportSafetyEnabled()
@@ -559,11 +557,12 @@ public class Settings implements net.ess3.api.ISettings
mailsPerMinute = _getMailsPerMinute();
maxMoney = _getMaxMoney();
minMoney = _getMinMoney();
permissionsLagWarning = _getPermissionsLagWarning();
economyLagWarning = _getEconomyLagWarning();
economyLog = _isEcoLogEnabled();
economyLogUpdate = _isEcoLogUpdateEnabled();
economyDisabled = _isEcoDisabled();
allowSilentJoin = _isJoinQuitMessagesDisabled();
allowSilentJoin = _allowSilentJoinQuit();
customJoinMessage = _getCustomJoinMessage();
isCustomJoinMessage = !customJoinMessage.equals("none");
customQuitMessage = _getCustomQuitMessage();
@@ -1139,8 +1138,8 @@ public class Settings implements net.ess3.api.ISettings
private long _getEconomyLagWarning()
{
// Default to 20ms
final long value = (long)(config.getDouble("economy-lag-warning", 20.0) * 1000000);
// Default to 25ms
final long value = (long)(config.getDouble("economy-lag-warning", 25.0) * 1000000);
return value;
}
@@ -1149,6 +1148,22 @@ public class Settings implements net.ess3.api.ISettings
{
return economyLagWarning;
}
// #easteregg
private long permissionsLagWarning;
private long _getPermissionsLagWarning()
{
// Default to 25ms
final long value = (long)(config.getDouble("permissions-lag-warning", 25.0) * 1000000);
return value;
}
@Override
public long getPermissionsLagWarning()
{
return permissionsLagWarning;
}
@Override
public long getMaxTempban()
@@ -1163,9 +1178,9 @@ public class Settings implements net.ess3.api.ISettings
}
private boolean allowSilentJoin;
public boolean _isJoinQuitMessagesDisabled()
public boolean _allowSilentJoinQuit()
{
return config.getBoolean("allow-silent-join-quit");
return config.getBoolean("allow-silent-join-quit", false);
}
@Override

View File

@@ -216,6 +216,15 @@ public class SpawnMob
{
sender.sendMessage(tl("mobDataList", StringUtil.joinList(MobData.getValidHelp(spawned))));
}
if (spawned instanceof Zombie)
{
((Zombie)spawned).setBaby(false);
}
else if(spawned instanceof Ageable)
{
((Ageable)spawned).setAdult();
}
if (spawned instanceof Zombie || type == EntityType.SKELETON)
{
@@ -285,7 +294,10 @@ public class SpawnMob
if (type == EntityType.PIG_ZOMBIE)
{
final EntityEquipment invent = ((LivingEntity)spawned).getEquipment();
final PigZombie zombie = ((PigZombie)spawned);
zombie.setVillager(false);
final EntityEquipment invent = zombie.getEquipment();
invent.setItemInHand(new ItemStack(Material.GOLD_SWORD, 1));
invent.setItemInHandDropChance(0.1f);
@@ -295,7 +307,10 @@ public class SpawnMob
if (type == EntityType.ZOMBIE)
{
final EntityEquipment invent = ((LivingEntity)spawned).getEquipment();
final Zombie zombie = ((Zombie)spawned);
zombie.setVillager(false);
final EntityEquipment invent = zombie.getEquipment();
invent.setBoots(new ItemStack(Material.GOLD_BOOTS, 1));
invent.setBootsDropChance(0.0f);
}

View File

@@ -102,7 +102,7 @@ public class Teleport implements net.ess3.api.ITeleport
teleportee.setLastLocation();
final Location loc = target.getLocation();
if (LocationUtil.isBlockUnsafe(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()))
if (LocationUtil.isBlockUnsafeForUser(teleportee, loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()))
{
if (ess.getSettings().isTeleportSafetyEnabled())
{
@@ -147,8 +147,8 @@ public class Teleport implements net.ess3.api.ITeleport
public void teleport(Player entity, Trade chargeFor, TeleportCause cause) throws Exception
{
ITarget target = new PlayerTarget(entity);
teleportOwner.sendMessage(tl("teleportToPlayer", entity.getDisplayName()));
teleport(teleportOwner, target, chargeFor, cause);
teleportOwner.sendMessage(tl("teleporting", target.getLocation().getWorld().getName(), target.getLocation().getBlockX(), target.getLocation().getBlockY(), target.getLocation().getBlockZ()));
}
//This is used when teleporting to stored location
@@ -177,7 +177,7 @@ public class Teleport implements net.ess3.api.ITeleport
if (chargeFor != null)
{
chargeFor.isAffordableFor(teleportOwner);
//This code is to make sure that commandcosts are checked in the initial world, and not in the resulting world.
if (!chargeFor.getCommandCost(teleportOwner).equals(BigDecimal.ZERO))
{
@@ -256,6 +256,10 @@ public class Teleport implements net.ess3.api.ITeleport
{
Location loc = ess.getWarps().getWarp(warp);
teleportee.sendMessage(tl("warpingTo", warp, loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
if (!teleportee.equals(teleportOwner))
{
teleportOwner.sendMessage(tl("warpingTo", warp, loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
}
teleport(teleportee, new LocationTarget(loc), chargeFor, cause);
}

View File

@@ -1,6 +1,7 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n.tl;
import java.util.UUID;
import net.ess3.api.IEssentials;
import net.ess3.api.IUser;
import org.bukkit.Location;
@@ -13,7 +14,7 @@ public class TimedTeleport implements Runnable
private final IUser teleportOwner;
private final IEssentials ess;
private final Teleport teleport;
private final String timer_teleportee;
private final UUID timer_teleportee;
private int timer_task = -1;
private final long timer_started; // time this task was initiated
private final long timer_delay; // how long to delay the teleportPlayer
@@ -42,14 +43,14 @@ public class TimedTeleport implements Runnable
this.timer_initX = Math.round(teleportUser.getBase().getLocation().getX() * MOVE_CONSTANT);
this.timer_initY = Math.round(teleportUser.getBase().getLocation().getY() * MOVE_CONSTANT);
this.timer_initZ = Math.round(teleportUser.getBase().getLocation().getZ() * MOVE_CONSTANT);
this.timer_teleportee = teleportUser.getName();
this.timer_teleportee = teleportUser.getBase().getUniqueId();
this.timer_teleportTarget = target;
this.timer_chargeFor = chargeFor;
this.timer_cause = cause;
this.timer_respawn = respawn;
this.timer_canMove = user.isAuthorized("essentials.teleport.timer.move");
timer_task = ess.scheduleSyncRepeatingTask(this, 20, 20);
timer_task = ess.runTaskTimerAsynchronously(this, 20, 20).getTaskId();
}
@Override
@@ -62,7 +63,7 @@ public class TimedTeleport implements Runnable
return;
}
IUser teleportUser = ess.getUser(this.timer_teleportee);
final IUser teleportUser = ess.getUser(this.timer_teleportee);
if (teleportUser == null || !teleportUser.getBase().isOnline())
{
@@ -88,49 +89,65 @@ public class TimedTeleport implements Runnable
return;
}
timer_health = teleportUser.getBase().getHealth(); // in case user healed, then later gets injured
final long now = System.currentTimeMillis();
if (now > timer_started + timer_delay)
class DelayedTeleportTask implements Runnable
{
try
@Override
public void run()
{
teleport.cooldown(false);
}
catch (Exception ex)
{
teleportOwner.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
if (teleportOwner != teleportUser)
{
teleportUser.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
}
}
try
{
cancelTimer(false);
teleportUser.sendMessage(tl("teleportationCommencing"));
if (timer_chargeFor != null)
{
timer_chargeFor.isAffordableFor(teleportOwner);
}
if (timer_respawn)
{
teleport.respawnNow(teleportUser, timer_cause);
}
else
{
teleport.now(teleportUser, timer_teleportTarget, timer_cause);
}
if (timer_chargeFor != null)
{
timer_chargeFor.charge(teleportOwner);
}
}
catch (Exception ex)
{
ess.showError(teleportOwner.getSource(), ex, "\\ teleport");
}
timer_health = teleportUser.getBase().getHealth(); // in case user healed, then later gets injured
final long now = System.currentTimeMillis();
if (now > timer_started + timer_delay)
{
try
{
teleport.cooldown(false);
}
catch (Exception ex)
{
teleportOwner.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
if (teleportOwner != teleportUser)
{
teleportUser.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
}
}
try
{
cancelTimer(false);
teleportUser.sendMessage(tl("teleportationCommencing"));
try
{
if (timer_chargeFor != null)
{
timer_chargeFor.isAffordableFor(teleportOwner);
}
if (timer_respawn)
{
teleport.respawnNow(teleportUser, timer_cause);
}
else
{
teleport.now(teleportUser, timer_teleportTarget, timer_cause);
}
if (timer_chargeFor != null)
{
timer_chargeFor.charge(teleportOwner);
}
}
catch (Exception ex)
{
}
}
catch (Exception ex)
{
ess.showError(teleportOwner.getSource(), ex, "\\ teleport");
}
}
}
}
ess.scheduleSyncDelayedTask(new DelayedTeleportTask());
}
//If we need to cancelTimer a pending teleportPlayer call this method
@@ -146,7 +163,7 @@ public class TimedTeleport implements Runnable
if (notifyUser)
{
teleportOwner.sendMessage(tl("pendingTeleportCancelled"));
if (timer_teleportee != null && !timer_teleportee.equals(teleportOwner.getName()))
if (timer_teleportee != null && !timer_teleportee.equals(teleportOwner.getBase().getUniqueId()))
{
ess.getUser(timer_teleportee).sendMessage(tl("pendingTeleportCancelled"));
}

View File

@@ -3,6 +3,7 @@ package com.earth2me.essentials;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import com.earth2me.essentials.craftbukkit.SetExpFix;
import com.earth2me.essentials.utils.NumberUtil;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@@ -28,7 +29,7 @@ public class Trade
private final transient BigDecimal money;
private final transient ItemStack itemStack;
private final transient Integer exp;
private final transient com.earth2me.essentials.IEssentials ess;
private final transient IEssentials ess;
public enum TradeType
@@ -59,7 +60,7 @@ public class Trade
@Deprecated
public Trade(final double money, final com.earth2me.essentials.IEssentials ess)
{
this(null, null, BigDecimal.valueOf(money), null, null, ess);
this(null, null, BigDecimal.valueOf(money), null, null, (IEssentials)ess);
}
public Trade(final BigDecimal money, final IEssentials ess)
@@ -77,7 +78,7 @@ public class Trade
this(null, null, null, null, exp, ess);
}
private Trade(final String command, final Trade fallback, final BigDecimal money, final ItemStack item, final Integer exp, final com.earth2me.essentials.IEssentials ess)
private Trade(final String command, final Trade fallback, final BigDecimal money, final ItemStack item, final Integer exp, final IEssentials ess)
{
this.command = command;
this.fallbackTrade = fallback;
@@ -99,7 +100,7 @@ public class Trade
&& getMoney().signum() > 0
&& !user.canAfford(getMoney()))
{
throw new ChargeException(tl("notEnoughMoney"));
throw new ChargeException(tl("notEnoughMoney", NumberUtil.displayCurrency(getMoney(), ess)));
}
if (getItemStack() != null
@@ -113,7 +114,7 @@ public class Trade
&& (money = getCommandCost(user)).signum() > 0
&& !user.canAfford(money))
{
throw new ChargeException(tl("notEnoughMoney"));
throw new ChargeException(tl("notEnoughMoney", NumberUtil.displayCurrency(money, ess)));
}
if (exp != null && exp > 0
@@ -223,7 +224,7 @@ public class Trade
}
if (!user.canAfford(getMoney()) && getMoney().signum() > 0)
{
throw new ChargeException(tl("notEnoughMoney"));
throw new ChargeException(tl("notEnoughMoney", NumberUtil.displayCurrency(getMoney(), ess)));
}
user.takeMoney(getMoney());
}
@@ -245,7 +246,7 @@ public class Trade
final BigDecimal cost = getCommandCost(user);
if (!user.canAfford(cost) && cost.signum() > 0)
{
throw new ChargeException(tl("notEnoughMoney"));
throw new ChargeException(tl("notEnoughMoney", NumberUtil.displayCurrency(cost, ess)));
}
user.takeMoney(cost);
}

View File

@@ -45,45 +45,56 @@ public class UUIDMap
userList.createNewFile();
}
final BufferedReader reader = new BufferedReader(new FileReader(userList));
try
synchronized (pendingDiskWrites)
{
while (true)
if (ess.getSettings().isDebug())
{
final String line = reader.readLine();
if (line == null)
ess.getLogger().log(Level.INFO, "Reading usermap from disk");
}
names.clear();
history.clear();
final BufferedReader reader = new BufferedReader(new FileReader(userList));
try
{
while (true)
{
break;
}
else
{
final String[] values = splitPattern.split(line);
if (values.length == 2)
final String line = reader.readLine();
if (line == null)
{
final String name = values[0];
final UUID uuid = UUID.fromString(values[1]);
names.put(name, uuid);
if (!history.containsKey(uuid))
break;
}
else
{
final String[] values = splitPattern.split(line);
if (values.length == 2)
{
final ArrayList<String> list = new ArrayList<String>();
list.add(name);
history.put(uuid, list);
}
else
{
final ArrayList<String> list = history.get(uuid);
if (!list.contains(name))
final String name = values[0];
final UUID uuid = UUID.fromString(values[1]);
names.put(name, uuid);
if (!history.containsKey(uuid))
{
final ArrayList<String> list = new ArrayList<String>();
list.add(name);
history.put(uuid, list);
}
else
{
final ArrayList<String> list = history.get(uuid);
if (!list.contains(name))
{
list.add(name);
}
}
}
}
}
}
}
finally
{
reader.close();
finally
{
reader.close();
}
}
}
catch (IOException ex)
@@ -99,6 +110,10 @@ public class UUIDMap
public void forceWriteUUIDMap()
{
if (ess.getSettings().isDebug())
{
ess.getLogger().log(Level.INFO, "Forcing usermap write to disk");
}
try
{
Future<?> future = _writeUUIDMap();;
@@ -119,7 +134,7 @@ public class UUIDMap
public Future<?> _writeUUIDMap()
{
final ConcurrentSkipListMap<String, UUID> names = ess.getUserMap().getNames().clone();
final ConcurrentSkipListMap<String, UUID> names = ess.getUserMap().getNames();
if (names.size() < 1)
{
return null;

View File

@@ -10,6 +10,7 @@ import com.earth2me.essentials.utils.NumberUtil;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.ess3.api.IEssentials;
@@ -28,7 +29,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
{
private static final Logger logger = Logger.getLogger("Essentials");
private CommandSource replyTo = null;
private transient String teleportRequester;
private transient UUID teleportRequester;
private transient boolean teleportRequestHere;
private transient Location teleportLocation;
private transient boolean vanished;
@@ -171,7 +172,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
}
else
{
throw new ChargeException(tl("notEnoughMoney"));
throw new ChargeException(tl("notEnoughMoney", NumberUtil.displayCurrency(value, ess)));
}
}
@@ -194,7 +195,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
}
catch (MaxMoneyException ex)
{
//We shouldn't be able to throw an exception on subtract money
ess.getLogger().log(Level.WARNING, "Invalid call to takeMoney, total balance can't be more than the max-money limit.", ex);
}
sendMessage(tl("takenFromAccount", NumberUtil.displayCurrency(value, ess)));
if (initiator != null)
@@ -237,7 +238,11 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
private void _dispose()
{
this.base = new OfflinePlayer(base.getUniqueId(), ess.getServer());
if (!base.isOnline())
{
this.base = new OfflinePlayer(getConfigUUID(), ess.getServer());
}
cleanup();
}
@Override
@@ -262,7 +267,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
public void requestTeleport(final User player, final boolean here)
{
teleportRequestTime = System.currentTimeMillis();
teleportRequester = player == null ? null : player.getName();
teleportRequester = player == null ? null : player.getBase().getUniqueId();
teleportRequestHere = here;
if (player == null)
{
@@ -274,7 +279,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
}
}
public String getTeleportRequest()
public UUID getTeleportRequest()
{
return teleportRequester;
}
@@ -295,10 +300,13 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
String nickname;
String suffix = "";
final String nick = getNickname();
if (ess.getSettings().isCommandDisabled("nick") || nick == null || nick.isEmpty() || nick.equalsIgnoreCase(getName()))
if (ess.getSettings().isCommandDisabled("nick") || nick == null || nick.isEmpty() || nick.equals(getName()))
{
nickname = getName();
}
else if (nick.equalsIgnoreCase(getName())) {
nickname = nick;
}
else
{
nickname = ess.getSettings().getNicknamePrefix() + nick;
@@ -529,6 +537,11 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
{
return hidden;
}
public boolean isHidden(final Player player)
{
return hidden || !player.canSee(getBase());
}
@Override
public void setHidden(final boolean hidden)
@@ -581,18 +594,6 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
return false;
}
//Returns true if status expired during this check
public boolean checkBanTimeout(final long currentTime)
{
if (getBanTimeout() > 0 && getBanTimeout() < currentTime && this.getBase().isBanned())
{
setBanTimeout(0);
this.getBase().setBanned(false);
return true;
}
return false;
}
public void updateActivity(final boolean broadcast)
{
if (isAfk() && ess.getSettings().cancelAfkOnInteract())
@@ -622,9 +623,8 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
this.getBase().kickPlayer(kickReason);
for (Player player : ess.getServer().getOnlinePlayers())
for (User user : ess.getOnlineUsers())
{
final User user = ess.getUser(player);
if (user.isAuthorized("essentials.kick.notify"))
{
user.sendMessage(tl("playerKicked", Console.NAME, getName(), kickReason));
@@ -746,6 +746,11 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
{
return teleportInvulnerabilityTimestamp != 0 && teleportInvulnerabilityTimestamp >= System.currentTimeMillis();
}
public boolean canInteractVanished()
{
return isAuthorized("essentials.vanish.interact");
}
@Override
public boolean isVanished()
@@ -759,11 +764,11 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
vanished = set;
if (set)
{
for (Player p : ess.getServer().getOnlinePlayers())
for (User user : ess.getOnlineUsers())
{
if (!ess.getUser(p).isAuthorized("essentials.vanish.see"))
if (!user.isAuthorized("essentials.vanish.see"))
{
p.hidePlayer(getBase());
user.getBase().hidePlayer(getBase());
}
}
setHidden(true);
@@ -775,7 +780,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
}
else
{
for (Player p : ess.getServer().getOnlinePlayers())
for (Player p : ess.getOnlinePlayers())
{
p.showPlayer(getBase());
}

View File

@@ -50,7 +50,15 @@ public abstract class UserData extends PlayerExtension implements IConf
{
config.forceSave();
config.getFile().delete();
ess.getUserMap().removeUser(this.getBase().getName());
if (config.username != null)
{
ess.getUserMap().removeUser(config.username);
}
}
public final void cleanup()
{
config.cleanup();
}
@Override
@@ -116,23 +124,26 @@ public abstract class UserData extends PlayerExtension implements IConf
public void setMoney(BigDecimal value, boolean throwError) throws MaxMoneyException
{
money = value;
BigDecimal maxMoney = ess.getSettings().getMaxMoney();
BigDecimal minMoney = ess.getSettings().getMinMoney();
if (money.compareTo(maxMoney) > 0)
if (value.compareTo(maxMoney) > 0)
{
money = maxMoney;
if (throwError)
{
throw new MaxMoneyException();
}
money = maxMoney;
}
else
{
money = value;
}
if (money.compareTo(minMoney) < 0)
{
money = minMoney;
}
config.setProperty("money", money);
config.save();
stopTransaction();
}
private Map<String, Object> homes;
@@ -656,27 +667,6 @@ public abstract class UserData extends PlayerExtension implements IConf
config.save();
}
public String getBanReason()
{
return config.getString("ban.reason", "");
}
public void setBanReason(String reason)
{
config.setProperty("ban.reason", StringUtil.sanitizeString(reason));
config.save();
}
public long getBanTimeout()
{
return config.getLong("ban.timeout", 0);
}
public void setBanTimeout(long time)
{
config.setProperty("ban.timeout", time);
config.save();
}
private long lastLogin;
private long _getLastLogin()
@@ -830,7 +820,7 @@ public abstract class UserData extends PlayerExtension implements IConf
this.lastAccountName = lastAccountName;
config.setProperty("lastAccountName", lastAccountName);
config.save();
ess.getUserMap().trackUUID(base.getUniqueId(), lastAccountName);
ess.getUserMap().trackUUID(getConfigUUID(), lastAccountName, true);
}
public void setNPC(boolean set)
@@ -960,8 +950,23 @@ public abstract class UserData extends PlayerExtension implements IConf
return new HashMap<String, Object>();
}
public UUID getConfigUUID()
{
return config.uuid;
}
public void save()
{
config.save();
}
public void startTransaction()
{
config.startTransaction();
}
public void stopTransaction()
{
config.stopTransaction();
}
}

View File

@@ -4,6 +4,9 @@ import com.earth2me.essentials.utils.StringUtil;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.RemovalCause;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
import com.google.common.util.concurrent.UncheckedExecutionException;
import java.io.File;
import java.util.ArrayList;
@@ -15,14 +18,13 @@ import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.ExecutionException;
import net.ess3.api.IEssentials;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class UserMap extends CacheLoader<UUID, User> implements IConf
public class UserMap extends CacheLoader<String, User> implements IConf
{
private final transient IEssentials ess;
private final transient Cache<UUID, User> users;
private final transient Cache<String, User> users;
private final transient ConcurrentSkipListSet<UUID> keys = new ConcurrentSkipListSet<UUID>();
private final transient ConcurrentSkipListMap<String, UUID> names = new ConcurrentSkipListMap<String, UUID>();
private final transient ConcurrentSkipListMap<UUID, ArrayList<String>> history = new ConcurrentSkipListMap<UUID, ArrayList<String>>();
@@ -33,6 +35,8 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
super();
this.ess = ess;
uuidMap = new UUIDMap(ess);
//RemovalListener<UUID, User> remListener = new UserMapRemovalListener();
//users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().removalListener(remListener).build(this);
users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().build(this);
}
@@ -51,7 +55,6 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
return;
}
keys.clear();
names.clear();
users.invalidateAll();
for (String string : userdir.list())
{
@@ -84,37 +87,23 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
{
try
{
final String sanitizedName = StringUtil.sanitizeFileName(name);
final String sanitizedName = StringUtil.safeString(name);
if (names.containsKey(sanitizedName))
{
final UUID uuid = names.get(sanitizedName);
return users.get(uuid);
}
for (Player player : ess.getServer().getOnlinePlayers())
{
String sanitizedPlayer = StringUtil.sanitizeFileName(player.getName());
if (sanitizedPlayer.equalsIgnoreCase(sanitizedName))
{
User user = new User(player, ess);
trackUUID(user.getBase().getUniqueId(), user.getName());
return new User(player, ess);
}
return getUser(uuid);
}
final File userFile = getUserFileFromString(sanitizedName);
if (userFile.exists())
{
ess.getLogger().info("Importing user " + name + " to usermap.");
User user = new User(new OfflinePlayer(sanitizedName, ess.getServer()), ess);
trackUUID(user.getBase().getUniqueId(), user.getName());
trackUUID(user.getBase().getUniqueId(), user.getName(), true);
return user;
}
return null;
}
catch (ExecutionException ex)
{
return null;
}
catch (UncheckedExecutionException ex)
{
return null;
@@ -125,7 +114,7 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
{
try
{
return users.get(uuid);
return users.get(uuid.toString());
}
catch (ExecutionException ex)
{
@@ -137,31 +126,48 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
}
}
public void trackUUID(final UUID uuid, final String name)
public void trackUUID(final UUID uuid, final String name, boolean replace)
{
if (uuid != null)
{
keys.add(uuid);
if (name != null && name.length() > 0)
{
final String keyName = StringUtil.sanitizeFileName(name);
if (!names.containsKey(keyName) || !names.get(keyName).equals(uuid))
final String keyName = StringUtil.safeString(name);
if (!names.containsKey(keyName))
{
names.put(keyName, uuid);
uuidMap.writeUUIDMap();
}
else if (!names.get(keyName).equals(uuid))
{
if (replace)
{
ess.getLogger().info("Found new UUID for " + name + ". Replacing " + names.get(keyName).toString() + " with " + uuid.toString());
names.put(keyName, uuid);
uuidMap.writeUUIDMap();
}
else
{
if (ess.getSettings().isDebug())
{
ess.getLogger().info("Found old UUID for " + name + " (" + uuid.toString() + "). Not adding to usermap.");
}
}
}
}
}
}
@Override
public User load(final UUID uuid) throws Exception
public User load(final String stringUUID) throws Exception
{
UUID uuid = UUID.fromString(stringUUID);
Player player = ess.getServer().getPlayer(uuid);
if (player != null)
{
final User user = new User(player, ess);
trackUUID(uuid, user.getName());
trackUUID(uuid, user.getName(), true);
return user;
}
@@ -172,7 +178,7 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
player = new OfflinePlayer(uuid, ess.getServer());
final User user = new User(player, ess);
((OfflinePlayer)player).setName(user.getLastAccountName());
trackUUID(uuid, user.getName());
trackUUID(uuid, user.getName(), false);
return user;
}
@@ -186,8 +192,18 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
loadAllUsersAsync(ess);
}
public void invalidateAll()
{
users.invalidateAll();
}
public void removeUser(final String name)
{
if (names == null)
{
ess.getLogger().warning("Name collection is null, cannot remove user.");
return;
}
UUID uuid = names.get(name);
if (uuid != null)
{
@@ -195,12 +211,12 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
users.invalidate(uuid);
}
names.remove(name);
names.remove(StringUtil.sanitizeFileName(name));
names.remove(StringUtil.safeString(name));
}
public Set<UUID> getAllUniqueUsers()
{
return Collections.unmodifiableSet(keys);
return Collections.unmodifiableSet(keys.clone());
}
public int getUniqueUsers()
@@ -208,12 +224,12 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
return keys.size();
}
public ConcurrentSkipListMap<String, UUID> getNames()
protected ConcurrentSkipListMap<String, UUID> getNames()
{
return names;
}
public ConcurrentSkipListMap<UUID, ArrayList<String>> getHistory()
protected ConcurrentSkipListMap<UUID, ArrayList<String>> getHistory()
{
return history;
}
@@ -239,4 +255,16 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
final File userFolder = new File(ess.getDataFolder(), "userdata");
return new File(userFolder, StringUtil.sanitizeFileName(name) + ".yml");
}
// class UserMapRemovalListener implements RemovalListener
// {
// @Override
// public void onRemoval(final RemovalNotification notification)
// {
// Object value = notification.getValue();
// if (value != null)
// {
// ((User)value).cleanup();
// }
// }
// }
}

View File

@@ -3,6 +3,7 @@ package com.earth2me.essentials.api;
import com.earth2me.essentials.EssentialsConf;
import com.earth2me.essentials.EssentialsUserConf;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import static com.earth2me.essentials.api.Economy.add;
import static com.earth2me.essentials.api.Economy.divide;
@@ -51,6 +52,7 @@ public class Economy
private static void createNPCFile(String name)
{
File folder = new File(ess.getDataFolder(), "userdata");
name = StringUtil.safeString(name);
if (!folder.exists())
{
folder.mkdirs();
@@ -62,7 +64,7 @@ public class Economy
npcConfig.setProperty("lastAccountName", name);
npcConfig.setProperty("money", ess.getSettings().getStartingBalance());
npcConfig.forceSave();
ess.getUserMap().trackUUID(npcUUID, name);
ess.getUserMap().trackUUID(npcUUID, name, false);
}
private static void deleteNPC(String name)
@@ -77,6 +79,10 @@ public class Economy
{
throw new RuntimeException(noCallBeforeLoad);
}
if (name == null)
{
throw new RuntimeException("Economy username cannot be null");
}
return ess.getUser(name);
}
@@ -147,6 +153,7 @@ public class Economy
{
//TODO: Update API to show max balance errors
}
Trade.log("API", "Set", "API", name, new Trade(balance, ess), null, null, null, ess);
}
/**
@@ -174,6 +181,7 @@ public class Economy
{
BigDecimal result = getMoneyExact(name).add(amount, MATH_CONTEXT);
setMoney(name, result);
Trade.log("API", "Add", "API", name, new Trade(amount, ess), null, null, null, ess);
}
/**
@@ -201,6 +209,7 @@ public class Economy
{
BigDecimal result = getMoneyExact(name).subtract(amount, MATH_CONTEXT);
setMoney(name, result);
Trade.log("API", "Subtract", "API", name, new Trade(amount, ess), null, null, null, ess);
}
/**
@@ -228,6 +237,7 @@ public class Economy
{
BigDecimal result = getMoneyExact(name).divide(amount, MATH_CONTEXT);
setMoney(name, result);
Trade.log("API", "Divide", "API", name, new Trade(amount, ess), null, null, null, ess);
}
/**
@@ -255,6 +265,7 @@ public class Economy
{
BigDecimal result = getMoneyExact(name).multiply(amount, MATH_CONTEXT);
setMoney(name, result);
Trade.log("API", "Multiply", "API", name, new Trade(amount, ess), null, null, null, ess);
}
/**
@@ -271,6 +282,7 @@ public class Economy
throw new RuntimeException(noCallBeforeLoad);
}
setMoney(name, ess.getSettings().getStartingBalance());
Trade.log("API", "Reset", "API", name, new Trade(BigDecimal.ZERO, ess), null, null, null, ess);
}
/**
@@ -450,4 +462,3 @@ public class Economy
deleteNPC(name);
}
}

View File

@@ -53,7 +53,7 @@ public class Commandbalancetop extends EssentialsCommand
{
if (cacheage > System.currentTimeMillis() - CACHETIME)
{
outputCache(sender, page);
outputCache(sender, commandLabel, page);
return;
}
if (ess.getUserMap().getUniqueUsers() > MINUSERS)
@@ -65,7 +65,7 @@ public class Commandbalancetop extends EssentialsCommand
{
lock.readLock().unlock();
}
ess.runTaskAsynchronously(new Viewer(sender, page, force));
ess.runTaskAsynchronously(new Viewer(sender, commandLabel, page, force));
}
else
{
@@ -73,12 +73,12 @@ public class Commandbalancetop extends EssentialsCommand
{
sender.sendMessage(tl("orderBalances", ess.getUserMap().getUniqueUsers()));
}
ess.runTaskAsynchronously(new Viewer(sender, page, force));
ess.runTaskAsynchronously(new Viewer(sender, commandLabel, page, force));
}
}
private static void outputCache(final CommandSource sender, int page)
private static void outputCache(final CommandSource sender, String command, int page)
{
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(cacheage);
@@ -167,12 +167,14 @@ public class Commandbalancetop extends EssentialsCommand
private final transient CommandSource sender;
private final transient int page;
private final transient boolean force;
private final transient String commandLabel;
public Viewer(final CommandSource sender, final int page, final boolean force)
public Viewer(final CommandSource sender, final String commandLabel, final int page, final boolean force)
{
this.sender = sender;
this.page = page;
this.force = force;
this.commandLabel = commandLabel;
}
@Override
@@ -183,7 +185,7 @@ public class Commandbalancetop extends EssentialsCommand
{
if (!force && cacheage > System.currentTimeMillis() - CACHETIME)
{
outputCache(sender, page);
outputCache(sender, commandLabel, page);
return;
}
}
@@ -191,7 +193,7 @@ public class Commandbalancetop extends EssentialsCommand
{
lock.readLock().unlock();
}
ess.runTaskAsynchronously(new Calculator(new Viewer(sender, page, false), force));
ess.runTaskAsynchronously(new Calculator(new Viewer(sender, commandLabel, page, false), force));
}
}
}

View File

@@ -7,6 +7,8 @@ import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.FormatUtil;
import java.util.logging.Level;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.Server;
@@ -60,13 +62,13 @@ public class Commandban extends EssentialsCommand
{
banReason = tl("defaultBanReason");
}
ess.getServer().getBanList(BanList.Type.NAME).addBan(user.getName(), banReason, null, senderName);
user.setBanReason(tl("banFormat", banReason, senderName));
user.getBase().setBanned(true);
user.setBanTimeout(0);
user.getBase().kickPlayer(tl("banFormat", banReason, senderName));
server.getLogger().log(Level.INFO, tl("playerBanned", senderName, user.getName(), banReason));
String banDisplay = tl("banFormat", banReason, senderName);
user.getBase().kickPlayer(banDisplay);
server.getLogger().log(Level.INFO, tl("playerBanned", senderName, user.getName(), banDisplay));
if (nomatch)
{

View File

@@ -6,9 +6,12 @@ import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.FormatUtil;
import java.util.logging.Level;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.Server;
//TODO: Add kick to online players matching ip ban.
public class Commandbanip extends EssentialsCommand
{
public Commandbanip()
@@ -49,9 +52,19 @@ public class Commandbanip extends EssentialsCommand
throw new PlayerNotFoundException();
}
ess.getServer().banIP(ipAddress);
server.getLogger().log(Level.INFO, tl("playerBanIpAddress", senderName, ipAddress));
String banReason;
if (args.length > 1)
{
banReason = FormatUtil.replaceFormat(getFinalArg(args, 1).replace("\\n", "\n").replace("|", "\n"));
}
else
{
banReason = tl("defaultBanReason");
}
ess.broadcastMessage("essentials.ban.notify", tl("playerBanIpAddress", senderName, ipAddress));
ess.getServer().getBanList(BanList.Type.IP).addBan(ipAddress, banReason, null, senderName);
server.getLogger().log(Level.INFO, tl("playerBanIpAddress", senderName, ipAddress, banReason));
ess.broadcastMessage("essentials.ban.notify", tl("playerBanIpAddress", senderName, ipAddress, banReason));
}
}

View File

@@ -5,8 +5,7 @@ import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.NumberUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collection;
import java.util.Locale;
import org.bukkit.Server;
import org.bukkit.entity.Player;
@@ -36,7 +35,7 @@ public class Commandclearinventory extends EssentialsCommand
private void parseCommand(Server server, CommandSource sender, String[] args, boolean allowOthers, boolean allowAll) throws Exception
{
List<Player> players = new ArrayList<Player>();
Collection<Player> players = new ArrayList<Player>();
int offset = 0;
if (sender.isPlayer())
@@ -48,7 +47,7 @@ public class Commandclearinventory extends EssentialsCommand
{
sender.sendMessage(tl("inventoryClearingFromAll"));
offset = 1;
players = Arrays.asList(server.getOnlinePlayers());
players = ess.getOnlinePlayers();
}
else if (allowOthers && args.length > 0 && args[0].trim().length() > 2)
{

View File

@@ -0,0 +1,221 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n.tl;
import java.util.*;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.Recipe;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.ShapelessRecipe;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.Trade.OverflowType;
import com.earth2me.essentials.User;
import net.ess3.api.MaxMoneyException;
public class Commandcondense extends EssentialsCommand
{
public Commandcondense()
{
super("condense");
}
private Map<ItemStack, SimpleRecipe> condenseList = new HashMap<ItemStack, SimpleRecipe>();
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
List<ItemStack> is = new ArrayList<ItemStack>();
boolean validateReverse = false;
if (args.length > 0)
{
is = ess.getItemDb().getMatching(user, args);
}
else
{
for (ItemStack stack : user.getBase().getInventory().getContents())
{
if (stack == null || stack.getType() == Material.AIR)
{
continue;
}
is.add(stack);
}
validateReverse = true;
}
boolean didConvert = false;
for (final ItemStack itemStack : is)
{
if (condenseStack(user, itemStack, validateReverse))
{
didConvert = true;
}
}
user.getBase().updateInventory();
if (didConvert)
{
user.sendMessage(tl("itemsConverted"));
}
else
{
user.sendMessage(tl("itemsNotConverted"));
throw new NoChargeException();
}
}
private boolean condenseStack(final User user, final ItemStack stack, final boolean validateReverse) throws ChargeException, MaxMoneyException
{
final SimpleRecipe condenseType = getCondenseType(stack);
if (condenseType != null)
{
final ItemStack input = condenseType.getInput();
final ItemStack result = condenseType.getResult();
if (validateReverse)
{
boolean pass = false;
for (Recipe revRecipe : ess.getServer().getRecipesFor(input))
{
if (getStackOnRecipeMatch(revRecipe, result) != null)
{
pass = true;
break;
}
}
if (!pass)
{
return false;
}
}
int amount = 0;
for (final ItemStack contents : user.getBase().getInventory().getContents())
{
if (contents != null && contents.isSimilar(stack))
{
amount += contents.getAmount();
}
}
int output = ((amount / input.getAmount()) * result.getAmount());
amount -= amount % input.getAmount();
if (amount > 0)
{
input.setAmount(amount);
result.setAmount(output);
final Trade remove = new Trade(input, ess);
final Trade add = new Trade(result, ess);
remove.charge(user);
add.pay(user, OverflowType.DROP);
return true;
}
}
return false;
}
private SimpleRecipe getCondenseType(final ItemStack stack)
{
if (condenseList.containsKey(stack))
{
return condenseList.get(stack);
}
final Iterator<Recipe> intr = ess.getServer().recipeIterator();
while (intr.hasNext())
{
final Recipe recipe = intr.next();
final Collection<ItemStack> recipeItems = getStackOnRecipeMatch(recipe, stack);
if (recipeItems != null && (recipeItems.size() == 4 || recipeItems.size() == 9)
&& (recipeItems.size() > recipe.getResult().getAmount()))
{
final ItemStack input = stack.clone();
input.setAmount(recipeItems.size());
final SimpleRecipe newRecipe = new SimpleRecipe(recipe.getResult(), input);
condenseList.put(stack, newRecipe);
return newRecipe;
}
}
condenseList.put(stack, null);
return null;
}
private Collection<ItemStack> getStackOnRecipeMatch(final Recipe recipe, final ItemStack stack)
{
final Collection<ItemStack> inputList;
if (recipe instanceof ShapedRecipe)
{
ShapedRecipe sRecipe = (ShapedRecipe)recipe;
inputList = sRecipe.getIngredientMap().values();
}
else if (recipe instanceof ShapelessRecipe)
{
ShapelessRecipe slRecipe = (ShapelessRecipe)recipe;
inputList = slRecipe.getIngredientList();
}
else
{
return null;
}
boolean match = true;
Iterator<ItemStack> iter = inputList.iterator();
while (iter.hasNext())
{
ItemStack inputSlot = iter.next();
if (inputSlot == null)
{
iter.remove();
continue;
}
if (inputSlot.getDurability() == Short.MAX_VALUE)
{
inputSlot.setDurability((short)0);
}
if (!inputSlot.isSimilar(stack))
{
match = false;
}
}
if (match)
{
return inputList;
}
return null;
}
private class SimpleRecipe implements Recipe
{
private ItemStack result;
private ItemStack input;
private SimpleRecipe(ItemStack result, ItemStack input)
{
this.result = result;
this.input = input;
}
@Override
public ItemStack getResult()
{
return result.clone();
}
public ItemStack getInput()
{
return input.clone();
}
}
}

View File

@@ -18,8 +18,13 @@ public class Commandcustomtext extends EssentialsCommand
@Override
protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
final IText input = new TextInput(sender, "custom", true, ess);
{
if (sender.isPlayer())
{
ess.getUser(sender.getPlayer()).setDisplayNick();
}
final IText input = new TextInput(sender, "custom", true, ess);
final IText output = new KeywordReplacer(input, sender, ess);
final TextPager pager = new TextPager(output);
String chapter = commandLabel;

View File

@@ -105,8 +105,10 @@ public class Commandeco extends EssentialsLoopCommand
private void set(BigDecimal amount, final User player, final CommandSource sender) throws MaxMoneyException
{
BigDecimal minBalance = ess.getSettings().getMinMoney();
BigDecimal maxBalance = ess.getSettings().getMaxMoney();
boolean underMinimum = (amount.compareTo(minBalance) < 0);
player.setMoney(underMinimum ? minBalance : amount);
boolean aboveMax = (amount.compareTo(maxBalance) > 0);
player.setMoney(underMinimum ? minBalance : aboveMax ? maxBalance : amount);
player.sendMessage(tl("setBal", NumberUtil.displayCurrency(player.getMoney(), ess)));
if (sender != null)
{

View File

@@ -11,6 +11,7 @@ import com.earth2me.essentials.utils.NumberUtil;
import com.google.common.base.Charsets;
import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
import org.bukkit.Material;
@@ -164,7 +165,7 @@ public class Commandessentials extends EssentialsCommand
{
return;
}
for (Player onlinePlayer : server.getOnlinePlayers())
for (Player onlinePlayer : ess.getOnlinePlayers())
{
onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.NOTE_PIANO, 1, noteMap.get(note));
}
@@ -213,7 +214,7 @@ public class Commandessentials extends EssentialsCommand
{
logger.info(s);
}
for (Player player : ess.getServer().getOnlinePlayers())
for (Player player : ess.getOnlinePlayers())
{
player.sendMessage(playerMoo);
player.playSound(player.getLocation(), Sound.COW_IDLE, 1, 1.0f);
@@ -263,15 +264,14 @@ public class Commandessentials extends EssentialsCommand
{
sender.sendMessage("This sub-command will delete users who havent logged in in the last <days> days.");
sender.sendMessage("Optional parameters define the minium amount required to prevent deletion.");
sender.sendMessage("Unless you define larger default values, this command wil ignore people who have more than 0 money/homes/bans.");
throw new Exception("/<command> cleanup <days> [money] [homes] [ban count]");
sender.sendMessage("Unless you define larger default values, this command wil ignore people who have more than 0 money/homes.");
throw new Exception("/<command> cleanup <days> [money] [homes]");
}
sender.sendMessage(tl("cleaning"));
final long daysArg = Long.parseLong(args[1]);
final double moneyArg = args.length >= 3 ? Double.parseDouble(args[2].replaceAll("[^0-9\\.]", "")) : 0;
final int homesArg = args.length >= 4 && NumberUtil.isInt(args[3]) ? Integer.parseInt(args[3]) : 0;
final int bansArg = args.length >= 5 && NumberUtil.isInt(args[4]) ? Integer.parseInt(args[4]) : 0;
final UserMap userMap = ess.getUserMap();
ess.runTaskAsynchronously(new Runnable()
@@ -288,8 +288,6 @@ public class Commandessentials extends EssentialsCommand
continue;
}
int ban = user.getBanReason().isEmpty() ? 0 : 1;
long lastLog = user.getLastLogout();
if (lastLog == 0)
{
@@ -299,7 +297,7 @@ public class Commandessentials extends EssentialsCommand
{
user.setLastLogin(currTime);
}
if (user.isNPC())
{
continue;
@@ -310,7 +308,7 @@ public class Commandessentials extends EssentialsCommand
int homeCount = user.getHomes().size();
double moneyCount = user.getMoney().doubleValue();
if ((lastLog == 0) || (ban > bansArg) || (timeDiff < milliDays)
if ((lastLog == 0) || (timeDiff < milliDays)
|| (homeCount > homesArg) || (moneyCount > moneyArg))
{
continue;
@@ -328,14 +326,17 @@ public class Commandessentials extends EssentialsCommand
});
}
private void run_uuidconvert(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
sender.sendMessage("Starting Essentials UUID userdata conversion, this may lag the server.");
EssentialsUpgrade.uuidFileConvert(ess);
Boolean ignoreUFCache = (args.length > 2 && args[1].toLowerCase(Locale.ENGLISH).contains("ignore"));
EssentialsUpgrade.uuidFileConvert(ess, ignoreUFCache);
sender.sendMessage("UUID conversion complete, check your server log for more information.");
}
private void run_uuidtest(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 2)
@@ -344,23 +345,38 @@ public class Commandessentials extends EssentialsCommand
}
String name = args[1];
sender.sendMessage("Looking up UUID for " + name);
for (Player player : server.getOnlinePlayers())
UUID onlineUUID = null;
for (Player player : ess.getOnlinePlayers())
{
if (player.getName().equalsIgnoreCase(name))
{
sender.sendMessage("Online player: " + player.getUniqueId().toString());
onlineUUID = player.getUniqueId();
break;
}
}
UUID essUUID = ess.getUserMap().getUser(name).getConfigUUID();
org.bukkit.OfflinePlayer player = ess.getServer().getOfflinePlayer(name);
UUID bukkituuid = player.getUniqueId();
sender.sendMessage("Bukkit Lookup: " + bukkituuid.toString());
UUID npcuuid = UUID.nameUUIDFromBytes(("NPC:" + name).getBytes(Charsets.UTF_8));
if (onlineUUID != null && onlineUUID != bukkituuid)
{
sender.sendMessage("Online player: " + onlineUUID.toString());
}
if (essUUID != null && essUUID != bukkituuid)
{
sender.sendMessage("Essentials config: " + essUUID.toString());
}
UUID npcuuid = UUID.nameUUIDFromBytes(("NPC:" + name).getBytes(Charsets.UTF_8));
sender.sendMessage("NPC UUID: " + npcuuid.toString());
UUID offlineuuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8));
sender.sendMessage("Offline Mode UUID: " + offlineuuid.toString());
sender.sendMessage("Offline Mode UUID: " + offlineuuid.toString());
}
}

View File

@@ -117,13 +117,13 @@ public class Commandexp extends EssentialsCommand
private void showMatch(final Server server, final CommandSource sender, final String match) throws PlayerNotFoundException
{
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(match);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(matchPlayer))
{
continue;
}
@@ -138,13 +138,13 @@ public class Commandexp extends EssentialsCommand
private void expMatch(final Server server, final CommandSource sender, final String match, String amount, final boolean give) throws NotEnoughArgumentsException, PlayerNotFoundException
{
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(match);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(matchPlayer))
{
continue;
}

View File

@@ -84,13 +84,13 @@ public class Commandgamemode extends EssentialsCommand
throw new NotEnoughArgumentsException(tl("gameModeInvalid"));
}
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(name);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(matchPlayer))
{
continue;
}

View File

@@ -6,6 +6,8 @@ import com.earth2me.essentials.utils.DateUtil;
import com.earth2me.essentials.utils.NumberUtil;
import java.lang.management.ManagementFactory;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.Server;
@@ -56,11 +58,19 @@ public class Commandgc extends EssentialsCommand
worldType = "The End";
break;
}
int tileEntities = 0;
for (Chunk chunk : w.getLoadedChunks()) {
tileEntities += chunk.getTileEntities().length;
try
{
for (Chunk chunk : w.getLoadedChunks())
{
tileEntities += chunk.getTileEntities().length;
}
}
catch (java.lang.ClassCastException ex)
{
Bukkit.getLogger().log(Level.SEVERE, "Corrupted chunk data on world " + w, ex);
}
sender.sendMessage(tl("gcWorld", worldType, w.getName(), w.getLoadedChunks().length, w.getEntities().size(), tileEntities));

View File

@@ -45,6 +45,7 @@ public class Commandhelp extends EssentialsCommand
}
else
{
user.setDisplayNick();
output = new KeywordReplacer(input, user.getSource(), ess);
}
final TextPager pager = new TextPager(output);

View File

@@ -18,6 +18,11 @@ public class Commandinfo extends EssentialsCommand
@Override
protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
if (sender.isPlayer())
{
ess.getUser(sender.getPlayer()).setDisplayNick();
}
final IText input = new TextInput(sender, "info", true, ess);
final IText output = new KeywordReplacer(input, sender, ess);
final TextPager pager = new TextPager(output);

View File

@@ -28,7 +28,7 @@ public class Commandkick extends EssentialsCommand
if (sender.isPlayer())
{
User user = ess.getUser(sender.getPlayer());
if (target.isHidden() && !user.isAuthorized("essentials.vanish.interact"))
if (target.isHidden(sender.getPlayer()) && !user.canInteractVanished() && !sender.getPlayer().canSee(target.getBase()))
{
throw new PlayerNotFoundException();
}

View File

@@ -20,7 +20,7 @@ public class Commandkickall extends EssentialsCommand
String kickReason = args.length > 0 ? getFinalArg(args, 0) : tl("kickDefault");
kickReason = FormatUtil.replaceFormat(kickReason.replace("\\n", "\n").replace("|", "\n"));
for (Player onlinePlayer : server.getOnlinePlayers())
for (Player onlinePlayer : ess.getOnlinePlayers())
{
if (!sender.isPlayer() || !onlinePlayer.getName().equalsIgnoreCase(sender.getPlayer().getName()))
{

View File

@@ -3,12 +3,12 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.Kit;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.StringUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
import org.bukkit.Server;
@@ -18,7 +18,7 @@ public class Commandkit extends EssentialsCommand
{
super("kit");
}
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
@@ -31,16 +31,16 @@ public class Commandkit extends EssentialsCommand
else if (args.length > 1 && user.isAuthorized("essentials.kit.others"))
{
final User userTo = getPlayer(server, user, args, 1);
final String kitName = StringUtil.sanitizeString(args[0].toLowerCase(Locale.ENGLISH)).trim();
giveKit(userTo, user, kitName);
final String kitNames = StringUtil.sanitizeString(args[0].toLowerCase(Locale.ENGLISH)).trim();
giveKits(userTo, user, kitNames);
}
else
{
final String kitName = StringUtil.sanitizeString(args[0].toLowerCase(Locale.ENGLISH)).trim();
giveKit(user, user, kitName);
final String kitNames = StringUtil.sanitizeString(args[0].toLowerCase(Locale.ENGLISH)).trim();
giveKits(user, user, kitNames);
}
}
@Override
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
@@ -53,41 +53,73 @@ public class Commandkit extends EssentialsCommand
else
{
final User userTo = getPlayer(server, args, 1, true, false);
final String kitName = args[0].toLowerCase(Locale.ENGLISH);
final Map<String, Object> kit = ess.getSettings().getKit(kitName);
final List<String> items = Kit.getItems(ess, userTo, kitName, kit);
Kit.expandItems(ess, userTo, items);
sender.sendMessage(tl("kitGiveTo", kitName, userTo.getDisplayName()));
userTo.sendMessage(tl("kitReceive", kitName));
final String[] kits = args[0].toLowerCase(Locale.ENGLISH).split(",");
for (final String kitName : kits)
{
final Kit kit = new Kit(kitName, ess);
kit.expandItems(userTo);
sender.sendMessage(tl("kitGiveTo", kitName, userTo.getDisplayName()));
userTo.sendMessage(tl("kitReceive", kitName));
}
}
}
private void giveKit(User userTo, User userFrom, String kitName) throws Exception
{
if (kitName.isEmpty())
private void giveKits(final User userTo, final User userFrom, final String kitNames) throws Exception
{
if (kitNames.isEmpty())
{
throw new Exception(tl("kitError2"));
throw new Exception(tl("kitNotFound"));
}
String[] kitList = kitNames.split(",");
List<Kit> kits = new ArrayList<Kit>();
for (final String kitName : kitList)
{
if (kitName.isEmpty())
{
throw new Exception(tl("kitNotFound"));
}
Kit kit = new Kit(kitName, ess);
kit.checkPerms(userFrom);
kit.checkDelay(userFrom);
kit.checkAffordable(userFrom);
kits.add(kit);
}
final Map<String, Object> kit = ess.getSettings().getKit(kitName);
if (!userFrom.isAuthorized("essentials.kits." + kitName))
for (final Kit kit : kits)
{
throw new Exception(tl("noKitPermission", "essentials.kits." + kitName));
try
{
kit.checkDelay(userFrom);
kit.checkAffordable(userFrom);
kit.setTime(userFrom);
kit.expandItems(userTo);
kit.chargeUser(userTo);
if (!userFrom.equals(userTo))
{
userFrom.sendMessage(tl("kitGiveTo", kit.getName(), userTo.getDisplayName()));
}
userTo.sendMessage(tl("kitReceive", kit.getName()));
}
catch (NoChargeException ex)
{
if (ess.getSettings().isDebug())
{
ess.getLogger().log(Level.INFO, "Soft kit error, abort spawning " + kit.getName(), ex);
}
}
catch (Exception ex)
{
ess.showError(userFrom.getSource(), ex, "\\ kit: " + kit.getName());
}
}
final List<String> items = Kit.getItems(ess, userTo, kitName, kit);
final Trade charge = new Trade("kit-" + kitName, ess);
charge.isAffordableFor(userFrom);
Kit.checkTime(userFrom, kitName, kit);
Kit.expandItems(ess, userTo, items);
charge.charge(userFrom);
userFrom.sendMessage(tl("kitGiveTo", kitName, userTo.getDisplayName()));
userTo.sendMessage(tl("kitReceive", kitName));
}
}

View File

@@ -31,7 +31,8 @@ public class Commandkittycannon extends EssentialsCommand
ocelot.setTamed(true);
ocelot.setBaby();
ocelot.setVelocity(user.getBase().getEyeLocation().getDirection().multiply(2));
ess.scheduleSyncDelayedTask(new Runnable()
class KittyCannonExplodeTask implements Runnable
{
@Override
public void run()
@@ -40,6 +41,8 @@ public class Commandkittycannon extends EssentialsCommand
ocelot.remove();
loc.getWorld().createExplosion(loc, 0F);
}
}, 20);
}
ess.scheduleSyncDelayedTask(new KittyCannonExplodeTask(), 20);
}
}

View File

@@ -21,12 +21,14 @@ public class Commandlist extends EssentialsCommand
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
boolean showHidden = true;
User user = null;
if (sender.isPlayer())
{
showHidden = ess.getUser(sender.getPlayer()).isAuthorized("essentials.list.hidden") || ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
user = ess.getUser(sender.getPlayer());
showHidden = user.isAuthorized("essentials.list.hidden") || user.canInteractVanished();
}
sender.sendMessage(PlayerList.listSummary(ess, showHidden));
final Map<String, List<User>> playerList = PlayerList.getPlayerLists(ess, showHidden);
sender.sendMessage(PlayerList.listSummary(ess, user, showHidden));
final Map<String, List<User>> playerList = PlayerList.getPlayerLists(ess, user, showHidden);
if (args.length > 0)
{

View File

@@ -1,14 +1,18 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import com.earth2me.essentials.textreader.IText;
import com.earth2me.essentials.textreader.SimpleTextInput;
import com.earth2me.essentials.textreader.SimpleTextPager;
import com.earth2me.essentials.textreader.TextPager;
import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.StringUtil;
import org.bukkit.Server;
import java.util.List;
import static com.earth2me.essentials.I18n.tl;
import java.util.UUID;
@@ -34,10 +38,11 @@ public class Commandmail extends EssentialsCommand
user.sendMessage(tl("noMail"));
throw new NoChargeException();
}
for (String messages : mail)
{
user.sendMessage(messages);
}
IText input = new SimpleTextInput(mail);
final TextPager pager = new TextPager(input);
pager.showPage(args.length > 1 ? args[1] : null, null, commandLabel + " " + args[0], user.getSource());
user.sendMessage(tl("mailClear"));
return;
}
@@ -47,24 +52,26 @@ public class Commandmail extends EssentialsCommand
{
throw new Exception(tl("noPerm", "essentials.mail.send"));
}
if (user.isMuted())
{
throw new Exception(tl("voiceSilenced"));
}
User u = ess.getUser(args[1]);
User u = getPlayer(server, args[1], true, true);
if (u == null)
{
throw new Exception(tl("playerNeverOnServer", args[1]));
}
final String mail = tl("mailFormat", user.getName(), StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 2))));
if (mail.length() > 1000)
{
throw new Exception(tl("mailTooLong"));
}
if (!u.isIgnoredPlayer(user))
{
final String mail = user.getName() + ": " + StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 2)));
if (mail.length() > 1000)
{
throw new Exception(tl("mailTooLong"));
}
if (Math.abs(System.currentTimeMillis() - timestamp) > 60000)
{
timestamp = System.currentTimeMillis();
@@ -75,9 +82,11 @@ public class Commandmail extends EssentialsCommand
{
throw new Exception(tl("mailDelay", ess.getSettings().getMailsPerMinute()));
}
u.addMail(mail);
u.addMail(tl("mailMessage", mail));
}
user.sendMessage(tl("mailSent"));
user.sendMessage(tl("mailSentTo", u.getDisplayName(), u.getName()));
user.sendMessage(mail);
return;
}
if (args.length > 1 && "sendall".equalsIgnoreCase(args[0]))
@@ -86,7 +95,7 @@ public class Commandmail extends EssentialsCommand
{
throw new Exception(tl("noPerm", "essentials.mail.sendall"));
}
ess.runTaskAsynchronously(new SendAll(user.getName() + ": " + FormatUtil.stripFormat(getFinalArg(args, 1))));
ess.runTaskAsynchronously(new SendAll(tl("mailFormat", user.getName(), FormatUtil.stripFormat(getFinalArg(args, 1)))));
user.sendMessage(tl("mailSent"));
return;
}
@@ -112,30 +121,30 @@ public class Commandmail extends EssentialsCommand
}
else if (args.length >= 3 && "send".equalsIgnoreCase(args[0]))
{
User u = ess.getUser(args[1]);
User u = getPlayer(server, args[1], true, true);
if (u == null)
{
throw new Exception(tl("playerNeverOnServer", args[1]));
}
u.addMail("Server: " + getFinalArg(args, 2));
u.addMail(tl("mailFormat", "Server", getFinalArg(args, 2)));
sender.sendMessage(tl("mailSent"));
return;
}
else if (args.length >= 2 && "sendall".equalsIgnoreCase(args[0]))
{
ess.runTaskAsynchronously(new SendAll("Server: " + getFinalArg(args, 1)));
ess.runTaskAsynchronously(new SendAll(tl("mailFormat", "Server", getFinalArg(args, 1))));
sender.sendMessage(tl("mailSent"));
return;
}
else if (args.length >= 2)
{
//allow sending from console without "send" argument, since it's the only thing the console can do
User u = ess.getUser(args[0]);
User u = getPlayer(server, args[0], true, true);
if (u == null)
{
throw new Exception(tl("playerNeverOnServer", args[0]));
}
u.addMail("Server: " + getFinalArg(args, 1));
u.addMail(tl("mailFormat", "Server", getFinalArg(args, 1)));
sender.sendMessage(tl("mailSent"));
return;
}

View File

@@ -18,6 +18,11 @@ public class Commandmotd extends EssentialsCommand
@Override
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
if (sender.isPlayer())
{
ess.getUser(sender.getPlayer()).setDisplayNick();
}
final IText input = new TextInput(sender, "motd", true, ess);
final IText output = new KeywordReplacer(input, sender, ess);
final TextPager pager = new TextPager(output);

View File

@@ -101,12 +101,11 @@ public class Commandnear extends EssentialsCommand
final World world = loc.getWorld();
final StringBuilder output = new StringBuilder();
final long radiusSquared = radius * radius;
boolean showHidden = user.isAuthorized("essentials.vanish.interact");
boolean showHidden = user.canInteractVanished();
for (Player onlinePlayer : server.getOnlinePlayers())
for (User player: ess.getOnlineUsers())
{
final User player = ess.getUser(onlinePlayer);
if (!player.equals(user) && (!player.isHidden() || showHidden))
if (!player.equals(user) && (!player.isHidden(user.getBase()) || showHidden || user.getBase().canSee(player.getBase())))
{
final Location playerLoc = player.getLocation();
if (playerLoc.getWorld() != world)

View File

@@ -64,8 +64,13 @@ public class Commandnick extends EssentialsLoopCommand
final String nick = args[0];
if (target.getName().equalsIgnoreCase(nick))
{
String oldName = target.getDisplayName();
setNickname(server, sender, target, nick);
target.sendMessage(tl("nickNoMore"));
if (!target.getDisplayName().equalsIgnoreCase(oldName))
{
target.sendMessage(tl("nickNoMore"));
}
target.sendMessage(tl("nickSet", target.getDisplayName()));
}
else if ("off".equalsIgnoreCase(nick))
{
@@ -104,7 +109,7 @@ public class Commandnick extends EssentialsLoopCommand
private boolean nickInUse(final Server server, final User target, String nick)
{
final String lowerNick = FormatUtil.stripFormat(nick.toLowerCase(Locale.ENGLISH));
for (final Player onlinePlayer : server.getOnlinePlayers())
for (final Player onlinePlayer : ess.getOnlinePlayers())
{
if (target.getBase().getName().equals(onlinePlayer.getName()))
{
@@ -117,8 +122,9 @@ public class Commandnick extends EssentialsLoopCommand
return true;
}
}
if (ess.getUser(lowerNick) != null && ess.getUser(lowerNick) != target) {
return true;
if (ess.getUser(lowerNick) != null && ess.getUser(lowerNick) != target)
{
return true;
}
return false;
}

View File

@@ -3,8 +3,7 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import static com.earth2me.essentials.I18n.tl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collection;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
@@ -22,7 +21,7 @@ public class Commandnuke extends EssentialsCommand
@Override
protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws NoSuchFieldException, NotEnoughArgumentsException
{
List<Player> targets;
Collection<Player> targets;
if (args.length > 0)
{
targets = new ArrayList<Player>();
@@ -35,7 +34,7 @@ public class Commandnuke extends EssentialsCommand
}
else
{
targets = Arrays.asList(server.getOnlinePlayers());
targets = ess.getOnlinePlayers();
}
ess.getTNTListener().enable();
for (Player player : targets)

View File

@@ -27,7 +27,14 @@ public class Commandpay extends EssentialsLoopCommand
throw new NotEnoughArgumentsException();
}
amount = new BigDecimal(args[1].replaceAll("[^0-9\\.]", ""));
String stringAmount = args[1].replaceAll("[^0-9\\.]", "");
if (stringAmount.length() < 1)
{
throw new NotEnoughArgumentsException();
}
amount = new BigDecimal(stringAmount);
loopOnlinePlayers(server, user.getSource(), false, user.isAuthorized("essentials.pay.multiple"), args[0], args);
}
@@ -43,6 +50,6 @@ public class Commandpay extends EssentialsLoopCommand
catch (MaxMoneyException ex)
{
sender.sendMessage(tl("maxMoney"));
}
}
}
}

View File

@@ -197,9 +197,9 @@ public class Commandptime extends EssentialsCommand
}
else
{
for (Player player : server.getOnlinePlayers())
for (User user : ess.getOnlineUsers())
{
users.add(ess.getUser(player));
users.add(user);
}
}
return users;
@@ -220,9 +220,9 @@ public class Commandptime extends EssentialsCommand
// If that fails, Is the argument something like "*" or "all"?
else if (selector.equalsIgnoreCase("*") || selector.equalsIgnoreCase("all"))
{
for (Player player : server.getOnlinePlayers())
for (User u : ess.getOnlineUsers())
{
users.add(ess.getUser(player));
users.add(u);
}
}
// We failed to understand the world target...

View File

@@ -147,9 +147,9 @@ public class Commandpweather extends EssentialsCommand
}
else
{
for (Player player : server.getOnlinePlayers())
for (User user : ess.getOnlineUsers())
{
users.add(ess.getUser(player));
users.add(user);
}
}
return users;
@@ -170,9 +170,9 @@ public class Commandpweather extends EssentialsCommand
// If that fails, Is the argument something like "*" or "all"?
else if (selector.equalsIgnoreCase("*") || selector.equalsIgnoreCase("all"))
{
for (Player player : server.getOnlinePlayers())
for (User u : ess.getOnlineUsers())
{
users.add(ess.getUser(player));
users.add(u);
}
}
// We failed to understand the world target...

View File

@@ -24,12 +24,11 @@ public class Commandrealname extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
final String whois = args[0].toLowerCase(Locale.ENGLISH);
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
boolean foundUser = false;
for (Player onlinePlayer : server.getOnlinePlayers())
for (User u: ess.getOnlineUsers())
{
final User u = ess.getUser(onlinePlayer);
if (skipHidden && u.isHidden())
if (skipHidden && u.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(u.getBase()))
{
continue;
}

View File

@@ -63,11 +63,22 @@ public class Commandrecipe extends EssentialsCommand
}
else if (selectedRecipe instanceof ShapedRecipe)
{
shapedRecipe(sender, (ShapedRecipe)selectedRecipe);
shapedRecipe(sender, (ShapedRecipe)selectedRecipe, sender.isPlayer());
}
else if (selectedRecipe instanceof ShapelessRecipe)
{
shapelessRecipe(sender, (ShapelessRecipe)selectedRecipe);
if (recipesOfType.size() == 1 && itemType.getType() == Material.FIREWORK)
{
ShapelessRecipe shapelessRecipe = new ShapelessRecipe(itemType);
shapelessRecipe.addIngredient(Material.SULPHUR);
shapelessRecipe.addIngredient(Material.PAPER);
shapelessRecipe.addIngredient(Material.FIREWORK_CHARGE);
shapelessRecipe(sender, shapelessRecipe, sender.isPlayer());
}
else
{
shapelessRecipe(sender, (ShapelessRecipe)selectedRecipe, sender.isPlayer());
}
}
if (recipesOfType.size() > 1 && args.length == 1)
@@ -81,11 +92,11 @@ public class Commandrecipe extends EssentialsCommand
sender.sendMessage(tl("recipeFurnace", getMaterialName(recipe.getInput())));
}
public void shapedRecipe(final CommandSource sender, final ShapedRecipe recipe)
public void shapedRecipe(final CommandSource sender, final ShapedRecipe recipe, final boolean showWindow)
{
final Map<Character, ItemStack> recipeMap = recipe.getIngredientMap();
if (sender.isPlayer())
if (showWindow)
{
final User user = ess.getUser(sender.getPlayer());
user.getBase().closeInventory();
@@ -141,10 +152,10 @@ public class Commandrecipe extends EssentialsCommand
}
}
public void shapelessRecipe(final CommandSource sender, final ShapelessRecipe recipe)
public void shapelessRecipe(final CommandSource sender, final ShapelessRecipe recipe, final boolean showWindow)
{
final List<ItemStack> ingredients = recipe.getIngredientList();
if (sender.isPlayer())
if (showWindow)
{
final User user = ess.getUser(sender.getPlayer());
user.setRecipeSee(true);

View File

@@ -158,21 +158,36 @@ public class Commandremove extends EssentialsCommand
for (ToRemove toRemove : removeTypes)
{
if (e instanceof Tameable && ((Tameable)e).isTamed())
// We should skip any TAMED animals unless we are specifially targetting them.
if (e instanceof Tameable && ((Tameable)e).isTamed()
&& !removeTypes.contains(ToRemove.TAMED))
{
if (toRemove == ToRemove.TAMED)
{
e.remove();
removed++;
}
else
{
continue;
}
continue;
}
// We should skip any NAMED animals unless we are specifially targetting them.
if (e instanceof LivingEntity && ((LivingEntity)e).getCustomName() != null
&& !removeTypes.contains(ToRemove.NAMED))
{
continue;
}
switch (toRemove)
{
case TAMED:
if (e instanceof Tameable && ((Tameable)e).isTamed())
{
e.remove();
removed++;
}
break;
case NAMED:
if (e instanceof LivingEntity && ((LivingEntity)e).getCustomName() != null)
{
e.remove();
removed++;
}
break;
case DROPS:
if (e instanceof Item)
{
@@ -305,6 +320,7 @@ public class Commandremove extends EssentialsCommand
ENTITIES,
ALL,
CUSTOM,
TAMED
TAMED,
NAMED
}
}

View File

@@ -18,9 +18,14 @@ public class Commandrules extends EssentialsCommand
@Override
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception
{
if (sender.isPlayer())
{
ess.getUser(sender.getPlayer()).setDisplayNick();
}
final IText input = new TextInput(sender, "rules", true, ess);
final IText output = new KeywordReplacer(input, sender, ess);
final TextPager pager = new TextPager(output);
pager.showPage(args.length > 0 ? args[0] : null, args.length > 1 ? args[1] : null, "rules", sender);
pager.showPage(args.length > 0 ? args[0] : null, args.length > 1 ? args[1] : null, commandLabel, sender);
}
}

View File

@@ -4,12 +4,16 @@ import com.earth2me.essentials.CommandSource;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import com.earth2me.essentials.UserMap;
import com.earth2me.essentials.craftbukkit.BanLookup;
import com.earth2me.essentials.utils.DateUtil;
import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.StringUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.bukkit.BanList;
import java.util.UUID;
import org.bukkit.BanEntry;
import org.bukkit.Location;
import org.bukkit.Server;
@@ -39,33 +43,45 @@ public class Commandseen extends EssentialsCommand
{
throw new NotEnoughArgumentsException();
}
try
User player = ess.getOfflineUser(args[0]);
if (player == null)
{
User user = getPlayer(server, sender, args, 0);
seenOnline(server, sender, user, showBan, extra);
}
catch (NoSuchFieldException e)
{
User player = ess.getOfflineUser(args[0]);
if (player == null)
if (ipLookup && FormatUtil.validIP(args[0]))
{
if (ipLookup && FormatUtil.validIP(args[0]))
seenIP(server, sender, args[0]);
return;
}
else if (ess.getServer().getBanList(BanList.Type.IP).isBanned(args[0]))
{
sender.sendMessage(tl("isIpBanned", args[0]));
return;
}
else if (BanLookup.isBanned(ess, args[0]))
{
sender.sendMessage(tl("whoisBanned", showBan ? BanLookup.getBanEntry(ess, args[0]).getReason() : tl("true")));
return;
}
else
{
try
{
seenIP(server, sender, args[0]);
return;
player = getPlayer(server, sender, args, 0);
}
else if (FormatUtil.validIP(args[0]) && (server.getIPBans().contains(args[0])))
{
sender.sendMessage(tl("isIpBanned", args[0]));
return;
}
else
catch (NoSuchFieldException e)
{
throw new PlayerNotFoundException();
}
}
}
if (player.getBase().isOnline() && canInteractWith(sender, player))
{
seenOnline(server, sender, player, showBan, extra);
}
else
{
seenOffline(server, sender, player, showBan, extra);
}
}
private void seenOnline(final Server server, final CommandSource sender, final User user, final boolean showBan, final boolean extra) throws Exception
@@ -135,10 +151,23 @@ public class Commandseen extends EssentialsCommand
sender.sendMessage(tl("seenAccounts", StringUtil.joinListSkip(", ", user.getName(), history)));
}
if (user.getBase().isBanned())
if (BanLookup.isBanned(ess, user))
{
sender.sendMessage(tl("whoisBanned", showBan ? user.getBanReason() : tl("true")));
final BanEntry banEntry = BanLookup.getBanEntry(ess, user.getName());
final String reason = showBan ? banEntry.getReason() : tl("true");
sender.sendMessage(tl("whoisBanned", reason));
if (banEntry.getExpiration() != null)
{
Date expiry = banEntry.getExpiration();
String expireString = tl("now");
if (expiry.after(new Date()))
{
expireString = DateUtil.formatDateDiff(expiry.getTime());
}
sender.sendMessage(tl("whoisTempBanned", expireString));
}
}
final String location = user.getGeoLocation();
if (location != null && (!(sender.isPlayer()) || ess.getUser(sender.getPlayer()).isAuthorized("essentials.geoip.show")))
{
@@ -162,7 +191,7 @@ public class Commandseen extends EssentialsCommand
{
final UserMap userMap = ess.getUserMap();
if (server.getIPBans().contains(ipAddress))
if (ess.getServer().getBanList(BanList.Type.IP).isBanned(ipAddress))
{
sender.sendMessage(tl("isIpBanned", ipAddress));
}

View File

@@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.LocationUtil;
import com.earth2me.essentials.utils.NumberUtil;
import java.util.Locale;
import org.bukkit.Location;
@@ -40,11 +41,11 @@ public class Commandsethome extends EssentialsCommand
name = args[1].toLowerCase(Locale.ENGLISH);
if (user.isAuthorized("essentials.sethome.others"))
{
usersHome = ess.getUser(args[0]);
usersHome = getPlayer(server, args[0], true, true);
if (usersHome == null)
{
throw new PlayerNotFoundException();
}
}
}
}
}
@@ -56,6 +57,12 @@ public class Commandsethome extends EssentialsCommand
{
throw new NoSuchFieldException(tl("invalidHomeName"));
}
if (!ess.getSettings().isTeleportSafetyEnabled() && LocationUtil.isBlockUnsafeForUser(usersHome, location.getWorld(), location.getBlockX(), location.getBlockY(), location.getBlockZ()))
{
throw new Exception(tl("unsafeTeleportDestination", location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ()));
}
usersHome.setHome(name, location);
user.sendMessage(tl("homeSet", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ(), name));

View File

@@ -72,13 +72,13 @@ public class Commandspeed extends EssentialsCommand
private void speedOtherPlayers(final Server server, final CommandSource sender, final boolean isFly, final boolean isBypass, final float speed, final String name) throws PlayerNotFoundException
{
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(name);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(matchPlayer))
{
continue;
}

View File

@@ -4,10 +4,8 @@ import com.earth2me.essentials.CommandSource;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Server;
import org.bukkit.command.PluginCommand;
public class Commandsudo extends EssentialsCommand
@@ -27,7 +25,7 @@ public class Commandsudo extends EssentialsCommand
}
final User user = getPlayer(server, sender, args, 0);
if(args[1].toLowerCase(Locale.ENGLISH).startsWith("c:"))
if (args[1].toLowerCase(Locale.ENGLISH).startsWith("c:"))
{
if (user.isAuthorized("essentials.sudo.exempt") && sender.isPlayer())
{
@@ -36,11 +34,10 @@ public class Commandsudo extends EssentialsCommand
user.getBase().chat(getFinalArg(args, 1).substring(2));
return;
}
final String command = args[1];
final String[] arguments = new String[args.length - 2];
final String[] arguments = new String[args.length - 1];
if (arguments.length > 0)
{
System.arraycopy(args, 2, arguments, 0, args.length - 2);
System.arraycopy(args, 1, arguments, 0, args.length - 1);
}
if (user.isAuthorized("essentials.sudo.exempt") && sender.isPlayer())
@@ -48,24 +45,28 @@ public class Commandsudo extends EssentialsCommand
throw new Exception(tl("sudoExempt"));
}
sender.sendMessage(tl("sudoRun", user.getDisplayName(), command, getFinalArg(arguments, 0)));
final String command = getFinalArg(arguments, 0);
final PluginCommand execCommand = ess.getServer().getPluginCommand(command);
if (execCommand != null)
sender.sendMessage(tl("sudoRun", user.getDisplayName(), command, ""));
if (command != null && command.length() > 0)
{
ess.scheduleSyncDelayedTask(
new Runnable()
class SudoCommandTask implements Runnable
{
@Override
public void run()
{
try
{
@Override
public void run()
{
LOGGER.log(Level.INFO, String.format("[Sudo] %s issued server command: /%s %s", user.getName(), command, getFinalArg(arguments, 0)));
execCommand.execute(user.getBase(), command, arguments);
}
});
}
else {
sender.sendMessage(tl("errorCallingCommand", command));
ess.getServer().dispatchCommand(user.getBase(), command);
}
catch (Exception e)
{
sender.sendMessage(tl("errorCallingCommand", command));
}
}
}
ess.scheduleSyncDelayedTask(new SudoCommandTask());
}
}
}

View File

@@ -5,8 +5,10 @@ import com.earth2me.essentials.Console;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.DateUtil;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import org.bukkit.BanList;
import org.bukkit.Server;
@@ -44,6 +46,7 @@ public class Commandtempban extends EssentialsCommand
}
final String time = getFinalArg(args, 1);
final long banTimestamp = DateUtil.parseDateDiff(time, true);
String banReason = DateUtil.removeTimePattern(time);
final long maxBanLength = ess.getSettings().getMaxTempban() * 1000;
if (maxBanLength > 0 && ((banTimestamp - GregorianCalendar.getInstance().getTimeInMillis()) > maxBanLength)
@@ -53,14 +56,19 @@ public class Commandtempban extends EssentialsCommand
throw new NoChargeException();
}
final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME;
final String banReason = tl("tempBanned", DateUtil.formatDateDiff(banTimestamp), senderName);
user.setBanReason(banReason);
user.setBanTimeout(banTimestamp);
user.getBase().setBanned(true);
user.getBase().kickPlayer(banReason);
if (banReason.length() < 2)
{
banReason = tl("defaultBanReason");
}
final String message = tl("playerBanned", senderName, user.getName(), banReason, DateUtil.formatDateDiff(banTimestamp));
final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME;
ess.getServer().getBanList(BanList.Type.NAME).addBan(user.getName(), banReason, new Date(banTimestamp), senderName);
final String expiry = DateUtil.formatDateDiff(banTimestamp);
final String banDisplay = tl("tempBanned", expiry, senderName, banReason);
user.getBase().kickPlayer(banDisplay);
final String message = tl("playerTempBanned", senderName, user.getName(), expiry, banReason);
server.getLogger().log(Level.INFO, message);
ess.broadcastMessage("essentials.ban.notify", message);
}

View File

@@ -40,11 +40,31 @@ public class Commandtp extends EssentialsCommand
charge.isAffordableFor(user);
user.getTeleport().teleport(player.getBase(), charge, TeleportCause.COMMAND);
throw new NoChargeException();
case 3:
if (!user.isAuthorized("essentials.tp.position"))
{
throw new Exception(tl("noPerm", "essentials.tp.position"));
}
final double x2 = args[0].startsWith("~") ? user.getLocation().getX() + Integer.parseInt(args[0].substring(1)) : Integer.parseInt(args[0]);
final double y2 = args[1].startsWith("~") ? user.getLocation().getY() + Integer.parseInt(args[1].substring(1)) : Integer.parseInt(args[1]);
final double z2 = args[2].startsWith("~") ? user.getLocation().getZ() + Integer.parseInt(args[2].substring(1)) : Integer.parseInt(args[2]);
if (x2 > 30000000 || y2 > 30000000 || z2 > 30000000 || x2 < -30000000 || y2 < -30000000 || z2 < -30000000)
{
throw new NotEnoughArgumentsException(tl("teleportInvalidLocation"));
}
final Location locpos = new Location(user.getWorld(), x2, y2, z2, user.getLocation().getYaw(), user.getLocation().getPitch());
user.getTeleport().now(locpos, false, TeleportCause.COMMAND);
user.sendMessage(tl("teleporting", locpos.getWorld().getName(), locpos.getBlockX(), locpos.getBlockY(), locpos.getBlockZ()));
break;
case 4:
if (!user.isAuthorized("essentials.tp.others"))
{
throw new Exception(tl("noPerm", "essentials.tp.others"));
}
if (!user.isAuthorized("essentials.tp.position"))
{
throw new Exception(tl("noPerm", "essentials.tp.position"));
}
final User target2 = getPlayer(server, user, args, 0);
final double x = args[1].startsWith("~") ? target2.getLocation().getX() + Integer.parseInt(args[1].substring(1)) : Integer.parseInt(args[1]);
final double y = args[2].startsWith("~") ? target2.getLocation().getY() + Integer.parseInt(args[2].substring(1)) : Integer.parseInt(args[2]);
@@ -53,14 +73,14 @@ public class Commandtp extends EssentialsCommand
{
throw new NotEnoughArgumentsException(tl("teleportInvalidLocation"));
}
final Location loc = new Location(target2.getWorld(), x, y, z, target2.getLocation().getYaw(), target2.getLocation().getPitch());
final Location locposother = new Location(target2.getWorld(), x, y, z, target2.getLocation().getYaw(), target2.getLocation().getPitch());
if (!target2.isTeleportEnabled())
{
throw new Exception(tl("teleportDisabled", target2.getDisplayName()));
}
target2.getTeleport().now(loc, false, TeleportCause.COMMAND);
user.sendMessage(tl("teleporting", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
target2.sendMessage(tl("teleporting", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
user.sendMessage(tl("teleporting", locposother.getWorld().getName(), locposother.getBlockX(), locposother.getBlockY(), locposother.getBlockZ()));
target2.getTeleport().now(locposother, false, TeleportCause.COMMAND);
target2.sendMessage(tl("teleporting", locposother.getWorld().getName(), locposother.getBlockX(), locposother.getBlockY(), locposother.getBlockZ()));
break;
case 2:
default:
@@ -83,8 +103,8 @@ public class Commandtp extends EssentialsCommand
{
throw new Exception(tl("noPerm", "essentials.worlds." + toPlayer.getWorld().getName()));
}
target.getTeleport().now(toPlayer.getBase(), false, TeleportCause.COMMAND);
target.sendMessage(tl("teleportAtoB", user.getDisplayName(), toPlayer.getDisplayName()));
target.getTeleport().now(toPlayer.getBase(), false, TeleportCause.COMMAND);
break;
}
}
@@ -101,8 +121,8 @@ public class Commandtp extends EssentialsCommand
if (args.length == 2)
{
final User toPlayer = getPlayer(server, args, 1, true, false);
target.getTeleport().now(toPlayer.getBase(), false, TeleportCause.COMMAND);
target.sendMessage(tl("teleportAtoB", Console.NAME, toPlayer.getDisplayName()));
target.getTeleport().now(toPlayer.getBase(), false, TeleportCause.COMMAND);
}
else if (args.length > 3)
{
@@ -114,9 +134,9 @@ public class Commandtp extends EssentialsCommand
throw new NotEnoughArgumentsException(tl("teleportInvalidLocation"));
}
final Location loc = new Location(target.getWorld(), x, y, z, target.getLocation().getYaw(), target.getLocation().getPitch());
sender.sendMessage(tl("teleporting", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
target.getTeleport().now(loc, false, TeleportCause.COMMAND);
target.sendMessage(tl("teleporting", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
sender.sendMessage(tl("teleporting", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
}
else
{

View File

@@ -34,9 +34,8 @@ public class Commandtpaall extends EssentialsCommand
private void teleportAAllPlayers(final Server server, final CommandSource sender, final User target)
{
sender.sendMessage(tl("teleportAAll"));
for (Player onlinePlayer : server.getOnlinePlayers())
for (User player : ess.getOnlineUsers())
{
final User player = ess.getUser(onlinePlayer);
if (target == player)
{
continue;

View File

@@ -37,9 +37,8 @@ public class Commandtpall extends EssentialsCommand
{
sender.sendMessage(tl("teleportAll"));
final Location loc = target.getLocation();
for (Player onlinePlayer : server.getOnlinePlayers())
for (User player : ess.getOnlineUsers())
{
final User player = ess.getUser(onlinePlayer);
if (target == player)
{
continue;

View File

@@ -22,7 +22,6 @@ public class Commandtree extends EssentialsCommand
TreeType tree = TreeType.BIRCH;
try // update check
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();

View File

@@ -5,6 +5,8 @@ import com.earth2me.essentials.Console;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import java.util.logging.Level;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
@@ -28,8 +30,7 @@ public class Commandunban extends EssentialsCommand
{
final User user = getPlayer(server, args, 0, true, true);
name = user.getName();
user.getBase().setBanned(false);
user.setBanTimeout(0);
ess.getServer().getBanList(BanList.Type.NAME).pardon(name);
}
catch (NoSuchFieldException e)
{
@@ -39,12 +40,12 @@ public class Commandunban extends EssentialsCommand
{
throw new Exception(tl("playerNotFound"), e);
}
player.setBanned(false);
ess.getServer().getBanList(BanList.Type.NAME).pardon(name);
}
final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME;
server.getLogger().log(Level.INFO, tl("playerUnbanned", senderName, name));
ess.broadcastMessage("essentials.ban.notify", tl("playerUnbanned", senderName, name));
}
}

View File

@@ -6,6 +6,8 @@ import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.FormatUtil;
import java.util.logging.Level;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.Server;
@@ -23,7 +25,7 @@ public class Commandunbanip extends EssentialsCommand
{
throw new NotEnoughArgumentsException();
}
String ipAddress;
if (FormatUtil.validIP(args[0]))
{
@@ -47,7 +49,8 @@ public class Commandunbanip extends EssentialsCommand
throw new PlayerNotFoundException();
}
ess.getServer().unbanIP(ipAddress);
ess.getServer().getBanList(BanList.Type.IP).pardon(ipAddress);
final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME;
server.getLogger().log(Level.INFO, tl("playerUnbanIpAddress", senderName, ipAddress));

View File

@@ -70,7 +70,7 @@ public class Commandweather extends EssentialsCommand
final World world = server.getWorld(args[0]);
if (world == null)
{
throw new Exception(tl("weatherInvalidWorldWorld", args[0]));
throw new Exception(tl("weatherInvalidWorld", args[0]));
}
if (args.length > 2)
{

View File

@@ -54,10 +54,21 @@ public abstract class EssentialsCommand implements IEssentialsCommand
return getPlayer(server, args, pos, true, false);
}
// Get online players - only show vanished if source has permission
protected User getPlayer(final Server server, final CommandSource sender, final String searchTerm) throws PlayerNotFoundException, NotEnoughArgumentsException
{
if (sender.isPlayer())
{
User user = ess.getUser(sender.getPlayer());
return getPlayer(server, user, searchTerm, user.canInteractVanished(), false);
}
return getPlayer(server, searchTerm, true, false);
}
// Get online players - only show vanished if source has permission
protected User getPlayer(final Server server, final User user, final String[] args, final int pos) throws PlayerNotFoundException, NotEnoughArgumentsException
{
return getPlayer(server, user, args, pos, user.isAuthorized("essentials.vanish.interact"), false);
return getPlayer(server, user, args, pos, user.canInteractVanished(), false);
}
// Get online or offline players, this method allows for raw access
@@ -114,21 +125,21 @@ public abstract class EssentialsCommand implements IEssentialsCommand
{
throw new PlayerNotFoundException();
}
if (!getHidden && user.isHidden() && !user.equals(sourceUser))
if (getHidden || canInteractWith(sourceUser, user))
{
throw new PlayerNotFoundException();
return user;
}
return user;
throw new PlayerNotFoundException();
}
final List<Player> matches = server.matchPlayer(searchTerm);
if (matches.isEmpty())
{
final String matchText = searchTerm.toLowerCase(Locale.ENGLISH);
for (Player onlinePlayer : server.getOnlinePlayers())
for (User userMatch : ess.getOnlineUsers())
{
final User userMatch = ess.getUser(onlinePlayer);
if (getHidden || !userMatch.isHidden() || userMatch.equals(sourceUser))
if (getHidden || canInteractWith(sourceUser, userMatch))
{
final String displayName = FormatUtil.stripFormat(userMatch.getDisplayName()).toLowerCase(Locale.ENGLISH);
if (displayName.contains(matchText))
@@ -143,13 +154,13 @@ public abstract class EssentialsCommand implements IEssentialsCommand
for (Player player : matches)
{
final User userMatch = ess.getUser(player);
if (userMatch.getDisplayName().startsWith(searchTerm) && (getHidden || !userMatch.isHidden() || userMatch.equals(sourceUser)))
if (userMatch.getDisplayName().startsWith(searchTerm) && (getHidden || canInteractWith(sourceUser, userMatch)))
{
return userMatch;
}
}
final User userMatch = ess.getUser(matches.get(0));
if (getHidden || !userMatch.isHidden() || userMatch.equals(sourceUser))
if (getHidden || canInteractWith(sourceUser, userMatch))
{
return userMatch;
}
@@ -199,4 +210,34 @@ public abstract class EssentialsCommand implements IEssentialsCommand
}
return bldr.toString();
}
boolean canInteractWith(CommandSource interactor, User interactee)
{
if (interactor == null)
{
return !interactee.isHidden();
}
if (interactor.isPlayer())
{
return canInteractWith(ess.getUser(interactor.getPlayer()), interactee);
}
return true; // console
}
private static boolean canInteractWith(User interactor, User interactee)
{
if (interactor == null)
{
return !interactee.isHidden();
}
if (interactor.equals(interactee))
{
return true;
}
return interactor.getBase().canSee(interactee.getBase());
}
}

View File

@@ -3,7 +3,9 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.FormatUtil;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import net.ess3.api.MaxMoneyException;
import org.bukkit.Server;
@@ -35,11 +37,10 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand
}
else if (matchWildcards && searchTerm.contentEquals("*"))
{
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
for (Player onlinePlayer : server.getOnlinePlayers())
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
for (User onlineUser : ess.getOnlineUsers())
{
final User onlineUser = ess.getUser(onlinePlayer);
if (skipHidden && onlineUser.isHidden())
if (skipHidden && onlineUser.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlineUser.getBase()))
{
continue;
}
@@ -79,14 +80,13 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand
throw new PlayerNotFoundException();
}
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
if (matchWildcards && (searchTerm.contentEquals("**") || searchTerm.contentEquals("*")))
{
for (Player onlinePlayer : server.getOnlinePlayers())
for (User onlineUser : ess.getOnlineUsers())
{
final User onlineUser = ess.getUser(onlinePlayer);
if (skipHidden && onlineUser.isHidden())
if (skipHidden && onlineUser.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlineUser.getBase()))
{
continue;
}
@@ -101,15 +101,36 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand
}
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(searchTerm);
for (Player matchPlayer : matchedPlayers)
if (matchedPlayers.isEmpty())
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
final String matchText = searchTerm.toLowerCase(Locale.ENGLISH);
for (User player : ess.getOnlineUsers())
{
continue;
if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(player.getBase()))
{
continue;
}
final String displayName = FormatUtil.stripFormat(player.getDisplayName()).toLowerCase(Locale.ENGLISH);
if (displayName.contains(matchText))
{
foundUser = true;
updatePlayer(server, sender, player, commandArgs);
}
}
}
else
{
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(matchPlayer))
{
continue;
}
foundUser = true;
updatePlayer(server, sender, player, commandArgs);
}
foundUser = true;
updatePlayer(server, sender, player, commandArgs);
}
if (!foundUser)
{
@@ -118,7 +139,7 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand
}
else
{
final User player = getPlayer(server, searchTerm, !skipHidden, false);
final User player = getPlayer(server, sender, searchTerm);
updatePlayer(server, sender, player, commandArgs);
}
}

View File

@@ -37,13 +37,13 @@ public abstract class EssentialsToggleCommand extends EssentialsCommand
throw new PlayerNotFoundException();
}
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.vanish.interact");
boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(args[0]);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(matchPlayer))
{
continue;
}

View File

@@ -0,0 +1,36 @@
package com.earth2me.essentials.craftbukkit;
import com.earth2me.essentials.User;
import java.util.Iterator;
import java.util.Set;
import net.ess3.api.IEssentials;
import org.bukkit.BanEntry;
import org.bukkit.BanList;
public class BanLookup
{
public static Boolean isBanned(IEssentials ess, User user)
{
return isBanned(ess, user.getName());
}
public static Boolean isBanned(IEssentials ess, String name)
{
return getBanEntry(ess, name) != null;
}
public static BanEntry getBanEntry(IEssentials ess, String name)
{
Set<BanEntry> benteries = ess.getServer().getBanList(BanList.Type.NAME).getBanEntries();
for (BanEntry banEnt : benteries)
{
if (banEnt.getTarget().equals(name))
{
return banEnt;
}
}
return null;
}
}

View File

@@ -24,6 +24,7 @@ package com.earth2me.essentials.metrics;
* should not be interpreted as representing official policies, either expressed or implied, of anybody else.
*/
import com.earth2me.essentials.IEssentials;
import java.io.*;
import java.net.Proxy;
import java.net.URL;
@@ -352,7 +353,7 @@ public class Metrics
boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled
String pluginVersion = description.getVersion();
String serverVersion = Bukkit.getVersion();
int playersOnline = Bukkit.getServer().getOnlinePlayers().length;
int playersOnline = ((IEssentials)plugin).getOnlinePlayers().size();
// END server software specific section -- all code below does not use any code outside of this class / Java

View File

@@ -25,7 +25,14 @@ public class PermissionsExHandler extends SuperpermsHandler
{
return null;
}
return user.getGroupsNames()[0];
String[] groupsNames = user.getGroupsNames();
if (groupsNames == null || groupsNames.length == 0)
{
return null;
}
return groupsNames[0];
}
@Override
@@ -36,7 +43,14 @@ public class PermissionsExHandler extends SuperpermsHandler
{
return null;
}
return Arrays.asList(user.getGroupsNames());
String[] groupsNames = user.getGroupsNames();
if (groupsNames == null)
{
return null;
}
return Arrays.asList(groupsNames);
}
@Override

View File

@@ -1,5 +1,6 @@
package com.earth2me.essentials.perm;
import com.earth2me.essentials.Essentials;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
@@ -13,46 +14,50 @@ public class PermissionsHandler implements IPermissionsHandler
{
private transient IPermissionsHandler handler = new NullPermissionsHandler();
private transient String defaultGroup = "default";
private final transient Plugin plugin;
private final transient Essentials ess;
private static final Logger LOGGER = Logger.getLogger("Essentials");
private transient boolean useSuperperms = false;
public PermissionsHandler(final Plugin plugin)
public PermissionsHandler(final Essentials plugin)
{
this.plugin = plugin;
this.ess = plugin;
}
public PermissionsHandler(final Plugin plugin, final boolean useSuperperms)
public PermissionsHandler(final Essentials plugin, final boolean useSuperperms)
{
this.plugin = plugin;
this.ess = plugin;
this.useSuperperms = useSuperperms;
}
public PermissionsHandler(final Plugin plugin, final String defaultGroup)
public PermissionsHandler(final Essentials plugin, final String defaultGroup)
{
this.plugin = plugin;
this.ess = plugin;
this.defaultGroup = defaultGroup;
}
@Override
public String getGroup(final Player base)
{
final long start = System.nanoTime();
String group = handler.getGroup(base);
if (group == null)
{
group = defaultGroup;
}
checkPermLag(start);
return group;
}
@Override
public List<String> getGroups(final Player base)
{
final long start = System.nanoTime();
List<String> groups = handler.getGroups(base);
if (groups == null || groups.isEmpty())
{
groups = Collections.singletonList(defaultGroup);
}
checkPermLag(start);
return Collections.unmodifiableList(groups);
}
@@ -65,7 +70,10 @@ public class PermissionsHandler implements IPermissionsHandler
@Override
public boolean inGroup(final Player base, final String group)
{
return handler.inGroup(base, group);
final long start = System.nanoTime();
final boolean result = handler.inGroup(base, group);
checkPermLag(start);
return result;
}
@Override
@@ -77,28 +85,32 @@ public class PermissionsHandler implements IPermissionsHandler
@Override
public String getPrefix(final Player base)
{
final long start = System.nanoTime();
String prefix = handler.getPrefix(base);
if (prefix == null)
{
prefix = "";
}
checkPermLag(start);
return prefix;
}
@Override
public String getSuffix(final Player base)
{
final long start = System.nanoTime();
String suffix = handler.getSuffix(base);
if (suffix == null)
{
suffix = "";
}
checkPermLag(start);
return suffix;
}
public void checkPermissions()
{
final PluginManager pluginManager = plugin.getServer().getPluginManager();
final PluginManager pluginManager = ess.getServer().getPluginManager();
final Plugin permExPlugin = pluginManager.getPlugin("PermissionsEx");
if (permExPlugin != null && permExPlugin.isEnabled())
@@ -172,7 +184,7 @@ public class PermissionsHandler implements IPermissionsHandler
if (!(handler instanceof ZPermissionsHandler))
{
LOGGER.log(Level.INFO, "Essentials: Using zPermissions based permissions.");
handler = new ZPermissionsHandler(plugin);
handler = new ZPermissionsHandler(ess);
}
return;
}
@@ -191,7 +203,7 @@ public class PermissionsHandler implements IPermissionsHandler
{
LOGGER.log(Level.INFO, "Essentials: Using config file enhanced permissions.");
LOGGER.log(Level.INFO, "Permissions listed in as player-commands will be given to all users.");
handler = new ConfigPermissionsHandler(plugin);
handler = new ConfigPermissionsHandler(ess);
}
}
}
@@ -205,4 +217,13 @@ public class PermissionsHandler implements IPermissionsHandler
{
return handler.getClass().getSimpleName().replace("Handler", "");
}
private void checkPermLag(long start)
{
final long elapsed = System.nanoTime() - start;
if (elapsed > ess.getSettings().getPermissionsLagWarning())
{
ess.getLogger().log(Level.INFO, "Lag Notice - Slow Permissions System (" + getName() + ") Response - Request took over {0}ms!", elapsed / 1000000.0);
}
}
}

View File

@@ -29,7 +29,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBreak(final BlockBreakEvent event)
public void onSignBlockBreak(final BlockBreakEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -86,7 +86,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onSignChange2(final SignChangeEvent event)
public void onSignSignChange2(final SignChangeEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -113,7 +113,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onSignChange(final SignChangeEvent event)
public void onSignSignChange(final SignChangeEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -138,7 +138,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event)
public void onSignBlockPlace(final BlockPlaceEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -172,7 +172,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockBurn(final BlockBurnEvent event)
public void onSignBlockBurn(final BlockBurnEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -201,7 +201,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockIgnite(final BlockIgniteEvent event)
public void onSignBlockIgnite(final BlockIgniteEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -230,7 +230,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockPistonExtend(final BlockPistonExtendEvent event)
public void onSignBlockPistonExtend(final BlockPistonExtendEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -261,7 +261,7 @@ public class SignBlockListener implements Listener
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockPistonRetract(final BlockPistonRetractEvent event)
public void onSignBlockPistonRetract(final BlockPistonRetractEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -271,23 +271,33 @@ public class SignBlockListener implements Listener
if (event.isSticky())
{
final Block block = event.getBlock();
if (((block.getType() == WALL_SIGN
|| block.getType() == SIGN_POST)
&& EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block)))
|| EssentialsSign.checkIfBlockBreaksSigns(block))
final Block pistonBaseBlock = event.getBlock();
final Block[] affectedBlocks = new Block[]
{
event.setCancelled(true);
return;
}
for (EssentialsSign sign : ess.getSettings().enabledSigns())
pistonBaseBlock,
pistonBaseBlock.getRelative(event.getDirection()),
event.getRetractLocation().getBlock()
};
for (Block block : affectedBlocks)
{
if (sign.areHeavyEventRequired() && sign.getBlocks().contains(block.getType())
&& !sign.onBlockPush(block, ess))
if (((block.getType() == WALL_SIGN
|| block.getType() == SIGN_POST)
&& EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block)))
|| EssentialsSign.checkIfBlockBreaksSigns(block))
{
event.setCancelled(true);
return;
}
for (EssentialsSign sign : ess.getSettings().enabledSigns())
{
if (sign.areHeavyEventRequired() && sign.getBlocks().contains(block.getType())
&& !sign.onBlockPush(block, ess))
{
event.setCancelled(true);
return;
}
}
}
}
}

View File

@@ -20,7 +20,7 @@ public class SignEntityListener implements Listener
}
@EventHandler(priority = EventPriority.LOW)
public void onEntityExplode(final EntityExplodeEvent event)
public void onSignEntityExplode(final EntityExplodeEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -50,7 +50,7 @@ public class SignEntityListener implements Listener
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEntityChangeBlock(final EntityChangeBlockEvent event)
public void onSignEntityChangeBlock(final EntityChangeBlockEvent event)
{
if (ess.getSettings().areSignsDisabled())
{

View File

@@ -37,6 +37,7 @@ public class SignInfo extends EssentialsSign
final IText input;
try
{
player.setDisplayNick();
input = new TextInput(player.getSource(), "info", true, ess);
final IText output = new KeywordReplacer(input, player.getSource(), ess);
final TextPager pager = new TextPager(output);

View File

@@ -59,10 +59,11 @@ public class SignKit extends EssentialsSign
charge.isAffordableFor(player);
try
{
final Map<String, Object> kit = ess.getSettings().getKit(kitName);
Kit.checkTime(player, kitName, kit);
final List<String> items = Kit.getItems(ess, player, kitName, kit);
Kit.expandItems(ess, player, items);
final Kit kit = new Kit(kitName, ess);
kit.checkDelay(player);
kit.setTime(player);
kit.expandItems(player);
charge.charge(player);
Trade.log("Sign", "Kit", "Interact", username, null, username, charge, sign.getBlock().getLocation(), ess);
}

View File

@@ -26,7 +26,7 @@ public class SignPlayerListener implements Listener
//This is because when the block place is cancelled (for example not enough space for the block to be placed),
//the event will be marked as cancelled, thus preventing 30% of sign purchases.
@EventHandler(priority = EventPriority.LOW)
public void onPlayerInteract(final PlayerInteractEvent event)
public void onSignPlayerInteract(final PlayerInteractEvent event)
{
if (ess.getSettings().areSignsDisabled())
{

View File

@@ -118,27 +118,39 @@ public class SignTrade extends EssentialsSign
@Override
protected boolean onSignBreak(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, MaxMoneyException
{
if ((sign.getLine(3).length() > 3 && sign.getLine(3).substring(2).equalsIgnoreCase(username))
|| player.isAuthorized("essentials.signs.trade.override"))
final String signOwner = sign.getLine(3);
final boolean isOwner = (signOwner.length() > 3 && signOwner.substring(2).equalsIgnoreCase(username));
final boolean canBreak = isOwner ? true : player.isAuthorized("essentials.signs.trade.override");
final boolean canCollect = isOwner ? true : player.isAuthorized("essentials.signs.trade.override.collect");
if (canBreak)
{
try
{
final Trade stored1 = getTrade(sign, 1, AmountType.TOTAL, false, ess);
final Trade stored2 = getTrade(sign, 2, AmountType.TOTAL, false, ess);
Map<Integer, ItemStack> withdraw1 = stored1.pay(player, OverflowType.RETURN);
Map<Integer, ItemStack> withdraw2 = stored2.pay(player, OverflowType.RETURN);
if (!canCollect)
{
Trade.log("Sign", "Trade", "Destroy", signOwner, stored2, username, stored1, sign.getBlock().getLocation(), ess);
return true;
}
final Map<Integer, ItemStack> withdraw1 = stored1.pay(player, OverflowType.RETURN);
final Map<Integer, ItemStack> withdraw2 = stored2.pay(player, OverflowType.RETURN);
if (withdraw1 == null && withdraw2 == null)
{
Trade.log("Sign", "Trade", "Break", username, stored2, username, stored1, sign.getBlock().getLocation(), ess);
Trade.log("Sign", "Trade", "Break", signOwner, stored2, username, stored1, sign.getBlock().getLocation(), ess);
return true;
}
setAmount(sign, 1, BigDecimal.valueOf(withdraw1 == null ? 0L : withdraw1.get(0).getAmount()), ess);
Trade.log("Sign", "Trade", "Withdraw", username, stored1, username, withdraw1 == null ? null : new Trade(withdraw1.get(0), ess), sign.getBlock().getLocation(), ess);
Trade.log("Sign", "Trade", "Withdraw", signOwner, stored1, username, withdraw1 == null ? null : new Trade(withdraw1.get(0), ess), sign.getBlock().getLocation(), ess);
setAmount(sign, 2, BigDecimal.valueOf(withdraw2 == null ? 0L : withdraw2.get(0).getAmount()), ess);
Trade.log("Sign", "Trade", "Withdraw", username, stored2, username, withdraw2 == null ? null : new Trade(withdraw2.get(0), ess), sign.getBlock().getLocation(), ess);
Trade.log("Sign", "Trade", "Withdraw", signOwner, stored2, username, withdraw2 == null ? null : new Trade(withdraw2.get(0), ess), sign.getBlock().getLocation(), ess);
sign.updateSign();
}

View File

@@ -66,8 +66,6 @@ public class KeywordReplacer implements IText
if (sender.isPlayer())
{
user = ess.getUser(sender.getPlayer());
//This is just so any displayname lookups below show the correct nickname
user.setDisplayNick();
}
execTimer.mark("User Grab");
@@ -168,14 +166,14 @@ public class KeywordReplacer implements IText
break;
case ONLINE:
int playerHidden = 0;
for (Player p : ess.getServer().getOnlinePlayers())
for (User u : ess.getOnlineUsers())
{
if (ess.getUser(p).isHidden())
if (u.isHidden())
{
playerHidden++;
}
}
replacer = Integer.toString(ess.getServer().getOnlinePlayers().length - playerHidden);
replacer = Integer.toString(ess.getOnlinePlayers().size() - playerHidden);
break;
case UNIQUE:
replacer = Integer.toString(ess.getUserMap().getUniqueUsers());
@@ -207,11 +205,11 @@ public class KeywordReplacer implements IText
}
else
{
showHidden = user.isAuthorized("essentials.list.hidden") || user.isAuthorized("essentials.vanish.interact");
showHidden = user.isAuthorized("essentials.list.hidden") || user.canInteractVanished();
}
//First lets build the per group playerlist
final Map<String, List<User>> playerList = PlayerList.getPlayerLists(ess, showHidden);
final Map<String, List<User>> playerList = PlayerList.getPlayerLists(ess, user, showHidden);
outputList = new HashMap<String, String>();
for (String groupName : playerList.keySet())
{
@@ -224,7 +222,7 @@ public class KeywordReplacer implements IText
//Now lets build the all user playerlist
final StringBuilder playerlistBuilder = new StringBuilder();
for (Player p : ess.getServer().getOnlinePlayers())
for (Player p : ess.getOnlinePlayers())
{
if (ess.getUser(p).isHidden())
{

View File

@@ -9,9 +9,15 @@ import java.util.regex.Pattern;
public class DateUtil
{
private static Pattern timePattern = Pattern.compile("(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*(?:s[a-z]*)?)?", Pattern.CASE_INSENSITIVE);
public static String removeTimePattern(String input)
{
return timePattern.matcher(input).replaceFirst("").trim();
}
public static long parseDateDiff(String time, boolean future) throws Exception
{
Pattern timePattern = Pattern.compile("(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*(?:s[a-z]*)?)?", Pattern.CASE_INSENSITIVE);
Matcher m = timePattern.matcher(time);
int years = 0;
int months = 0;

View File

@@ -61,15 +61,7 @@ public class LocationUtil
HOLLOW_MATERIALS.add(Material.FENCE_GATE.getId());
HOLLOW_MATERIALS.add(Material.WATER_LILY.getId());
HOLLOW_MATERIALS.add(Material.NETHER_WARTS.getId());
try // 1.6 update
{
HOLLOW_MATERIALS.add(Material.CARPET.getId());
}
catch (java.lang.NoSuchFieldError e)
{
Essentials.wrongVersion();
}
HOLLOW_MATERIALS.add(Material.CARPET.getId());
for (Integer integer : HOLLOW_MATERIALS)
{
@@ -222,6 +214,22 @@ public class LocationUtil
return HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType().getId());
}
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())
{
return false;
}
if (isBlockDamaging(world, x, y, z))
{
return true;
}
return isBlockAboveAir(world, x, y, z);
}
public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z)
{
if (isBlockDamaging(world, x, y, z))
@@ -265,9 +273,9 @@ public class LocationUtil
public static Location getSafeDestination(final IUser user, final Location loc) throws Exception
{
if (loc.getWorld().equals(user.getBase().getWorld())
&& ((user.getBase().getGameMode() == GameMode.CREATIVE
|| user.isGodModeEnabled()) && user.getBase().getAllowFlight()))
if (user.getBase().isOnline() && loc.getWorld().equals(user.getBase().getWorld())
&& (user.getBase().getGameMode() == GameMode.CREATIVE || user.isGodModeEnabled())
&& user.getBase().getAllowFlight())
{
if (shouldFly(loc))
{

View File

@@ -7,18 +7,19 @@ import java.util.regex.Pattern;
public class StringUtil
{
private static final Pattern INVALIDFILECHARS = Pattern.compile("[^a-z0-9-]");
private static final Pattern STRICTINVALIDCHARS = Pattern.compile("[^a-z0-9]");
private static final Pattern INVALIDCHARS = Pattern.compile("[^\t\n\r\u0020-\u007E\u0085\u00A0-\uD7FF\uE000-\uFFFC]");
//Used to clean file names before saving to disk
public static String sanitizeFileName(final String name)
{
return safeString(name);
return INVALIDFILECHARS.matcher(name.toLowerCase(Locale.ENGLISH)).replaceAll("_");
}
//Used to clean strings/names before saving as filenames/permissions
public static String safeString(final String string)
{
return INVALIDFILECHARS.matcher(string.toLowerCase(Locale.ENGLISH)).replaceAll("_");
return STRICTINVALIDCHARS.matcher(string.toLowerCase(Locale.ENGLISH)).replaceAll("_");
}
//Less restrictive string sanitizing, when not used as perm or filename

View File

@@ -35,8 +35,8 @@ change-displayname: true
# The value of change-displayname (above) has to be true.
#change-playerlist: true
# When essentialschat.jar isn't used, force essentials to add the prefix and suffix from permission plugins to displayname.
# This setting is ignored if essentialschat.jar is used, and defaults to 'true'.
# When EssentialsChat.jar isn't used, force essentials to add the prefix and suffix from permission plugins to displayname.
# This setting is ignored if EssentialsChat.jar is used, and defaults to 'true'.
# The value of change-displayname (above) has to be true.
# Do not edit this setting unless you know what you are doing!
#add-prefix-suffix: false
@@ -60,7 +60,7 @@ teleport-invulnerability: 4
heal-cooldown: 60
# What to prevent from /item and /give.
# e.g item-spawn-blacklist: 46,11,10
# e.g item-spawn-blacklist: 10,11,46
item-spawn-blacklist:
# Set this to true if you want permission based item spawn rules.
@@ -86,7 +86,7 @@ spawnmob-limit: 10
# Shall we notify users when using /lightning?
warn-on-smite: true
# motd and rules are now configured in the files motd.txt and rules.txt.
# The motd and rules are now configured in the files motd.txt and rules.txt.
# When a command conflicts with another plugin, by default, Essentials will try to force the OTHER plugin to take priority.
# Commands in this list, will tell Essentials to 'not give up' the command to other plugins.
@@ -94,7 +94,7 @@ warn-on-smite: true
#
# If you have two plugin with the same command and you wish to force Essentials to take over, you need an alias.
# To force essentials to take 'god' alias 'god' to 'egod'.
# See http://wiki.bukkit.org/Commands.yml#aliases for more information
# See http://wiki.bukkit.org/Commands.yml#aliases for more information.
overridden-commands:
# - god
@@ -110,6 +110,7 @@ disabled-commands:
# These commands will be shown to players with socialSpy enabled.
# You can add commands from other plugins you may want to track or
# remove commands that are used for something you dont want to spy on.
# Set - '*' in order to listen on all possible commands.
socialspy-commands:
- msg
- w
@@ -222,8 +223,9 @@ player-commands:
# 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
# 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:
@@ -258,7 +260,7 @@ kits:
# Essentials Sign Control
# See http://wiki.ess3.net/wiki/Sign_Tutorial for instructions on how to use these.
# To enable signs, remove # symbol. To disable all signs, comment/remove each sign.
# Essentials Colored sign support will be enabled when any sign types are enabled.
# Essentials colored sign support will be enabled when any sign types are enabled.
# Color is not an actual sign, it's for enabling using color codes on signs, when the correct permissions are given.
enabledSigns:
@@ -321,11 +323,11 @@ debug: false
# For more information, visit http://wiki.ess3.net/wiki/Locale
#locale: en
# Turn off god mode when people exit.
# Turn off god mode when people leave the server.
remove-god-on-disconnect: false
# Auto-AFK
# After this timeout in seconds, the user will be set as afk.
# After this timeout in seconds, the user will be set as AFK.
# This feature requires the player to have essentials.afk.auto node.
# Set to -1 for no timeout.
auto-afk: 300
@@ -336,21 +338,21 @@ auto-afk: 300
# Set to -1 for no timeout.
auto-afk-kick: -1
# Set this to true, if you want to freeze the player, if he is afk.
# Other players or monsters can't push him out of afk mode then.
# This will also enable temporary god mode for the afk player.
# The player has to use the command /afk to leave the afk mode.
# Set this to true, if you want to freeze the player, if the player is AFK.
# Other players or monsters can't push the player out of AFK mode then.
# This will also enable temporary god mode for the AFK player.
# The player has to use the command /afk to leave the AFK mode.
freeze-afk-players: false
# When the player is afk, should he be able to pickup items?
# When the player is AFK, should he be able to pickup items?
# Enable this, when you don't want people idling in mob traps.
disable-item-pickup-while-afk: false
# This setting controls if a player is marked as active on interaction.
# When this setting is false, you will need to manually un-AFK using the /afk command.
# When this setting is false, the player would need to manually un-AFK using the /afk command.
cancel-afk-on-interact: true
# Should we automatically remove afk status when the player moves?
# Should we automatically remove afk status when a player moves?
# Player will be removed from AFK on chat/command regardless of this setting.
# Disable this to reduce server lag.
cancel-afk-on-move: true
@@ -358,8 +360,9 @@ cancel-afk-on-move: true
# You can disable the death messages of Minecraft here.
death-messages: true
# Should operators be able to join and part silently.
# You can control this with permissions if it is enabled.
# Should players with permissions be able to join and part silently?
# You can control this with essentials.silentjoin and essentials.silentquit permissions if it is enabled.
# In addition, people with essentials.silentjoin.vanish will be vanished on join.
allow-silent-join-quit: false
# You can set a custom join message here, set to "none" to disable.
@@ -399,7 +402,7 @@ repair-enchanted: true
# Warning: Mixing and overleveling some enchantments can cause issues with clients, servers and plugins.
unsafe-enchantments: false
#Do you want essentials to keep track of previous location for /back in the teleport listener?
#Do you want Essentials to keep track of previous location for /back in the teleport listener?
#If you set this to true any plugin that uses teleport will have the previous location registered.
register-back-in-listener: false
@@ -446,8 +449,9 @@ sethome-multiple:
staff: 10
# 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 timeout in seconds for players to accept tpa before request is cancelled.
# 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
@@ -459,7 +463,7 @@ tpa-accept-cancellation: 120
# For more information, visit http://wiki.ess3.net/wiki/Essentials_Economy
# Defines the balance with which new players begin. Defaults to 0.
# Defines the balance with which new players begin. Defaults to 0.
starting-balance: 0
# worth-# defines the value of an item when it is sold to the server via /sell.
@@ -474,6 +478,8 @@ command-costs:
#kit-tools: 1500
# Set this to a currency symbol you want to use.
# Remember, if you want to use special characters in this document,
# such as accented letters, you MUST save the file as UTF-8, not ANSI.
currency-symbol: '$'
# Set the maximum amount of money a player can have.
@@ -508,7 +514,7 @@ hide-permissionless-help: true
# +------------------------------------------------------+ #
############################################################
# This section requires essentialschat.jar to work.
# This section requires the EssentialsChat.jar to work.
chat:
@@ -521,7 +527,6 @@ 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.
# If set to the default chat format which "should" be compatible with ichat.
# For more information of chat formatting, check out the wiki: http://wiki.ess3.net/wiki/Chat_Formatting
format: '<{DISPLAYNAME}> {MESSAGE}'
@@ -539,7 +544,7 @@ chat:
# +------------------------------------------------------+ #
############################################################
# This section requires essentialsprotect.jar to work.
# This section requires the EssentialsProtect.jar to work.
protect:
@@ -654,7 +659,7 @@ protect:
# +------------------------------------------------------+ #
############################################################
# This section requires essentialsantibuild.jar to work.
# This section requires the EssentialsAntiBuild.jar to work.
# Disable various default physics and behaviors
# For more information, visit http://wiki.ess3.net/wiki/AntiBuild
@@ -729,4 +734,4 @@ respawn-listener-priority: high
# When users die, should they respawn at their first home or bed, instead of the spawnpoint?
respawn-at-home: false
# End of File <-- No seriously, you're done with configuration.
# End of file <-- No seriously, you're done with configuration.

View File

@@ -53,4 +53,4 @@ Minecraft colors:
&6Time of world:&r {WORLDTIME24}
&6Date of world:&r {WORLDDATE}
&6Plugin list:&r {PLUGINS}
&6Version of Craftbukkit:&r {VERSION}
&6Version of CraftBukkit:&r {VERSION}

View File

@@ -4579,15 +4579,27 @@ salmonfish,349,1
rawsalmon,349,1
rasalmon,349,1
salmon,349,1
sfish,349,1
fishs,349,1
rawclownfish,349,2
raclownfish,349,2
clownfish,349,2
rawnemo,349,2
ranemo,349,2
nemo,349,2
nemofish,349,2
fishnemo,349,2
clfish,349,2
fishcl,349,2
nfish,349,2
fishn,349,2
rawpufferfish,349,3
rapufferfish,349,3
pufferfish,349,3
pufffish,349,3
fishpuff,349,3
pfish,349,3
fishp,349,3
cookedfish,350,0
cookfish,350,0
cfish,350,0
1 #version: TeamCity
4579 rawsalmon,349,1
4580 rasalmon,349,1
4581 salmon,349,1
4582 sfish,349,1
4583 fishs,349,1
4584 rawclownfish,349,2
4585 raclownfish,349,2
4586 clownfish,349,2
4587 rawnemo,349,2
4588 ranemo,349,2
4589 nemo,349,2
4590 nemofish,349,2
4591 fishnemo,349,2
4592 clfish,349,2
4593 fishcl,349,2
4594 nfish,349,2
4595 fishn,349,2
4596 rawpufferfish,349,3
4597 rapufferfish,349,3
4598 pufferfish,349,3
4599 pufffish,349,3
4600 fishpuff,349,3
4601 pfish,349,3
4602 fishp,349,3
4603 cookedfish,350,0
4604 cookfish,350,0
4605 cfish,350,0

View File

@@ -27,7 +27,7 @@ balance=\u00a7aBalance\:\u00a7c {0}
balanceOther=\u00a7aBalance of {0}\u00a7a\:\u00a7c {1}
balanceTop=\u00a76Top balances ({0})
banExempt=\u00a74You cannot ban that player.
banFormat=\u00a74Banned\:\n\u00a7r{0}
banFormat=\u00a7cYou have been banned\:\n\u00a7r{0}
bed=\u00a7obed\u00a7r
bedMissing=\u00a74Your bed is either unset, missing or blocked.
bedNull=\u00a7mbed\u00a7r
@@ -99,7 +99,7 @@ enchantmentNotFound=\u00a74Enchantment not found\!
enchantmentPerm=\u00a74You do not have the permission for\u00a7c {0}\u00a74.
enchantmentRemoved=\u00a76The enchantment\u00a7c {0} \u00a76has been removed from your item in hand.
enchantments=\u00a76Enchantments\:\u00a7r {0}
errorCallingCommand=Error calling command /{0}.
errorCallingCommand=Error calling the command /{0}
errorWithMessage=\u00a7cError\:\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
@@ -129,7 +129,7 @@ gcmax=\u00a76Maximum memory\:\u00a7c {0} MB.
gctotal=\u00a76Allocated memory\:\u00a7c {0} MB.
geoIpUrlEmpty=GeoIP download url is empty.
geoIpUrlInvalid=GeoIP download url is invalid.
geoipJoinFormat=\u00a76Player \u00a7c{0} \u00a76comes from\u00a7c {1}\u00a76.
geoipJoinFormat=\u00a76Player \u00a7c{0} \u00a76comes from \u00a7c{1}\u00a76.
giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76.
godDisabledFor=\u00a7cdisabled\u00a76 for\u00a7c {0}
godEnabledFor=\u00a7aenabled\u00a76 for\u00a7c {0}
@@ -155,7 +155,7 @@ holdBook=\u00a74You are not holding a writable book.
holdFirework=\u00a74You must be holding a firework to add effects.
holdPotion=\u00a74You must be holding a potion to apply effects to it.
holeInFloor=\u00a74Hole in floor\!
homeSet=\u00a76Home set.
homeSet=\u00a76Home set to current location.
homes=\u00a76Homes\:\u00a7r {0}
hour=hour
hours=hours
@@ -321,8 +321,8 @@ 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}.
pendingTeleportCancelled=\u00a74Pending teleportation request cancelled.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\:\u00a7c {1}\u00a76.
playerBanned=\u00a76Player\u00a7c {0} \u00a76banned\u00a7c {1} \u00a76for \u00a7c{2}\u00a76.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a76Player\u00a7c {0} \u00a76banned\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerInJail=\u00a74Player is already in jail\u00a7c {0}\u00a74.
playerJailed=\u00a76Player\u00a7c {0} \u00a76jailed.
playerJailedFor=\u00a76Player\u00a7c {0} \u00a76jailed for {1}.
@@ -345,7 +345,7 @@ potions=\u00a76Potions\:\u00a7r {0}\u00a76.
powerToolAir=\u00a74Command can''t be attached to air.
powerToolAlreadySet=\u00a74Command \u00a7c{0}\u00a74 is already assigned to \u00a7c{1}\u00a74.
powerToolAttach=\u00a7c{0}\u00a76 command assigned to {1}.
powerToolClearAll=\u00a76All power tool commands have been cleared.
powerToolClearAll=\u00a76All powertool commands have been cleared.
powerToolList=\u00a76Item \u00a7c{1} \u00a76has the following commands\: \u00a7c{0}\u00a76.
powerToolListEmpty=\u00a74Item \u00a7c{0} \u00a74has no commands assigned.
powerToolNoSuchCommandAssigned=\u00a74Command \u00a7c{0}\u00a74 has not been assigned to \u00a7c{1}\u00a74.
@@ -404,7 +404,7 @@ soloMob=\u00a74That mob likes to be alone.
spawnSet=\u00a76Spawn location set for group\u00a7c {0}\u00a76.
spawned=spawned
sudoExempt=\u00a74You cannot sudo this user.
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1} {2}
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a76Goodbye cruel world...
suicideSuccess=\u00a76Player \u00a7c{0} \u00a76took their own life.
survival=survival
@@ -420,12 +420,13 @@ teleportRequest=\u00a7c{0}\u00a76 has requested to teleport to you.
teleportRequestTimeoutInfo=\u00a76This request will timeout after\u00a7c {0} seconds\u00a76.
teleportTop=\u00a76Teleporting to top.
teleportationCommencing=\u00a76Teleportation commencing...
teleportationDisabled=\u00a76Teleportation disabled.
teleportationDisabledFor=\u00a76Teleportation disabled for \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportation enabled.
teleportationEnabledFor=\u00a76Teleportation enabled for \u00a7c{0}\u00a76.
teleportationDisabled=\u00a76Teleportation \u00a7cdisabled\u00a76.
teleportationDisabledFor=\u00a76Teleportation \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportation \u00a7cenabled\u00a76.
teleportationEnabledFor=\u00a76Teleportation \u00a7cenabled \u00a76for \u00a7c{0}\u00a76.
teleporting=\u00a76Teleporting...
tempBanned=Temporarily banned from server for {0}.
teleportToPlayer=\u00a76Teleporting to \u00a7c{0}\u00a76.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a74You may not tempban that player.
thunder=\u00a76You\u00a7c {0} \u00a76thunder in your world.
thunderDuration=\u00a76You\u00a7c {0} \u00a76thunder in your world for\u00a7c {1} \u00a76seconds.
@@ -473,7 +474,7 @@ voiceSilenced=\u00a76Your voice has been silenced\!
walking=walking
warpDeleteError=\u00a74Problem deleting the warp file.
warpList={0}
warpListPermission=\u00a74You do not have Permission to list warps.
warpListPermission=\u00a74You do not have permission to list warps.
warpNotExist=\u00a74That warp does not exist.
warpOverwrite=\u00a74You cannot overwrite that warp.
warpSet=\u00a76Warp\u00a7c {0} \u00a76set.
@@ -531,19 +532,26 @@ banExemptOffline=\u00a74You may not ban offline players.
tempbanExemptOffline=\u00a74You may not tempban offline players.
mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You cannot ignore that player.
ignoreExempt=\u00a74You may not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
skullChanged=\u00a76Skull changed to \u00a7c{0}\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player skull.
weatherInvalidWorld=World named {0} not found!
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 characters.
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
seenAccounts=\u00a76Player has also been known as\:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

View File

@@ -92,7 +92,7 @@ downloadingGeoIp=Stahuji GeoIP databazi ... muze to chvilku trvat (staty\: 0.6 M
duplicatedUserdata=Duplikovane data hrace\: {0} and {1}
durability=\u00a77Tomuto nastroji zbyva \u00a7c{0}\u00a77 pouziti.
editBookContents=\u00a7eNyni muzes upravovat obsah teto knihy.
enableUnlimited=\u00a77Davam neomezene mnozstvi {0} hraci {1}.
enableUnlimited=\u00a76D\u00e1t neomezen\u00e9 mno\u017estv\u00ed\u00a7c {0} \u00a76na \u00a7c{1}\u00a76.
enabled=povoleno
enchantmentApplied=\u00a77Enchant {0} byl aplikovan na tvuj nastroj v ruce.
enchantmentNotFound=\u00a7cTento enchant neexistuje
@@ -103,7 +103,7 @@ errorCallingCommand=Chyba pri volani prikazu /{0}
errorWithMessage=\u00a7cChyba\: {0}
essentialsHelp1=Soubor je poskozen a Essentials jej nemuze otevrit. Essentials jsou zablokovany. Pokud nemuzete soubor opravit sami, navstivte http\://tiny.cc/EssentialsChat
essentialsHelp2=Soubor je poskozen a Essentials jej nemuze otevrit. Essentials jsou zablokovany. Pokud nemuzete soubor opravit sami, pak napiste /essentialshelp ve hre nebo navstivte http\://tiny.cc/EssentialsChat
essentialsReload=\u00a77Essentials znovu nacteny. {0}
essentialsReload=\u00a76Essentials restartovan\u00fd\u00a7c {0}.
exp=\u00a7c{0} \u00a77ma\u00a7c {1} \u00a77exp (level\u00a7c {2}\u00a77) a potrebuje\u00a7c {3} \u00a77 exp aby dosahl dalsiho levelu.
expSet=\u00a7c{0} \u00a77ma nyni\u00a7c {1} \u00a77exp.
extinguish=\u00a77Uhasil ses.
@@ -113,7 +113,7 @@ failedToCreateConfig=Chyba pri vytvoreni configu {0}
failedToWriteConfig=Chyba pri zapisovani do configu {0}
false=\u00a74Ne\u00a7f
feed=\u00a77Nasytil jsi se.
feedOther=\u00a77Nasytil jsi hrace {0}.
feedOther=\u00a76Nasytil jsi hrace \u00a7c{0}\u00a76.
fileRenameError=Prejmenovani souboru {0} selhalo.
fireworkColor=\u00a74Vlozeny neplatne parametry, nejprve musis nastavit barvu.
fireworkEffectsCleared=\u00a76Vsechny efekty byly odstraneny.
@@ -122,7 +122,7 @@ flyMode=\u00a77Povolil jsi letani hraci {0} hraci {1}.
flying=letani
foreverAlone=\u00a7cNemas komu odepsat.
fullStack=\u00a74Jiz mas cely stack.
gameMode=\u00a77Nastavil jsi herni mod na {0} hraci {1}.
gameMode=\u00a76Herni mod hrace \u00a7c{1} \u00a76byl nastaven na \u00a7c {0}\u00a76.
gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 chunku, \u00a7c{3}\u00a76 entit, \u00a7c{4}\u00a76 tile-entit.
gcfree=Volna pamet\: {0} MB
gcmax=Dostupna pamet\: {0} MB
@@ -131,7 +131,7 @@ geoIpUrlEmpty=Odkaz na stazeni GeoIP je prazdny.
geoIpUrlInvalid=Odkaz na stazeni GeoIP je chybny.
geoipJoinFormat=Hrac {0} prichazi z {1}
giveSpawn=\u00a76Dal jsi\u00a7c {0} \u00a76\u00a7c {1} hraci\u00a7c {2}\u00a76.
godDisabledFor=zakazan pro {0}
godDisabledFor=\u00a7cvypnuto\u00a76 pro\u00a7c {0}
godEnabledFor=povolen pro {0}
godMode=\u00a76Nesmrtelnost\u00a7c {0}\u00a76.
groupDoesNotExist=\u00a74Nikdo z teto skupiny neni online\!
@@ -168,10 +168,10 @@ infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Strana \u00a74{0}\u00a76/\u00
infoUnknownChapter=\u00a74Neznama kapitola.
insufficientFunds=\u00a74Nemas k dispozici dostatek hotovosti.
invalidCharge=\u00a7cNeplatny poplatek.
invalidFireworkFormat=\u00a76Nastaveni \u00a74{0} \u00a76nema platnou hodnotu pro \u00a74{1}\u00a76.
invalidFireworkFormat=\u00a74Nastaveni \u00a7c{0} \u00a74neni platna hodnota pro \u00a7c{1}\u00a74.
invalidHome=Domov {0} neexistuje.
invalidHomeName=\u00a74Spatny nazev domova
invalidMob=\u00a74Invalid mob type.
invalidMob=\u00a74Neplatny druh moba
invalidNumber=Neplatne cislo.
invalidPotion=\u00a74Nespravny lektvar.
invalidPotionMeta=\u00a74Nespravna metadata lektvaru\: \u00a7c{0}\u00a74.
@@ -203,11 +203,11 @@ kickDefault=Vyhozen ze serveru
kickExempt=\u00a7cNemuzes vyhodit tuhle osobu.
kickedAll=\u00a74Vykopl jsi vsechny hrace ze serveru.
kill=\u00a77Zabit {0}.
killExempt=\u00a74Nemuzes zabit hrace {0}
killExempt=\u00a74Nemuzes zabit hrace \u00a7c{0}\u00a74.
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitError2=\u00a7cTento kit neexistuje, nebo je chybne definovan.
kitError=\u00a7cNejsou zadne validni kity.
kitGiveTo=\u00a76Davam kit\u00a7c {0}\u00a76 hraci {1}\u00a7.
kitGiveTo=\u00a76Davam kit \u00a7c {0}\u00a76 hraci \u00a7c{1}\u00a76.
kitInvFull=\u00a7cMel jsi plny inventar, obsah kitu je na zemi.
kitNotFound=\u00a74Tento kit neexistuje.
kitOnce=\u00a74Jiz nemuzes tento kit pouzivat.
@@ -224,10 +224,10 @@ listGroupTag=\u00a76{0}\u00a7r\: \u00a7r
listHiddenTag=\u00a77[SKRYTY]\u00a7f
loadWarpError=Chyba pri nacitani warpu\: {0}
localFormat=[L]<{0}> {1}
mailClear=\u00a7cPokud chces vymazat mail, napis /mail clear.
mailClear=\u00a76Pokud chces vymazat mail, napis\u00a7c /mail clear\u00a76.
mailCleared=\u00a77Mail vymazan\!
mailSent=\u00a77Mail odeslan\!
markMailAsRead=\u00a7cPokud chces mail oznacit jako precteny, napis /mail clear
markMailAsRead=\u00a76Pokud chces vymazat mail, napis\u00a7c /mail clear\u00a76.
markedAsAway=\u00a77Jsi oznacen jako "AFK".
markedAsNotAway=\u00a77Jiz nejsi oznacen jako "AFK".
matchingIPAddress=\u00a76Nasledujici hraci byli prihlaseni z teto IP\:
@@ -236,7 +236,7 @@ mayNotJail=\u00a7cNesmis uveznit tuto postavu
me=ja
minute=minuta
minutes=minuty
missingItems=Nemas {0}x {1}.
missingItems=\u00a74Nemas \u00a7c{0}x {1}\u00a74.
mobSpawnError=Chyba pri pokusu o zmenu mob spawneru.
mobSpawnLimit=Pocet mobu limitovan serverem.
mobSpawnTarget=Musis se divat na spawner.
@@ -246,8 +246,8 @@ moneySentTo=\u00a7a{0} bylo odeslano hraci\: {1}
month=mesic
months=mesice
moreThanZero=Mnozstvi musi byt vetsi nez 0.
moveSpeed=\u00a77Nastavena rychlost {0} na {1} hraci {2}.
msgFormat=\u00a76[{0}\u00a76 -> {1}\u00a76] \u00a7r{2}
moveSpeed=\u00a76Nastavena \u00a7c{0} \u00a76rychlost hrace \u00a7c{2} \u00a76na \u00a7c{1}\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
multipleCharges=\u00a74Nelze pouzit vice jak jeden naboj pro tento ohnostroj.
multiplePotionEffects=\u00a74Nelze pouzit vice jak jeden efekt na tento lektvar.
muteExempt=\u00a7cTohoto hrace nemuzes umlcet.
@@ -262,12 +262,12 @@ nickDisplayName=\u00a77Musis nejdrive povolit change-displayname v Essentials co
nickInUse=\u00a7cTento nick jiz nekdo ma.
nickNamesAlpha=\u00a7cNick musi byt alfanumericky.
nickNoMore=\u00a77Uz nemas zadny nick.
nickSet=\u00a77Nyni mas nickname\: \u00a7c{0}
nickSet=\u00a76Tvuj nick je nyni \u00a7c{0}\u00a76.
nickTooLong=\u00a74Tento nick je prilis dlouhy.
noAccessCommand=\u00a7cNemas povoleni na tento prikaz.
noAccessPermission=\u00a7cNemas povoleni k tomuto {0}.
noAccessPermission=\u00a74Nem\u00e1\u0161 opr\u00e1vn\u011bn\u00ed k tomuto \u00a7c{0}\u00a74.
noBreakBedrock=Nemas opravneni nicit bedrock.
noDestroyPermission=\u00a7cNemas povoleni nicit ten {0}.
noDestroyPermission=\u00a74Ty nem\u016f\u017ee\u0161 ni\u010dit \u00a7c{0}\u00a74.
noDurability=\u00a7cTento predmet nema zadnou vydrz.
noGodWorldWarning=\u00a7cVarovani\! God-mode je v tomto svete zakazan.
noHelpFound=\u00a7cZadne shodujici prikazy.
@@ -300,8 +300,8 @@ now=nyni
nuke=Prsi na tebe smrt \:)
numberRequired=Hlupaku, musis vyplnit cislo.
onlyDayNight=/time podporuje pouze day/night.
onlyPlayerSkulls=\u00a74Muze nastavit pouze majitel hrackych hlav (397\:3).
onlyPlayers=Pouze hraci ve hre mohou pouzit\: {0}.
onlyPlayerSkulls=\u00a74M\u016f\u017ee nastavit pouze majitel hlavy hr\u00e1\u010de (\u00a7c397\:3\u00a74).
onlyPlayers=\u00a74Jen hraci ve hre muzou pouzit \u00a7c{0}\u00a74.
onlySunStorm=/weather podporuje pouze sun/storm.
orderBalances=Usporadavam bohatstvi {0} hracu, prosim vydrz ...
oversizedTempban=\u00a74Nemuzes potrestat hrace ne tak dlouhou dobu.
@@ -321,9 +321,9 @@ pWeatherPlayers=\u00a76Tito hraci maji sve vlastni pocasi\:\u00a7r
pWeatherReset=\u00a76Hracovo pocasi bylo resetovano na\: \u00a7c{0}
pWeatherSet=\u00a76Pocasi pro hrace \u00a7c{1}\u00a76 bylo nastaveno na\: \u00a7c{0}.
pendingTeleportCancelled=\u00a7cNevyresena zadost o teleportaci byla zrusena.
playerBanIpAddress=\u00a76Hraci\u00a7c {0} \u00a76byla zabanovana IP adresa {1}\u00a76.
playerBanned=\u00a76Admin\u00a7c {0} \u00a76zabanoval {1} \u00a76za {2}.
playerInJail=\u00a7cHrac je jiz uveznen {0}.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a76Hr\u00e1\u010d\u00a7c {0} \u00a76byl potrest\u00e1n\u00a7c {1} \u00a76za \u00a7c{2}\u00a76.
playerInJail=\u00a74Hr\u00e1\u010d u\u017e je ve v\u011bzen\u00ed\u00a7c {0}\u00a74.
playerJailed=\u00a77Hrac {0} byl uveznen.
playerJailedFor=\u00a77Hrac {0} uveznen za {1}.
playerKicked=\u00a7cAdmin {0} vyhodil {1} za {2}
@@ -340,33 +340,33 @@ posX=\u00a76X\: {0} (+Vychod <-> -Zapad)
posY=\u00a76Y\: {0} (+Nahoru <-> -Dolu)
posYaw=\u00a76Odchylka\: {0}
posZ=\u00a76Z\: {0} (+Jih <-> -Sever)
possibleWorlds=\u00a77Mozne svety jsou cisla 0 az {0}.
possibleWorlds=\u00a76Mozne svety jsou cisla v rozmezi \u00a7c0\u00a76 - \u00a7c{0}\u00a76.
potions=\u00a7 6 \u00a76Lektvary\:\u00a7r {0}.
powerToolAir=Prikaz nemuze byt spojen se vzduchem.
powerToolAlreadySet=Prikaz \u00a7c{0}\u00a7f je jiz spojen s {1}.
powerToolAlreadySet=\u00a74Prikaz \u00a7c{0}\u00a74 jiz je prirazen \u00a7c{1}\u00a74.
powerToolAttach=\u00a7c{0}\u00a7f prikaz pripsan k {1}.
powerToolClearAll=Vsechny mocne nastroje byli smazany.
powerToolList=Hrac {1} ma tyto prikazy\: \u00a7c{0}\u00a7f.
powerToolListEmpty={0} nema pripsany zadne prikazy.
powerToolNoSuchCommandAssigned=Prikaz \u00a7c{0}\u00a7f nebyl pripsan k {1}.
powerToolRemove=Prikaz \u00a7c{0}\u00a7f odstranen z {1}.
powerToolRemoveAll=Vsechny prikazy zruseny od {0}.
powerToolNoSuchCommandAssigned=\u00a74Prikaz \u00a7c{0}\u00a74 neni prirazen \u00a7c{1}\u00a74.
powerToolRemove=\u00a76Prikaz \u00a7c{0}\u00a76 odstranen z \u00a7c{1}\u00a76.
powerToolRemoveAll=\u00a76Vsechny prikazy byly odstraneny z \u00a7c{0}\u00a76.
powerToolsDisabled=Vsechny tve mocne nastroje byli zablokovany.
powerToolsEnabled=Vsechny tve mocne nastroje byli povoleny.
questionFormat=\u00a77[Otazka]\u00a7f {0}
readNextPage=Napis /{0} {1} pro precteni dalsi stranky.
recipe=\u00a76Recept na \u00a76{0}&6 ({1} z {2})
recipe=\u00a76Vypis receptu \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 z \u00a7c{2}\u00a76)
recipeBadIndex=Pro toto cislo neexistuje zadny recept.
recipeFurnace=\u00a76Prepal \u00a7c{0}
recipeGrid=\u00a7{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a0\u00a7{0}X \u00a76is \u00a7c{1}
recipeFurnace=\u00a76Prepal\: \u00a7 6 \u00a7c {0}.
recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a7c X \u00a76je \u00a7c {0} {1}
recipeMore=\u00a76Pouzij /{0} \u00a7c{1}\u00a76 <cislo> pro zobrazeni dalsich receptu pro \u00a7c{2}\u00a76.
recipeNone=Zadny recept na {0} neexistuje
recipeNothing=neni
recipeShapeless=\u00a76Zkombinuj \u00a7c{0}
recipeWhere=\u00a76Kde\: {0}
removed=\u00a77Odstraneno {0} entitit.
repair=Uspesne jsi opravil svuj nastroj\: \u00a7e{0}.
repair=\u00a76Uspesne jsi opravil tvoji \u00a7c{0}\u00a76.
repairAlreadyFixed=\u00a77Tento item nepotrebuje opravu.
repairEnchanted=\u00a77Nemas opravneni opravovat enchantovane itemy.
repairInvalidType=\u00a7cTento item nemuze byt opraven.
@@ -378,19 +378,19 @@ requestDeniedFrom=\u00a77{0} odmitl tvou zadost o teleport.
requestSent=\u00a77Zadost odeslana hraci {0}\u00a77.
requestTimedOut=\u00a7cZadost o teleportaci vyprsela.
requiredBukkit=* \! * Potrebujete minimalne verzi {0} Bukkitu, stahnete si ji z http\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a76Hotovost vsech online hracu byla resetovana na \u00a7a{0}\u00a76.
resetBalAll=\u00a76Hotovost vsech online hracu byla resetovana na \u00a7a{0}\u00a76.
returnPlayerToJailError=Nastala chyba pri pokusu navraceni hrace {0} do vezeni\: {1}
resetBal=\u00a76Hotovost vsech online hracu byla resetovana na \u00a7c{0}\u00a76.
resetBalAll=\u00a76Hotovost vsech hracu byla resetovana na \u00a7c{0}\u00a76.
returnPlayerToJailError=\u00a74Nastala chyba pri pokusu navratit hrace \u00a7c{0}\u00a74 do vezeni\: \u00a7c{1}\u00a74\!
runningPlayerMatch=\u00a76Zahajeno hledani odpovidajicich hracu ''\u00a7c{0}\u00a76'' (..muze to chvilku trvat...)
second=sekunda
seconds=sekundy
seenOffline=Hrac {0} je offline od {1}
seenOnline=Hrac {0} je online od {1}
seenOffline=\u00a76Hrac \u00a7c{0} \u00a76je \u00a74offline\u00a76 od \u00a7c{1}\u00a76.
seenOnline=\u00a76Hrac \u00a7c{0} \u00a76je \u00a7aonline\u00a76 od \u00a7c{1}\u00a76.
serverFull=Server je plny
serverTotal=Maximum serveru\: {0}
setBal=\u00a7aTva hotovost byla nastavena na {0}.
setBalOthers=\u00a7aHotovost hrace {0}\u00a7a nastavena na {1}.
setSpawner=Zmenil jsi spawner na\: {0}
setSpawner=\u00a76Typ spawneru zmenen na\u00a7c {0}\u00a76.
sheepMalformedColor=Deformovana barva.
shoutFormat=\u00a77[Shout]\u00a7f {0}
signFormatFail=\u00a74[{0}]
@@ -399,12 +399,12 @@ signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74Nemas opravneni zde vytvaret cedule.
similarWarpExist=Warp s podobnym nebo stejnym jmenem jiz existuje.
slimeMalformedSize=Zdeformovana velikost.
socialSpy=\u00a76SocialSpy pro {0}\u00a76\: {1}
socialSpy=\u00a76SocialSpy hrace \u00a7c{0}\u00a76\: \u00a7c{1}
soloMob=Tento mob ma rad, kdyz je sam.
spawnSet=\u00a77Spawn-lokace nastavena pro skupinu\: {0}.
spawned=spawnut
sudoExempt=Nemuzes ovladat tohoto hrace
sudoRun=Nutis hrace {0} k behu\: /{1} {2}
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a77Sbohem kruty svete...
suicideSuccess=\u00a77{0} si vzal svuj zivot
survival=Survival
@@ -412,7 +412,7 @@ takenFromAccount=\u00a7c{0} bylo odecteno z tveho uctu.
takenFromOthersAccount=\u00a7c{0} bylo odebrano z {1}\u00a7c uctu. Nova hodnota\: {2}
teleportAAll=\u00a77Zadost o teleportaci odeslana vsem hracum...
teleportAll=\u00a77Teleportuji v\u00c5\u00a1echny hrace...
teleportAtoB=\u00a77{0}\u00a77 vas teleportoval k {1}\u00a77.
teleportAtoB=\u00a7c{0} \u00a76te teleportoval k hraci \u00a7c{1}\u00a76.
teleportDisabled={0} mas teleportaci zablokovanou.
teleportHereRequest=\u00a7c{0}\u00a7c vas pozadal aby jste se warpnul k nemu.
teleportNewPlayerError=Teleportace noveho hrace selhala
@@ -420,18 +420,19 @@ teleportRequest=\u00a7c{0}\u00a7c se chce teleportovat k tobe.
teleportRequestTimeoutInfo=\u00a77Tato zadost vyprsi za {0} sekund.
teleportTop=\u00a77Teleportuji na vrch.
teleportationCommencing=\u00a77Teleportace zahajena...
teleportationDisabled=\u00a77Teleportace zakazana.
teleportationDisabledFor=\u00a76Teleportace zablokovana hraci {0}
teleportationEnabled=\u00a77Teleportace povolena.
teleportationEnabledFor=\u00a76Teleportace dovolena hraci {0}
teleportationDisabled=\u00a76Teleportace \u00a74vypnuta\u00a76.
teleportationDisabledFor=\u00a76Teleportace \u00a74vypnuta\u00a76 hraci \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportace \u00a7azapnuta\u00a76.
teleportationEnabledFor=\u00a76Teleportace \u00a7azapnuta\u00a76 hraci \u00a7c{0}\u00a76.
teleporting=\u00a77Teleportuji...
tempBanned=Docasne zabanovany na dobu {0}
teleportToPlayer=\u00a76Teleportuji k hraci \u00a7c{0}\u00a76.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a77Nemel by jsi docasne zabanovat tohoto hrace.
thunder=Nastavil jsi {0} bouri ve tvem svete.
thunderDuration=Nastavil jsi {0} bouri ve svete po {1} sekund.
timeBeforeHeal=Potrebny cas pro dalsi uzdraveni\: {0}
timeBeforeTeleport=Potrebny cas pro dalsi teleport\: {0}
timeFormat=\u00a73{0}\u00a7f nebo \u00a73{1}\u00a7f nebo \u00a73{2}\u00a7f
timeFormat=\u00a7c{0}\u00a76 nebo \u00a7c{1}\u00a76 nebo \u00a7c{2}\u00a76
timeSetPermission=\u00a7cNejsi autorizovany ke zmene casu.
timeWorldCurrent=Ve svete {0} je prave \u00a73{1}
timeWorldSet=Cas byl nastaven na {0} ve\: \u00a7c{1}
@@ -451,7 +452,7 @@ unignorePlayer=Prestal jsi ignorovat hrace {0}.
unknownItemId=Nezname ID itemu\: {0}
unknownItemInList=Neznamy item {0} v {1} seznamu.
unknownItemName=Neznamy nazev itemu\: {0}
unlimitedItemPermission=\u00a7cNemas opravneni pro neomezeny item\: {0}.
unlimitedItemPermission=\u00a74Nemas prava mit neomezeny item \u00a7c{0}\u00a74.
unlimitedItems=Neomezene itemy\:
unmutedPlayer=Hrac {0} byl umlcen.
unvanishedReload=\u00a74Probehl reload serveru; jsi zase viditelny.
@@ -480,7 +481,7 @@ warpSet=\u00a77Warp {0} vytvoren.
warpUsePermission=\u00a7cNemas opravneni pouzit tento warp.
warpingTo=\u00a77Warpuji te do {0}.
warps=Warpy\: {0}
warpsCount=\u00a77Mame zde {0} warpu. Strana {1} z {2}.
warpsCount=\u00a76Je zde \u00a7c{0} \u00a76warpu. Zobrazuji stranku \u00a7c{1} \u00a76of \u00a7c{2}\u00a76.
weatherStorm=\u00a77Nastavil jsi bourku v {0}
weatherStormFor=\u00a77Nastavil jsi bourku v {0} na {1} sekund.
weatherSun=\u00a77Nastavil jsi slunecne pocasi v {0}
@@ -525,25 +526,33 @@ radiusTooBig=\u00a74Polomer je prilis velky. Maximalni mozny polomer je {0} blok
isIpBanned=\u00a76IP \u00a7c{0} \u00a76je zabanovana.
mobDataList=\u00a76Spravny nazev mobu\:\u00a7r {0}
vanish=\u00a76Vanish pro hrace {0} je\u00a76\: {1}
noLocationFound=\u00a74Nebylo nalezeno platn\u00e9 um\u00edst\u011bn\u00ed.
noLocationFound=\u00a74Nebylo nalezeno platne umisteni.
coordsKeyword={0}, {1}, {2}
banExemptOffline=\u00a74Nemuzes zabanovat hrace, kteri nejsou pripojeni.
tempbanExemptOffline=\u00a74Nemuzes docasne zabanovat hrace, kteri nejsou pripojeni.
banExemptOffline=\u00a74Nemuzes zabanovat hrace ktery neni ve hre.
tempbanExemptOffline=\u00a74Nemuzes docasne zabanovat hrace ktery neni ve hre.
mayNotJailOffline=\u00a7Nemuzes uveznit hrace, kteri nejsou pripojeni.
muteExemptOffline=\u00a7Nemuzes umlcet hrace, kteri nejsou pripojeni.
muteExemptOffline=\u00a7Nemuzes umlcet hrace ktery neni ve hre.
ignoreExempt=\u00a74Nemuzes ignorovat tohoto hrace.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the Skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that Skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player Skull.
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
unsafeTeleportDestination=\u00a74Teleportace zde je nebezpecna a nastaveni teleport-safety je vypnuto.
noMetaJson=JSON Metadata nejsou podporovana v teto verzi Bukkitu.
maxMoney=\u00a74Tato transakce by prekrocila financni limit tohoto uctu.
skullChanged=\u00a76Hlava zmenena na \u00a7c{0}\u00a76.
alphaNames=\u00a74Nick muze obsahovat pouze pismena, cisla a podtrzitka
givenSkull=\u00a76Ziskal si hlavu hrace \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74Nemas prava na upravu teto hlavy.
teleportInvalidLocation=Souradnice nemohou prekrocit 30 000 000
invalidSkull=\u00a74Vem si hlavu nejprve do ruky.
weatherInvalidWorld=Svet s nazvem {0} nebyl nalezen\!
gameModeInvalid=\u00a74Chybny nick hrace nebo herni mod.
mailTooLong=\u00a74Mailov\u00e1 zpr\u00e1va je velmi dlouh\u00e1. Limit je pod 1000 znak\u016f.
mailDelay=Bylo odeslano prilis mnoho mailu. Pockej minutu. Maximum\: {0}
seenAccounts=\u00a76Hrac je take znamy jako\:\u00a7c {0}
unableToSpawnItem=\u00a74Nepodarilo se spawnout \u00a7c{0}\u00a74, nejedna se o item, ktery jde spawnout.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

View File

@@ -92,7 +92,7 @@ downloadingGeoIp=Downloader GeoIP database... dette tager m\u00e5ske noget tid (
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.
enableUnlimited=\u00a76Giver ubegr\u00e6nset antal af\u00a7c {0} \u00a76til {1}.
enableUnlimited=\u00a76Giver et ubegr\u00e6nset antal af\u00a7c {0} \u00a76til \u00a7c{1}\u00a76.
enabled=aktiveret
enchantmentApplied=\u00a76Fortryllelsen\u00a7c {0} \u00a76er blevet anvendt til elementet i din h\u00e5nd.
enchantmentNotFound=\u00a74Fortryllelsen blev ikke fundet\!
@@ -103,7 +103,7 @@ errorCallingCommand=Kunne ikke finde kommandoen /{0}
errorWithMessage=\u00a7cFejl\:\u00a74 {0}
essentialsHelp1=Filen er \u00f8delagt, og Essentials kan ikke \u00e5bne den. Essentials er nu deaktiveret. Hvis du ikke selv kan fikse fejlen, s\u00e5 bes\u00f8g http\://tiny.cc/EssentialsChat
essentialsHelp2=Filen er \u00f8delagt, og Essentials kan ikke \u00e5bne den. Essentials er nu deaktiveret. Hvis du ikke selv kan fikse fejlen, s\u00e5 skriv enten /essentialshelp i spillet eller bes\u00f8g http\://tiny.cc/EssentialsChat
essentialsReload=\u00a76Essentials er genindl\u00e6st\u00a7c {0}
essentialsReload=\u00a76Essentials blev genindl\u00e6st\u00a7c {0}.
exp=\u00a7c{0} \u00a76har\u00a7c {1} \u00a76exp (level\u00a7c {2}\u00a76) og beh\u00f8ver\u00a7c {3} \u00a76mere exp for at stige i level.
expSet=\u00a7c{0} \u00a76har nu\u00a7c {1} \u00a76exp.
extinguish=\u00a76Du slukkede selv.
@@ -113,7 +113,7 @@ failedToCreateConfig=Kunne ikke oprette konfig {0}.
failedToWriteConfig=Kunne ikke skrive konfig {0}.
false=\u00a74falsk\u00a7r
feed=\u00a76Din appetit blev m\u00e6ttet.
feedOther=\u00a76Du m\u00e6ttede appetitten hos {0}\u00a76.
feedOther=\u00a76Du tilfredsstillede \u00a7c{0}s appetit\u00a76.
fileRenameError=Omd\u00f8bning af filen {0} fejlede\!
fireworkColor=\u00a74Ugyldig fyrv\u00e6rkeriladningsparametre indsat. Der skal s\u00e6ttes en farve f\u00f8rst.
fireworkEffectsCleared=\u00a76Fjernede alle effekter fra den holdte stak.
@@ -122,7 +122,7 @@ flyMode=\u00a76Set flytilstand \u00a7c {0} \u00a76for {1}\u00a76.
flying=flyve
foreverAlone=\u00a74Der er ingen, du kan sende et svar til.
fullStack=\u00a74Du har allerede en fuld stak.
gameMode=\u00a76Set spiltilstand\u00a7c {0} \u00a76for {1}\u00a76.
gameMode=\u00a76\u00c6ndrede spiltilstand til\u00a7c {0} \u00a76for \u00a7c{1}\u00a76.
gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 enheder, \u00a7c{4}\u00a76 tiles.
gcfree=\u00a76Fri hukommelse\:\u00a7c {0} MB.
gcmax=\u00a76Maksimum hukommelse\:\u00a7c {0} MB.
@@ -131,7 +131,7 @@ geoIpUrlEmpty=GeoIP download url er tom.
geoIpUrlInvalid=GeoIP download url er ugyldig.
geoipJoinFormat=\u00a76Spilleren \u00a7c{0} \u00a76kommer fra \u00a7c{1}\u00a76.
giveSpawn=\u00a76Giver\u00a7c {0} \u00a76af\u00a7c {1} til\u00a7c {2}\u00a76.
godDisabledFor=\u00a74deaktiverede\u00a76 for\u00a7c {0}
godDisabledFor=\u00a7cdeaktiveret\u00a76 for\u00a7c {0}
godEnabledFor=\u00a7aaktiveret\u00a76 for\u00a7c {0}
godMode=\u00a76Gudetilstand\u00a7c {0}\u00a76.
groupDoesNotExist=\u00a74Der er ingen online i denne gruppe\!
@@ -168,10 +168,10 @@ infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Side \u00a7c{0}\u00a76/\u00a7
infoUnknownChapter=\u00a74Ukendt kapitel.
insufficientFunds=\u00a74Ikke tilstr\u00e6kkelige midler.
invalidCharge=\u00a74Ugyldig ladning.
invalidFireworkFormat=\u00a76Valget \u00a74{0} \u00a76er ikke en gyldig v\u00e6rdi for \u00a74{1}\u00a76.
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.
invalidMob=\u00a74Invalid mob type.
invalidMob=\u00a74Ugyldig mob type.
invalidNumber=Ugyldigt nummer.
invalidPotion=\u00a74Ugyldig eliksir.
invalidPotionMeta=\u00a74Ugyldig eliksir meta\: \u00a7c{0}\u00a74.
@@ -203,11 +203,11 @@ kickDefault=Smidt ud fra serveren.
kickExempt=\u00a74Du kan ikke smide den person ud.
kickedAll=\u00a74Smed alle ud fra serveren.
kill=\u00a76Dr\u00e6bte\u00a7c {0}\u00a76.
killExempt=\u00a74Du kan ikke dr\u00e6be {0}
killExempt=\u00a74Du kan ikke dr\u00e6be \u00a7c{0}\u00a74.
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitError2=\u00a74Det kit er ikke defineret korrekt. Kontakt en administrator.
kitError=\u00a74Der er ingen gyldige kits.
kitGiveTo=\u00a76Giver kittet\u00a7c {0}\u00a76 til {1}\u00a7.
kitGiveTo=\u00a76Giver kit\u00a7c {0}\u00a76 til \u00a7c{1}\u00a76.
kitInvFull=\u00a7cDin inventory er fuld, placerer kit p\u00e5 gulvet.
kitNotFound=\u00a74Det kit eksisterer ikke.
kitOnce=\u00a74Du kan ikke benytte dig af det kit igen.
@@ -224,10 +224,10 @@ listGroupTag=\u00a76{0}\u00a7r\: \u00a7r
listHiddenTag=\u00a77[SKJULT]\u00a7r
loadWarpError=\u00a74Kunne ikke indl\u00e6se warp {0}.
localFormat=[L]<{0}> {1}
mailClear=\u00a76For at markere din mail som l\u00e6st, skriv\u00a7c /mail clear.
mailClear=\u00a76For at markere alt post som l\u00e6st, skriv\u00a7c /mail clear\u00a76.
mailCleared=\u00a76Mail Ryddet\!
mailSent=\u00a76Mail sendt\!
markMailAsRead=\u00a76For at markere din mail som l\u00e6st, skriv\u00a7c /mail clear.
markMailAsRead=\u00a76For at markere alt post som l\u00e6st, skriv\u00a7c /mail clear\u00a76.
markedAsAway=\u00a76Du er nu markeret som v\u00e6rende v\u00e6k.
markedAsNotAway=\u00a76Du er ikke l\u00e6ngere markeret som v\u00e6rende v\u00e6k.
matchingIPAddress=\u00a76De f\u00f8lgende spillere er tidligere logget ind fra den IP adresse\:
@@ -236,7 +236,7 @@ mayNotJail=\u00a74Du kan ikke s\u00e6tte den person i f\u00e6ngsel\!
me=mig
minute=minut
minutes=minutter
missingItems=\u00a74Du har ikke {0}x {1}.
missingItems=\u00a74Du har ikke \u00a7c{0}x {1}\u00a74.
mobSpawnError=\u00a74Fejl under \u00e6ndring af mob spawner.
mobSpawnLimit=Mob m\u00e6ngde begr\u00e6nset til serverens gr\u00e6nse.
mobSpawnTarget=\u00a74M\u00e5lblokken skal v\u00e6re en mob spawner.
@@ -246,8 +246,8 @@ moneySentTo=\u00a7a{0} er blevet sendt til {1}.
month=m\u00e5ned
months=m\u00e5neder
moreThanZero=\u00a74M\u00e6ngder skal v\u00e6re st\u00f8rre end 0.
moveSpeed=\u00a76Satte {0} hastighed til\u00a7c {1} \u00a76for {2}\u00a76.
msgFormat=\u00a76[{0}\u00a76 -> {1}\u00a76] \u00a7r{2}
moveSpeed=\u00a76Satte {0} hastighed til\u00a7c {1} \u00a76for \u00a7c{2}\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
multipleCharges=\u00a74Du kan ikke tilf\u00f8je mere end \u00e9n ladning til dette fyrv\u00e6rkeri.
multiplePotionEffects=\u00a74Du kan ikke tilf\u00f8je mere end \u00e9n effekt til denne eliksir.
muteExempt=\u00a74Du kan ikke g\u00f8re den spiller tavs.
@@ -262,12 +262,12 @@ nickDisplayName=\u00a74Du skal aktivere change-displayname i Essentials-konfigge
nickInUse=\u00a74Det navn bruges allerede.
nickNamesAlpha=\u00a74Kaldenavne skal v\u00e6re alfanumeriske.
nickNoMore=\u00a76Du har ikke l\u00e6ngere et kaldenavn.
nickSet=\u00a76Dit kaldenavn er nu \u00a7c{0}
nickSet=\u00a76Dit kaldenavn er nu \u00a7c{0}\u00a76.
nickTooLong=\u00a74Det kaldenavn er for langt.
noAccessCommand=\u00a74Du har ikke adgang til den kommando.
noAccessPermission=\u00a74Du har ikke tilladelse til at tilg\u00e5 {0}.
noAccessPermission=\u00a74Du har ikke tilladelse til at bruge den \u00a7c{0}\u00a74.
noBreakBedrock=\u00a74Du er ikke tilladt at \u00f8del\u00e6gge bedrock.
noDestroyPermission=\u00a74Du har ikke tilladelse til at \u00f8del\u00e6gge den {0}.
noDestroyPermission=\u00a74Du har ikke tilladelse til at \u00f8del\u00e6gge den \u00a7c{0}\u00a74.
noDurability=\u00a74Dette element har ingen holdbarhed.
noGodWorldWarning=\u00a74Advarsel\! Gud-tilstand er deaktiveret i denne verden.
noHelpFound=\u00a74Ingen matchende kommandoer.
@@ -300,8 +300,8 @@ now=nu
nuke=\u00a75Lad d\u00f8den regne over dem.
numberRequired=Der skal v\u00e6re et tal, dit fjollehoved.
onlyDayNight=/time underst\u00f8tter kun day/night.
onlyPlayerSkulls=\u00a74Du kan kun \u00e6ndre ejeren af spillerhoveder. (397\:3).
onlyPlayers=\u00a74Kun in-game spillere kan bruge {0}.
onlyPlayerSkulls=\u00a74Du kan kun indstille ejeren af spillerkranier (\u00a7c397\:3\u00a74).
onlyPlayers=\u00a74Kun spillere p\u00e5 serveren kan bruge \u00a7c{0}\u00a74.
onlySunStorm=\u00a74/weather underst\u00f8tter kun sun/storm.
orderBalances=\u00a76Tjekker saldi af\u00a7c {0} \u00a76brugere. Vent venligst...
oversizedTempban=\u00a74Du kan ikke bandlyse den spiller i det tidsrum.
@@ -321,9 +321,9 @@ pWeatherPlayers=\u00a76Disse spillere har brugerdefineret vejr\:\u00a7r
pWeatherReset=\u00a76Spillervejret blev nulstillet for\: \u00a7c{0}
pWeatherSet=\u00a76Spillervejret blev \u00e6ndret til \u00a7c{0}\u00a76 for\: \u00a7c{1}.
pendingTeleportCancelled=\u00a74Afventende teleporteringsanmodning afvist.
playerBanIpAddress=\u00a76Spilleren\u00a7c {0} \u00a76bandlyste IP-adressen {1}\u00a76.
playerBanned=\u00a76Spilleren\u00a7c {0} \u00a76bandlyste {1} \u00a76med grunden\: {2}.
playerInJail=\u00a74Spilleren er allerede i f\u00e6ngsel\u00a7c {0}\u00a76.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a76Spilleren\u00a7c {0} blev \u00a76bandlyst\u00a7c {1} \u00a76i \u00a7c{2}\u00a76.
playerInJail=\u00a74Spilleren er allerede i f\u00e6ngsel\u00a7c {0}\u00a74.
playerJailed=\u00a76Spilleren\u00a7c {0} \u00a76blev f\u00e6ngslet.
playerJailedFor=\u00a76Spilleren\u00a7c {0} \u00a76blev f\u00e6ngslet i {1}.
playerKicked=\u00a76Spilleren\u00a7c {0} \u00a76smed {1} ud med grunden\: {2}.
@@ -340,33 +340,33 @@ posX=\u00a76X\: {0} (+\u00d8st <-> -Vest)
posY=\u00a76Y\: {0} (+Op <-> -Ned)
posYaw=\u00a76Yaw\: {0} (Rotation)
posZ=\u00a76Z\: {0} (+Syd <-> -Nord)
possibleWorlds=\u00a76Mulige verdener er tallene 0 til {0}.
possibleWorlds=\u00a76Mulige verdener er tal fra \u00a7c0\u00a76 til \u00a7c{0}\u00a76.
potions=\u00a76Eliksirer\:\u00a7r {0}\u00a76.
powerToolAir=\u00a74Kommandoen kan ikke fastg\u00f8res til luft.
powerToolAlreadySet=\u00a74Kommandoen \u00a7c{0}\u00a74 er allerede fastgjort til {1}.
powerToolAlreadySet=\u00a74Kommandoen \u00a7c{0}\u00a74 er allerede tildelt til \u00a7c{1}\u00a74.
powerToolAttach=\u00a7c{0}\u00a76 kommando fastgjort til {1}.
powerToolClearAll=\u00a76Alle magtv\u00e6rkt\u00f8jskommandoer er blevet ryddet.
powerToolList=\u00a76Element \u00a7c{1} \u00a76har de f\u00f8lgende kommandoer\: \u00a7c{0}\u00a76.
powerToolListEmpty=\u00a74Element \u00a7c{0} \u00a74har ingen kommandoer tildelt.
powerToolNoSuchCommandAssigned=\u00a74Kommandoen \u00a7c{0}\u00a74 er ikke blevet tildelt {1}.
powerToolRemove=\u00a76Kommando \u00a7c{0}\u00a76 fjernet fra {1}.
powerToolRemoveAll=\u00a76Alle kommandoer fjernet fra {0}.
powerToolNoSuchCommandAssigned=\u00a74Kommandoen \u00a7c{0}\u00a74 er ikke blevet tildelt \u00a7c{1}\u00a74.
powerToolRemove=\u00a76Kommando \u00a7c{0}\u00a76 fjernet fra \u00a7c{1}\u00a76.
powerToolRemoveAll=\u00a76Alle kommandoer fjernet fra \u00a7c{0}\u00a76.
powerToolsDisabled=\u00a76Alle dine magtv\u00e6rkt\u00f8jer er deaktiveret.
powerToolsEnabled=\u00a76Alle dine magtv\u00e6rkt\u00f8jer er aktiveret.
questionFormat=\u00a72[Sp\u00f8rgsm\u00e5l]\u00a7r {0}
readNextPage=\u00a76Skriv\u00a7c /{0} {1} \u00a76for at l\u00e6se den n\u00e6ste side.
recipe=\u00a76Opskrift til \u00a7c{0}\u00a76 ({1} of {2})
recipe=\u00a76Opskrivt for \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 af \u00a7c{2}\u00a76)
recipeBadIndex=Der er ingen opskrift af det nummer.
recipeFurnace=\u00a76Smelt \u00a7c{0}
recipeGrid=\u00a7{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\ \u00a7{0}X \u00a76er \u00a7c{1}
recipeFurnace=\u00a76Smelt\: \u00a7c{0}\u00a76.
recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a7c{0}X \u00a76er \u00a7c{1}
recipeMore=\u00a76Skriv /{0} \u00a7c{1}\u00a76 <nummer> for at \u00e6ndre andre opskrifter for \u00a7c{2}\u00a76.
recipeNone=Ingen opskrift eksisterer for {0}
recipeNothing=intet
recipeShapeless=\u00a76Kombiner \u00a7c{0}
recipeWhere=\u00a76Hvor\: {0}
removed=\u00a76Fjernede\u00a7c {0} \u00a76enheder.
repair=\u00a76Du har med succes repareret din(e)\: \u00a7c{0}.
repair=\u00a76Du har succesfuldt repareret din\: \u00a7c{0}\u00a76.
repairAlreadyFixed=\u00a74Dette element beh\u00f8ver ikke reparation.
repairEnchanted=\u00a74Du har ikke tilladelse til at reparere fortryllede elementer.
repairInvalidType=\u00a74Dette element kan ikke repareres.
@@ -378,19 +378,19 @@ requestDeniedFrom=\u00a7c{0} \u00a76afviste din teleporteringsanmodning.
requestSent=\u00a76Anmodning sendt til\u00a7c {0}\u00a76.
requestTimedOut=\u00a74Teleporteringsanmoding udl\u00f8b.
requiredBukkit=\u00a76* \! * Du skal minimum bruge build {0} af CraftBukkit. Download det fra http\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a76Saldo er blevet nulstillet til \u00a7a{0} \u00a76for alle online spillere.
resetBalAll=\u00a76Saldo er blevet nulstillet til \u00a7a{0} \u00a76for alle spillere.
returnPlayerToJailError=\u00a74Der opstod en fejl, da spilleren\u00a7c {0} \u00a74skulle retuneres til f\u00e6ngsel\: {1}\!
resetBal=\u00a76Saldo er blevet nulstillet til \u00a7c{0} \u00a76for alle online spillere.
resetBalAll=\u00a76Saldo er blevet nulstillet til \u00a7c{0} \u00a76for alle spillere.
returnPlayerToJailError=\u00a74Der opstod en fejl under fors\u00f8get p\u00e5 at returnere spilleren\u00a7c {0} \u00a74til f\u00e6ngsel\: \u00a7c{1}\u00a74\!
runningPlayerMatch=\u00a76S\u00f8ger efter spillere, der matcher ''\u00a7c{0}\u00a76'' (dette kan tage lidt tid)
second=sekund
seconds=sekunder
seenOffline=\u00a76Spilleren\u00a7c {0} \u00a76har v\u00e6ret \u00a74offline\u00a76 siden {1}.
seenOnline=\u00a76Spiller\u00a7c {0} \u00a76har v\u00e6ret \u00a7aonline\u00a76 siden {1}.
seenOffline=\u00a76Spilleren\u00a7c {0} \u00a76har v\u00e6ret \u00a74offline\u00a76 siden \u00a7c{1}\u00a76.
seenOnline=\u00a76Spilleren\u00a7c {0} \u00a76har v\u00e6ret \u00a7aonline\u00a76 siden \u00a7c{1}\u00a76.
serverFull=Serveren er fyldt op\!
serverTotal=\u00a76Server Total\:\u00a7c {0}
setBal=\u00a7aDin saldo blev \u00e6ndret til {0}.
setBalOthers=\u00a7aDu \u00e6ndrede {0}\u00a7a''s saldo til {1}.
setSpawner=\u00a76\u00c6ndrede spawner type til\u00a7c {0}
setSpawner=\u00a76\u00c6ndrede spawner type til\u00a7c {0}\u00a76.
sheepMalformedColor=\u00a74Forkert udformet farve.
shoutFormat=\u00a76[R\u00e5b]\u00a7r {0}
signFormatFail=\u00a74[{0}]
@@ -399,12 +399,12 @@ signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74Du har ikke tilladelse til at lave et skilt her.
similarWarpExist=\u00a74Et warp med et lignende navn eksisterer allerede.
slimeMalformedSize=\u00a74Forkert udformet st\u00f8rrelse.
socialSpy=\u00a76SocialSpy for {0}\u00a76\: {1}
socialSpy=\u00a76SocialSpy for \u00a7c{0}\u00a76\: \u00a7c{1}
soloMob=\u00a74Det mob kan lide at v\u00e6re alene.
spawnSet=\u00a76Spawn lokation \u00e6ndret for gruppen\u00a7c {0}\u00a76.
spawned=spawnede
sudoExempt=\u00a74Du kan ikke sudo denne spiller.
sudoRun=\u00a76Tvinger\u00a7c {0} \u00a76til at l\u00f8be\:\u00a7r /{1} {2}
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a76Farvel, grusomme verden...
suicideSuccess=\u00a76{0} \u00a76tog sit eget liv.
survival=overlevelse
@@ -412,7 +412,7 @@ takenFromAccount=\u00a7a{0} er blevet taget fra din konto.
takenFromOthersAccount=\u00a7a{0} taget fra {1}\u00a7a konto. Ny saldo\: {2}.
teleportAAll=\u00a76Teleporteringsanmodning sendt til alle spillere...
teleportAll=\u00a76Teleporterer alle spillere...
teleportAtoB=\u00a7c{0}\u00a76 teleporterede dig til {1}\u00a76.
teleportAtoB=\u00a7c{0}\u00a76 teleporterede dig til \u00a7c{1}\u00a76.
teleportDisabled=\u00a7c{0} \u00a74har deaktiveret teleportering.
teleportHereRequest=\u00a7c{0}\u00a76 har anmodet om, at du teleporterer til spilleren.
teleportNewPlayerError=\u00a74Kunne ikke teleportere ny spiller\!
@@ -420,18 +420,19 @@ teleportRequest=\u00a7c{0}\u00a76 har anmodet om at teleportere til dig.
teleportRequestTimeoutInfo=\u00a76Denne anmodning vil udl\u00f8be efter\u00a7c {0} sekunder\u00a76.
teleportTop=\u00a76Teleporterer til toppen.
teleportationCommencing=\u00a76Teleportering begynder...
teleportationDisabled=\u00a76Teleportering deaktiveret.
teleportationDisabledFor=\u00a76Teleportering deaktiveret for {0}.
teleportationEnabled=\u00a76Teleportering aktiveret.
teleportationEnabledFor=\u00a76Teleportering aktiveret for {0}.
teleportationDisabled=\u00a76Teleportering \u00a7cdeaktiveret\u00a76.
teleportationDisabledFor=\u00a76Teleportering \u00a7cdeaktiveret \u00a76for \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportering \u00a7caktiveret\u00a76.
teleportationEnabledFor=\u00a76Teleportering \u00a7caktiveret \u00a76for \u00a7c{0}\u00a76.
teleporting=\u00a76Teleporterer...
tempBanned=Midlertidigt bandlyst fra serveren med grunden {0}.
teleportToPlayer=\u00a76Teleporterer til \u00a7c{0}\u00a76.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a74Du kan ikke tempbanne den spiller.
thunder=\u00a76Du har\u00a7c {0} \u00a76torden i din verden.
thunderDuration=\u00a76Du har\u00a7c {0} \u00a76torden i din verden i\u00a7c {1} \u00a76sekunder.
timeBeforeHeal=\u00a74Tid inden n\u00e6ste helbredelse\:\u00a7c {0}\u00a76.
timeBeforeTeleport=\u00a74Tid inden n\u00e6ste teleport\:\u00a7c {0}\u00a76.
timeFormat=\u00a7c{0}\u00a76 eller \u00a7c{1}\u00a76 eller \u00a7c{2}\u00a76.
timeFormat=\u00a7c{0}\u00a76 eller \u00a7c{1}\u00a76 eller \u00a7c{2}\u00a76
timeSetPermission=\u00a74Du er ikke autoriseret til at \u00e6ndre tiden.
timeWorldCurrent=\u00a76Den nuv\u00e6rende tid i\u00a7c {0} \u00a76er \u00a7c{1}\u00a76.
timeWorldSet=\u00a76Tiden blev \u00e6ndret til\u00a7c {0} \u00a76i\: \u00a7c{1}\u00a76.
@@ -451,7 +452,7 @@ unignorePlayer=\u00a76Du ignorerer ikke spilleren\u00a7c {0} \u00a76mere.
unknownItemId=\u00a74Ukendt element ID\:\u00a7r {0}\u00a74.
unknownItemInList=\u00a74Ukendt element {0} i {1} list.
unknownItemName=\u00a74Ukendt elementnavn\: {0}.
unlimitedItemPermission=\u00a7cIngen tilladelse til ubegr\u00e6nset ting {0}.
unlimitedItemPermission=\u00a74Ingen tilladelse til ubegr\u00e6nset element \u00a7c{0}\u00a74.
unlimitedItems=\u00a76Ubegr\u00e6nsede ting\:\u00a7r
unmutedPlayer=\u00a76Spilleren\u00a7c {0} \u00a76har f\u00e5et sin stemme tilbage.
unvanishedReload=\u00a74En reload har tvunget dig til at blive synlig.
@@ -480,7 +481,7 @@ warpSet=\u00a76Warp\u00a7c {0} \u00a76blev sat.
warpUsePermission=\u00a74Du har ikke tilladelse til at bruge det warp.
warpingTo=\u00a76Warper til\u00a7c {0}\u00a76.
warps=\u00a76Warps\:\u00a7r {0}
warpsCount=\u00a76Der er\u00a7c {0} \u00a76warps. Viser side {1} af {2}.
warpsCount=\u00a76Der er\u00a7c {0} \u00a76warps. Viser side \u00a7c{1} \u00a76af \u00a7c{2}\u00a76.
weatherStorm=\u00a76Du \u00e6ndrede vejret til \u00a7cstorm\u00a76 i\u00a7c {0}\u00a76.
weatherStormFor=\u00a76Du \u00e6ndrede vejret til \u00a7cstorm\u00a76 i\u00a7c {0} \u00a76i {1} sekunder.
weatherSun=\u00a76Du \u00e6ndrede vejret til \u00a7csolrigt\u00a76 i\u00a7c {0}\u00a76.
@@ -532,18 +533,26 @@ tempbanExemptOffline=\u00a74Du kan ikke midlertidigt bandlyse offline spillere.
mayNotJailOffline=\u00a74Du kan ikke s\u00e6tte offline spillere i f\u00e6ngsel.
muteExemptOffline=\u00a74Du kan ikke g\u00f8re offline spillere tavse.
ignoreExempt=\u00a74Du kan ikke ignorere den spiller.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the Skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that Skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player Skull.
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
unsafeTeleportDestination=\u00a74Teleport destinationen er usikker og teleport-safety er deaktiveret.
noMetaJson=JSON Metadata er ikke underst\u00f8ttet i denne version af Bukkit.
maxMoney=\u00a74Denne transaktion vil overstige saldoen af denne konto.
skullChanged=\u00a76Kranie \u00e6ndret til \u00a7c{0}\u00a76.
alphaNames=\u00a74Spillernavne kan kun indeholde bogstaver, tal og underscores.
givenSkull=\u00a76Du er blevet givet \u00a7c{0}\u00a76s kranie.
noPermissionSkull=\u00a74Du har ikke tilladelse til at modificere det kranie.
teleportInvalidLocation=V\u00e6rdi af koordinater kan ikke overstige 30000000
invalidSkull=\u00a74Hold venligst et spillerkranie.
weatherInvalidWorld=En verden kaldet {0} blev ikke fundet\!
gameModeInvalid=\u00a74Du skal angive en gyldig spiller/tilstand.
mailTooLong=\u00a74Mailbeskeden er for lang. Pr\u00f8v at holde den under 1000 tegn.
mailDelay=For mange mails er blevet sendt inden for det sidste minut. Maksimum\: {0}
seenAccounts=\u00a76Spilleren er ogs\u00e5 kendt som\:\u00a7c {0}
unableToSpawnItem=\u00a74Kan ikke spawne \u00a7c{0}\u00a74, da det ikke er spawnbart element.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

View File

@@ -92,7 +92,7 @@ downloadingGeoIp=Lade GeoIP-Datenbank ... dies kann etwas dauern (country\: 0.6
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.
enableUnlimited=\u00a76Gebe {1} unbegrenzte Mengen von\u00a7c {0}\u00a76.
enableUnlimited=\u00a76Gebe \u00a7c{1}\u00a76. unendlichen einen Stack\u00a7c {0} \u00a76.
enabled=aktiviert
enchantmentApplied=\u00a76Der Gegenstand in deiner Hand wurde mit\u00a7c {0} \u00a76verzaubert.
enchantmentNotFound=\u00a74Verzauberung nicht gefunden\!
@@ -103,7 +103,7 @@ errorCallingCommand=Fehler beim Aufrufen des Befehls /{0}
errorWithMessage=\u00a7cFehler\:\u00a74 {0}
essentialsHelp1=Die Datei ist besch\u00e4digt und Essentials kann sie nicht \u00f6ffnen. Essentials ist jetzt deaktiviert. Wenn du die Datei selbst nicht reparieren kannst, gehe auf http\://tiny.cc/EssentialsChat
essentialsHelp2=Die Datei ist besch\u00e4digt und Essentials kann sie nicht \u00f6ffnen. Essentials ist jetzt deaktiviert. Wenn du die Datei selbst nicht reparieren kannst, versuche /essentialshelp oder gehe auf http\://tiny.cc/EssentialsChat
essentialsReload=\u00a76Essentials neu geladen\u00a7c {0}
essentialsReload=\u00a76Essentials neu geladen\u00a7c {0}.
exp=\u00a7c{0} \u00a76hat\u00a7c {1} \u00a76Exp (Level\u00a7c {2}\u00a76) und braucht\u00a7c {3} \u00a76Punkte f\u00fcr den n\u00e4chsten Level.
expSet=\u00a7c{0} \u00a76hat jetzt\u00a7c {1} \u00a76Exp.
extinguish=\u00a76Du hast dich selbst gel\u00f6scht.
@@ -113,7 +113,7 @@ failedToCreateConfig=Fehler beim Erstellen der Konfiguration {0}.
failedToWriteConfig=Fehler beim Schreiben der Konfiguration {0}.
false=\u00a74nein\u00a7r
feed=\u00a76Dein Hunger wurde gestillt.
feedOther=\u00a76Du hast den Hunger von {0} \u00a76gestillt.
feedOther=\u00a76Du hast dein Hunger von \u00a7c{0}\u00a76gestillt.
fileRenameError=Umbenennen von {0} gescheitert\!
fireworkColor=\u00a74Ung\u00fcltige Feuerwerksparameter angegeben, setze zuerst eine Farbe.
fireworkEffectsCleared=\u00a76Alle Effekte vom Stapel in der Hand entfernt.
@@ -131,7 +131,7 @@ geoIpUrlEmpty=GeoIP Download-URL ist leer.
geoIpUrlInvalid=GeoIP Download-URL ist ung\u00fcltig.
geoipJoinFormat=\u00a76Spieler \u00a7c{0} \u00a76kommt aus \u00a7c{1}\u00a76.
giveSpawn=\u00a76Gebe \u00a7c{2} {0}\u00a76x\u00a7c {1}\u00a76.
godDisabledFor=\u00a74deaktiviert\u00a76 f\u00fcr\u00a7c {0}
godDisabledFor=\u00a7cdeaktiviert\u00a76 f\u00fcr\u00a7c {0}
godEnabledFor=\u00a7aaktiviert\u00a76 f\u00fcr\u00a7c {0}
godMode=\u00a76Unsterblichkeit\u00a7c {0}\u00a76.
groupDoesNotExist=\u00a74Kein Mitglied dieser Gruppe ist online\!
@@ -171,7 +171,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\!
invalidMob=\u00a74Invalid mob type.
invalidMob=\u00a74Unbekannter Mob-Typ.
invalidNumber=Ung\u00fcltige Nummer.
invalidPotion=\u00a74Ung\u00fcltiger Zaubertrank.
invalidPotionMeta=\u00a74Ung\u00fcltige Zaubertrank-Eigenschaft\: \u00a7c{0}\u00a74.
@@ -203,11 +203,11 @@ kickDefault=Vom Server geworfen.
kickExempt=\u00a74Du kannst diesen Spieler nicht rauswerfen.
kickedAll=\u00a74Alle Spieler vom Server geworfen.
kill=\u00a7c{0} \u00a76get\u00f6tet.
killExempt=\u00a74Du kannst {0}\u00a74 nicht t\u00f6ten
killExempt=\u00a74Du kannst \u00a7c{0}\u00a74 nicht t\u00f6ten.
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitError2=\u00a74Diese Ausr\u00fcstung ist nicht korrekt definiert. Kontaktiere einen Administrator.
kitError=\u00a74Es gibt keine g\u00fcltigen Ausr\u00fcstungen.
kitGiveTo=\u00a76Gebe {1}\u00a76 die\u00a7c {0}\u00a76-Ausr\u00fcstung.
kitGiveTo=\u00a76Gebe \u00a7c{1}\u00a76 Kit \u00a7c {0}\u00a76 .
kitInvFull=\u00a74Dein Inventar ist voll, lege Ausr\u00fcstung auf den Boden.
kitNotFound=\u00a74Diese Ausr\u00fcstung gibt es nicht.
kitOnce=\u00a74Du kannst diese Ausr\u00fcstung nicht nochmals bekommen.
@@ -224,10 +224,10 @@ listGroupTag=\u00a76{0}\u00a7r\:\u00a7r
listHiddenTag=\u00a77[Versteckt]\u00a7r
loadWarpError=\u00a74Fehler beim Laden von Warp-Punkt {0}.
localFormat=[L]<{0}> {1}
mailClear=\u00a76Um deine Nachrichten zu l\u00f6schen, schreibe\u00a7c /mail clear
mailClear=\u00a76Um deine Nachrichten zu l\u00f6schen, schreibe\u00a7c /mail clear.
mailCleared=\u00a76Nachrichten gel\u00f6scht\!
mailSent=\u00a76Nachricht gesendet\!
markMailAsRead=\u00a76Um deine Nachrichten zu l\u00f6schen, schreibe\u00a7c /mail clear
markMailAsRead=\u00a76Um deine Nachrichten zu l\u00f6schen, schreibe\u00a7c /mail clear.
markedAsAway=\u00a76Du wirst als abwesend angezeigt.
markedAsNotAway=\u00a76Du wirst nicht mehr als abwesend angezeigt.
matchingIPAddress=\u00a76Die folgenden Spieler haben sich vorher schonmal mit der IP-Adresse eingeloggt\:
@@ -236,7 +236,7 @@ mayNotJail=\u00a74Du kannst diese Person nicht einsperren.
me=mir
minute=Minute
minutes=Minuten
missingItems=\u00a74Du ben\u00f6tigst {0}x {1}.
missingItems=\u00a74Du hast nicht \u00a7c{0}x {1}\u00a74.
mobSpawnError=\u00a74Fehler beim \u00c4ndern des Monster-Spawner.
mobSpawnLimit=Anzahl an Monster auf Serverlimit beschr\u00e4nkt.
mobSpawnTarget=\u00a74Zielblock muss ein Monster-Spawner sein.
@@ -246,12 +246,12 @@ moneySentTo=\u00a7aDu hast {1}\u00a7a {0} gegeben.
month=Monat
months=Monate
moreThanZero=\u00a74Anzahl muss gr\u00f6sser als 0 sein.
moveSpeed=\u00a76Setze {0}-Geschwindigkeit f\u00fcr {2} \u00a76auf \u00a7c{1}\u00a76.
msgFormat=\u00a76[{0}\u00a76 -> {1}\u00a76] \u00a7r{2}
moveSpeed=\u00a76Setze {0}-Geschwindigkeit f\u00fcr \u00a7c{2} \u00a76auf \u00a7c{1}.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
multipleCharges=\u00a74Du kannst einem Feuerwerk nur einen Feuerwerksstern geben.
multiplePotionEffects=\u00a74Du kannst diesem Trank nur einen Effekt geben.
muteExempt=\u00a74Du darfst diesen Spieler nicht stumm machen.
muteNotify=\u00a7c{0} \u00a76hat \u00a7c{1}\u00a76 stumm gemacht.
muteNotify=\u00a7c{0} \u00a76hat Spieler \u00a7c{1}\u00a76 stumm geschaltet.
mutedPlayer=\u00a76Spieler\u00a7c {0}\u00a76 ist nicht mehr stumm.
mutedPlayerFor=\u00a76Spieler\u00a7c {0} \u00a76ist nun stumm f\u00fcr\u00a7c {1} \u00a76.
mutedUserSpeaks={0} versuchte zu sprechen, aber ist stumm geschaltet.
@@ -262,12 +262,12 @@ nickDisplayName=\u00a74Du musst change-displayname in der Essentials-Konfigurati
nickInUse=\u00a74Dieser Name wird bereits verwendet.
nickNamesAlpha=\u00a74Nicknamen d\u00fcrfen nur alphanumerische Zeichen enthalten.
nickNoMore=\u00a76Du hast keinen Spitznamen mehr.
nickSet=\u00a76Dein Spitzname ist nun \u00a7c{0}
nickSet=\u00a76Dein Spitzname ist nun \u00a7c{0}.
nickTooLong=\u00a74Dieser Spitzname ist zu lang.
noAccessCommand=\u00a74Du hast keinen Zugriff auf diesen Befehl.
noAccessPermission=\u00a74Du hast keine Rechte, den Block {0} zu benutzen.
noAccessPermission=\u00a74Du hast keine Rechte dies zu betreten \u00a7c{0}\u00a74.
noBreakBedrock=\u00a74Du darfst Grundgestein nicht zerst\u00f6ren.
noDestroyPermission=\u00a74Du hast keine Rechte, den Block {0} zu zerst\u00f6ren.
noDestroyPermission=\u00a74Du hast keine Rechte dies zu zerst\u00f6ren \u00a7c{0}\u00a74.
noDurability=\u00a74Dieser Gegenstand hat keine Haltbarkeit.
noGodWorldWarning=\u00a74Warnung\! Unsterblichkeitsmodus ist in dieser Welt deaktiviert.
noHelpFound=\u00a74Keine \u00fcbereinstimmenden Befehle.
@@ -300,8 +300,8 @@ now=jetzt
nuke=\u00a75M\u00f6ge der Tod auf Sie hernieder prasseln\!
numberRequired=Ein Zahl wird ben\u00f6tigt.
onlyDayNight=/time unterst\u00fctzt nur day und night.
onlyPlayerSkulls=\u00a74Du kannst den Besitzer nur bei Spieler-Sch\u00e4deln (397\:3) \u00e4ndern.
onlyPlayers=\u00a74Nur Spieler k\u00f6nnen {0} benutzen.
onlyPlayerSkulls=\u00a74Du kannst nur den Besitzer von Spielerk\u00f6pfen (\u00a7c397\:3\u00a74) \u00e4ndern.
onlyPlayers=\u00a74Nur in-Game-Spieler k\u00f6nnen \u00a7c{0} \u00a74benutzen.
onlySunStorm=\u00a74/weather unterst\u00fctzt nur sun und storm.
orderBalances=\u00a76Ordne die Kontost\u00e4nde von\u00a7c {0} \u00a76Benutzern, bitte warten ...
oversizedTempban=\u00a74Du darfst einen Spieler nicht f\u00fcr so eine lange Zeit sperren.
@@ -321,8 +321,8 @@ pWeatherPlayers=\u00a76Diese Spieler haben ihr eigenes Wetter\:\u00a7r
pWeatherReset=\u00a76Das Spielerwetter wurde zur\u00fcckgesetzt f\u00fcr\: \u00a7c{0}
pWeatherSet=\u00a76Spielerwetter gesetzt auf \u00a7c{0}\u00a76 f\u00fcr\: \u00a7c{1}.
pendingTeleportCancelled=\u00a74Laufende Teleportierung abgebrochen.
playerBanIpAddress=\u00a76Spieler\u00a7c {0} \u00a76hat die IP Adresse {1} \u00a76gesperrt.
playerBanned=\u00a76Spieler\u00a7c {0} \u00a76hat {1} \u00a76gesperrt f\u00fcr {2}.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a76Spieler\u00a7c {0} \u00a76wurde gebannt\u00a7c {1} \u00a76f\u00fcr \u00a7c{2}\u00a76.
playerInJail=\u00a74Spieler ist bereits in Gef\u00e4ngnis\u00a7c {0}\u00a76.
playerJailed=\u00a76Spieler\u00a7c {0} \u00a76eingesperrt.
playerJailedFor=\u00a76Spieler\u00a7c {0} \u00a76eingesperrt f\u00fcr {1}.
@@ -340,33 +340,33 @@ posX=\u00a76X\: {0} (+Ost <-> -West)
posY=\u00a76Y\: {0} (+Hoch <-> -Runter)
posYaw=\u00a76Yaw\: {0} (Drehung)
posZ=\u00a76Z\: {0} (+S\u00fcd <-> -Nord)
possibleWorlds=\u00a76M\u00f6gliche Welten sind nummeriert von 0 bis {0}.
possibleWorlds=\u00a76M\u00f6gliche Welten sind die Nummern \u00a7c0\u00a76 bis \u00a7c{0}\u00a76.
potions=\u00a76Zaubertr\u00e4nke\:\u00a7r {0}\u00a76.
powerToolAir=\u00a74Befehl kann nicht mit Luft verbunden werden.
powerToolAlreadySet=\u00a74Befehl \u00a7c{0}\u00a74 ist bereits an {1} gebunden.
powerToolAlreadySet=\u00a74Der Command \u00a7c{0}\u00a74 ist bereits \u00a7c{c{1}\u00a74 zugewiesen.
powerToolAttach=\u00a76Befehl \u00a7c{0}\u00a7f erfolgreich an {1} gebunden.
powerToolClearAll=\u00a76Alle Powertoolbefehle wurden entfernt.
powerToolList=\u00a76Gegenstand \u00a7c{1} \u00a76hat die folgenden Befehle\: \u00a7c{0}\u00a76.
powerToolListEmpty=\u00a74Gegenstand \u00a7c{0} $4hat keinen Befehl.
powerToolNoSuchCommandAssigned=\u00a74Befehl \u00a7c{0}\u00a74 wurde nicht an {1} gebunden.
powerToolRemove=\u00a76Befehl \u00a7c{0}\u00a76 erfolgreich von {1} entfernt.
powerToolRemoveAll=\u00a76Alle Befehle von {0} entfernt.
powerToolNoSuchCommandAssigned=\u00a74Command \u00a7c{0}\u00a74 has not been assigned to \u00a7c{1}\u00a74.
powerToolRemove=\u00a76Command \u00a7c{0}\u00a76 removed from \u00a7c{1}\u00a76.
powerToolRemoveAll=\u00a76All commands removed from \u00a7c{0}\u00a76.
powerToolsDisabled=\u00a76Alle deine Powertools wurden deaktiviert.
powerToolsEnabled=\u00a76Alle deine Powertools wurden aktiviert.
questionFormat=\u00a72[Frage]\u00a7r {0}
readNextPage=\u00a76Tippe\u00a7c /{0} {1} \u00a76f\u00fcr die n\u00e4chste Seite.
recipe=\u00a76Rezept f\u00fcr \u00a7c{0}\u00a76 ({1} von {2})
recipe=\u00a76Recipe for \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 of \u00a7c{2}\u00a76)
recipeBadIndex=Es gibt kein Rezept mit dieser Nummer.
recipeFurnace=\u00a76Schmelze \u00a7c{0}
recipeGrid=\u00a7{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a0\u00a7{0}X \u00a76ist \u00a7c{1}
recipeFurnace=\u00a76Smelt\: \u00a7c{0}\u00a76.
recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a7c{0}X \u00a76ist \u00a7c{1}
recipeMore=\u00a76Tippe /{0} \u00a7c{1}\u00a76 <Nummer> um andere Rezepte f\u00fcr \u00a7c{2}\u00a76 anzuschauen.
recipeNone=Keine Rezepte f\u00fcr {0}
recipeNothing=nichts
recipeShapeless=\u00a76Kombiniere \u00a7c{0}
recipeWhere=\u00a76Wo\: {0}
removed=\u00a7c{0} \u00a76Einheiten entfernt.
repair=\u00a76Du hast erfolgreich deine\u00a7c {0}\u00a76 repariert.
repair=\u00a76Dein \u00a7c{0}\u00a76wurde erfolgreich repariert.
repairAlreadyFixed=\u00a74Dieser Gegenstand ben\u00f6tigt keine Reparatur.
repairEnchanted=\u00a74Du darfst keine verzauberten Gegenst\u00e4nde reparieren.
repairInvalidType=\u00a74Dieser Gegenstand kann nicht repariert werden.
@@ -379,18 +379,18 @@ requestSent=\u00a76Anfrage gesendet an\u00a7c {0}\u00a76.
requestTimedOut=\u00a74Teleportierungsanfrage ist abgelaufen.
requiredBukkit=\u00a76* \! * Du brauchst mindestens CraftBukkit Build \#{0}, lade es von http\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a76Kontostand aller Spieler auf dem Server auf \u00a7a{0} \u00a76gesetzt.
resetBalAll=\u00a76Kontostand aller Spieler auf \u00a7a{0} \u00a76gesetzt.
returnPlayerToJailError=\u00a74Fehler beim Zur\u00fcckversetzen von\u00a7c {0} \u00a74in''s Gef\u00e4ngis\: {1}\!
resetBalAll=\u00a76Balance has been reset to \u00a7c{0} \u00a76for all players.
returnPlayerToJailError=\u00a74Fehler beim Zur\u00fcckversetzen von\u00a7c {0} \u00a74in Gef\u00e4ngis\: {1}\!
runningPlayerMatch=\u00a76Suche nach Spielern mit ''\u00a7c{0}\u00a76'' im Namen (das kann etwas dauern)
second=Sekunde
seconds=Sekunden
seenOffline=\u00a76Spieler\u00a7c {0} \u00a76ist \u00a74offline\u00a76 seit {1}
seenOnline=\u00a76Spieler\u00a7c {0} \u00a76ist \u00a7aonline\u00a76 seit {1}
seenOffline=\u00a76SSpieler\u00a7c {0} \u00a76ist \u00a74offline\u00a76 seit \u00a7c{1}\u00a76.
seenOnline=\u00a76SSpieler\u00a7c {0} \u00a76ist \u00a74online\u00a76 seit \u00a7c{1}\u00a76.
serverFull=Server ist voll
serverTotal=\u00a76Server insgesamt\:\u00a7c {0}
setBal=\u00a7aDein Kontostand wurde auf {0} gesetzt.
setBalOthers=\u00a7aDu hast den Kontostand von {0}\u00a7a auf {1} gesetzt.
setSpawner=\u00a76Mob-Spawner-Typ zu \u00a7c{0}\u00a76 ge\u00e4ndert
setSpawner=\u00a76Mob-Spawner-Typ zu \u00a7c{0}\u00a76 ge\u00e4ndert.
sheepMalformedColor=\u00a74Ung\u00fcltige Farbe.
shoutFormat=\u00a76[Schrei]\u00a7r {0}
signFormatFail=\u00a74[{0}]
@@ -399,12 +399,12 @@ signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74Du hast keine Rechte ein Schild hier zu setzen.
similarWarpExist=\u00a74Ein Warp-Punkt mit einem \u00e4hnlichen Namen existiert bereits.
slimeMalformedSize=\u00a74Ung\u00fcltige Gr\u00f6sse.
socialSpy=\u00a76SocialSpy f\u00fcr {0}\u00a76\: {1}
socialSpy=\u00a76SocialSpy f\u00fcr \u00a7c {0} \u00a7 6\: \u00a7c {1}
soloMob=\u00a74Das Monster m\u00f6chte allein sein.
spawnSet=\u00a76Spawn-Punkt gesetzt f\u00fcr Gruppe \u00a7c{0}\u00a76.
spawned=erzeugt
sudoExempt=\u00a74Du kannst f\u00fcr diesen Spieler kein sudo-Kommando ausf\u00fchren.
sudoRun=\u00a7c{0}\u00a76 benutzt via sudo das Kommando\:\u00a7r /{1} {2}
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a76Ad\u00e9, du schn\u00f6de Welt...
suicideSuccess=\u00a76{0} \u00a76hat sich das Leben genommen.
survival=\u00dcberleben
@@ -420,18 +420,19 @@ teleportRequest=\u00a7c{0}\u00a76 fragt, ob er sich zu dir teleportieren darf.
teleportRequestTimeoutInfo=\u00a76Diese Anfrage wird nach\u00a7c {0} Sekunden\u00a76 ung\u00fcltig.
teleportTop=\u00a76Teleportiere nach oben.
teleportationCommencing=\u00a76Teleportierung gestartet...
teleportationDisabled=\u00a76Teleportierung deaktiviert.
teleportationDisabledFor=\u00a76Teleportation deaktiviert f\u00fcr {0}.
teleportationEnabled=\u00a76Teleportierung aktiviert.
teleportationEnabledFor=\u00a76Teleportation enabled for {0}
teleportationDisabled=\u00a76Teleportation \u00a7cdeaktiviert\u00a76.
teleportationDisabledFor=\u00a76Teleportation \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportation \u00a7cenabled\u00a76.
teleportationEnabledFor=\u00a76Teleportation \u00a7cenabled \u00a76for \u00a7c{0}\u00a76.
teleporting=\u00a76Teleportiere...
tempBanned=Zeitlich gesperrt vom Server f\u00fcr {0}
teleportToPlayer=\u00a76teleportieren zu \u00a7c{0}\u00a76.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a74Du kannst diesen Spieler nicht zeitlich sperren.
thunder=\u00a76Es donnert nun in deiner Welt \u00a7c{0}\u00a76.
thunderDuration=\u00a76Es donnert nun f\u00fcr\u00a7c {1} \u00a76Sekunden in deiner Welt\u00a7c {0}\u00a76.
timeBeforeHeal=\u00a74Zeit bis zur n\u00e4chsten Heilung\:\u00a7c {0}\u00a76.
timeBeforeTeleport=\u00a74Zeit bis zum n\u00e4chsten Teleport\:\u00a7c {0}
timeFormat=\u00a7c{0}\u00a76 oder \u00a7c{1}\u00a76 oder \u00a7c{2}\u00a76.
timeFormat=\u00a7c{0}\u00a76 or \u00a7c{1}\u00a76 or \u00a7c{2}\u00a76
timeSetPermission=\u00a74Du hast keine Berechtigung die Zeit zu \u00e4ndern.
timeWorldCurrent=\u00a76Die aktuelle Zeit in\u00a7c {0} \u00a76ist \u00a7c{1}
timeWorldSet=Die Zeit in \u00a7c{1}\u00a7f wurde zu {0} gesetzt.
@@ -446,12 +447,12 @@ true=\u00a7aja\u00a7r
typeTpaccept=\u00a76Um zu teleportieren, schreibe \u00a7c/tpaccept\u00a76.
typeTpdeny=\u00a76Um diese Anfrage abzulehnen, schreibe \u00a7c/tpdeny\u00a76.
typeWorldName=\u00a76Du kannst auch den Namen der Welt eingeben.
unableToSpawnMob=\u00a74Fehler beim Erzeugen eines Monster.
unableToSpawnMob=\u00a74Fehler beim Erzeugen des Monsters.
unignorePlayer=\u00a76Du ignorierst Spieler\u00a7c {0} \u00a76nicht mehr.
unknownItemId=\u00a74Unbekannte Gegenstandsnummer\:\u00a7r {0}\u00a74.
unknownItemInList=\u00a74Unbekannter Gegenstand {0} in Liste {1}.
unknownItemName=\u00a74Unbekannter Gegenstand\: {0}.
unlimitedItemPermission=\u00a74Du hast keine Rechte f\u00fcr unendlich {0}.
unlimitedItemPermission=\u00a74No permission for unlimited item \u00a7c{0}\u00a74.
unlimitedItems=\u00a76Unendliche Objekte\:\u00a7r
unmutedPlayer=\u00a76Spieler\u00a7c {0}\u00a76 ist nicht mehr stumm.
unvanishedReload=\u00a74Ein Neuladen des Servers hat dich sichtbar gemacht.
@@ -470,7 +471,7 @@ vanished=\u00a76Du bist nun vollst\u00e4ndig unsichtbar f\u00fcr normale Benutze
versionMismatch=\u00a74Versionen nicht identisch\! Bitte aktualisiere {0}.
versionMismatchAll=\u00a74Versionen ungleich\! Bitte aktualisiere alle Essentials jars auf die gleiche Version.
voiceSilenced=\u00a76Du bist nun stumm\!
walking=geht
walking=Bewegungs
warpDeleteError=\u00a74Fehler beim L\u00f6schen der Warp-Datei.
warpList={0}
warpListPermission=\u00a74Du hast keine Berechtigung, die Warp-Punkte anzuzeigen.
@@ -480,7 +481,7 @@ warpSet=\u00a76Warp-Punkt\u00a7c {0} \u00a76wurde erstellt.
warpUsePermission=\u00a74Du hast keinen Zugriff f\u00fcr diesen Warp-Punkt.
warpingTo=\u00a76Teleportiere zu Warp-Punkt\u00a7c {0}\u00a76.
warps=\u00a76Warp-Punkte\:\u00a7r {0}
warpsCount=\u00a76Es gibt\u00a7c {0} \u00a76Warp-Punkte. Zeige Seite {1} von {2}.
warpsCount=\u00a76There are\u00a7c {0} \u00a76warps. Showing page \u00a7c{1} \u00a76of \u00a7c{2}\u00a76.
weatherStorm=\u00a76In \u00a7c{0} \u00a76st\u00fcrmt es nun.
weatherStormFor=\u00a76In \u00a7c{0} \u00a76st\u00fcrmt es nun f\u00fcr {1} Sekunden.
weatherSun=\u00a76In \u00a7c{0}\u00a76 scheint nun die \u00a7cSonne\u00a76.
@@ -532,18 +533,26 @@ tempbanExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht tempor\u00e4r ba
mayNotJailOffline=\u00a74Du darfst abgemeldete Spieler nicht einsperren.
muteExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht stummschalten.
ignoreExempt=\u00a74Du kannst diesen Spieler nicht ignorieren.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the Skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that Skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player Skull.
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
unsafeTeleportDestination=\u00a74Das Teleport-Ziel ist nicht sicher und der Teleportschutz ist nicht aktiv.
noMetaJson=JSON MetaDaten werden in dieser Bukkit-Version nicht unterst\u00fctzt.
maxMoney=\u00a74Diese \u00dcberweisung \u00fcberschreitet das Limit des Empf\u00e4ngers.
skullChanged=\u00a76Skull changed to \u00a7c{0}\u00a76.
alphaNames=\u00a74Spieler Namen k\u00f6nnen nur Buchstaben, Zahlen und Unterstriche enthalten.
givenSkull=\u00a76Dir wurde der Kopf von \u00a7c{0}\u00a76 gegeben.
noPermissionSkull=$4Du hast nicht die Berechtigung diesen Kopf zu \u00e4ndern.
teleportInvalidLocation=Der Wert der angegebenen Koordinaten darf nicht \u00fcber 30000000 sein
invalidSkull=\u00a74Bitte halte einen Spielerkopf in der Hand.
weatherInvalidWorld=Welt mit dem Namen {0} wurde nicht gefunden\!
gameModeInvalid=\u00a74Sie m\u00fcssen einen g\u00fcltigen Spieler/Modus angeben.
mailTooLong=\u00a74Nachricht zu lang. Schreibe nicht mehr als 1000 Zeichen.
mailDelay=In der letzten Minute wurden zu viele Mails gesendet. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as\:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

View File

@@ -27,7 +27,7 @@ balance=\u00a7aBalance\:\u00a7c {0}
balanceOther=\u00a7aBalance of {0}\u00a7a\:\u00a7c {1}
balanceTop=\u00a76Top balances ({0})
banExempt=\u00a74You cannot ban that player.
banFormat=\u00a74Banned\:\n\u00a7r{0}
banFormat=\u00a7cYou have been banned\:\n\u00a7r{0}
bed=\u00a7obed\u00a7r
bedMissing=\u00a74Your bed is either unset, missing or blocked.
bedNull=\u00a7mbed\u00a7r
@@ -99,7 +99,7 @@ enchantmentNotFound=\u00a74Enchantment not found\!
enchantmentPerm=\u00a74You do not have the permission for\u00a7c {0}\u00a74.
enchantmentRemoved=\u00a76The enchantment\u00a7c {0} \u00a76has been removed from your item in hand.
enchantments=\u00a76Enchantments\:\u00a7r {0}
errorCallingCommand=Error calling command /{0}.
errorCallingCommand=Error calling the command /{0}
errorWithMessage=\u00a7cError\:\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
@@ -129,7 +129,7 @@ gcmax=\u00a76Maximum memory\:\u00a7c {0} MB.
gctotal=\u00a76Allocated memory\:\u00a7c {0} MB.
geoIpUrlEmpty=GeoIP download url is empty.
geoIpUrlInvalid=GeoIP download url is invalid.
geoipJoinFormat=\u00a76Player \u00a7c{0} \u00a76comes from\u00a7c {1}\u00a76.
geoipJoinFormat=\u00a76Player \u00a7c{0} \u00a76comes from \u00a7c{1}\u00a76.
giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76.
godDisabledFor=\u00a7cdisabled\u00a76 for\u00a7c {0}
godEnabledFor=\u00a7aenabled\u00a76 for\u00a7c {0}
@@ -155,7 +155,7 @@ holdBook=\u00a74You are not holding a writable book.
holdFirework=\u00a74You must be holding a firework to add effects.
holdPotion=\u00a74You must be holding a potion to apply effects to it.
holeInFloor=\u00a74Hole in floor\!
homeSet=\u00a76Home set.
homeSet=\u00a76Home set to current location.
homes=\u00a76Homes\:\u00a7r {0}
hour=hour
hours=hours
@@ -321,8 +321,8 @@ 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}.
pendingTeleportCancelled=\u00a74Pending teleportation request cancelled.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\:\u00a7c {1}\u00a76.
playerBanned=\u00a76Player\u00a7c {0} \u00a76banned\u00a7c {1} \u00a76for \u00a7c{2}\u00a76.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a76Player\u00a7c {0} \u00a76banned\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerInJail=\u00a74Player is already in jail\u00a7c {0}\u00a74.
playerJailed=\u00a76Player\u00a7c {0} \u00a76jailed.
playerJailedFor=\u00a76Player\u00a7c {0} \u00a76jailed for {1}.
@@ -345,7 +345,7 @@ potions=\u00a76Potions\:\u00a7r {0}\u00a76.
powerToolAir=\u00a74Command can''t be attached to air.
powerToolAlreadySet=\u00a74Command \u00a7c{0}\u00a74 is already assigned to \u00a7c{1}\u00a74.
powerToolAttach=\u00a7c{0}\u00a76 command assigned to {1}.
powerToolClearAll=\u00a76All power tool commands have been cleared.
powerToolClearAll=\u00a76All powertool commands have been cleared.
powerToolList=\u00a76Item \u00a7c{1} \u00a76has the following commands\: \u00a7c{0}\u00a76.
powerToolListEmpty=\u00a74Item \u00a7c{0} \u00a74has no commands assigned.
powerToolNoSuchCommandAssigned=\u00a74Command \u00a7c{0}\u00a74 has not been assigned to \u00a7c{1}\u00a74.
@@ -404,7 +404,7 @@ soloMob=\u00a74That mob likes to be alone.
spawnSet=\u00a76Spawn location set for group\u00a7c {0}\u00a76.
spawned=spawned
sudoExempt=\u00a74You cannot sudo this user.
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1} {2}
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a76Goodbye cruel world...
suicideSuccess=\u00a76Player \u00a7c{0} \u00a76took their own life.
survival=survival
@@ -420,12 +420,13 @@ teleportRequest=\u00a7c{0}\u00a76 has requested to teleport to you.
teleportRequestTimeoutInfo=\u00a76This request will timeout after\u00a7c {0} seconds\u00a76.
teleportTop=\u00a76Teleporting to top.
teleportationCommencing=\u00a76Teleportation commencing...
teleportationDisabled=\u00a76Teleportation disabled.
teleportationDisabledFor=\u00a76Teleportation disabled for \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportation enabled.
teleportationEnabledFor=\u00a76Teleportation enabled for \u00a7c{0}\u00a76.
teleportationDisabled=\u00a76Teleportation \u00a7cdisabled\u00a76.
teleportationDisabledFor=\u00a76Teleportation \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportation \u00a7cenabled\u00a76.
teleportationEnabledFor=\u00a76Teleportation \u00a7cenabled \u00a76for \u00a7c{0}\u00a76.
teleporting=\u00a76Teleporting...
tempBanned=Temporarily banned from server for {0}.
teleportToPlayer=\u00a76Teleporting to \u00a7c{0}\u00a76.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a74You may not tempban that player.
thunder=\u00a76You\u00a7c {0} \u00a76thunder in your world.
thunderDuration=\u00a76You\u00a7c {0} \u00a76thunder in your world for\u00a7c {1} \u00a76seconds.
@@ -473,7 +474,7 @@ voiceSilenced=\u00a76Your voice has been silenced\!
walking=walking
warpDeleteError=\u00a74Problem deleting the warp file.
warpList={0}
warpListPermission=\u00a74You do not have Permission to list warps.
warpListPermission=\u00a74You do not have permission to list warps.
warpNotExist=\u00a74That warp does not exist.
warpOverwrite=\u00a74You cannot overwrite that warp.
warpSet=\u00a76Warp\u00a7c {0} \u00a76set.
@@ -531,19 +532,26 @@ banExemptOffline=\u00a74You may not ban offline players.
tempbanExemptOffline=\u00a74You may not tempban offline players.
mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You cannot ignore that player.
ignoreExempt=\u00a74You may not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
skullChanged=\u00a76Skull changed to \u00a7c{0}\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player skull.
weatherInvalidWorld=World named {0} not found!
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 characters.
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
seenAccounts=\u00a76Player has also been known as\:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

View File

@@ -9,8 +9,8 @@ addedToOthersAccount=\u00a7a{0} han sidos agregados a la cuenta de {1}\u00a7a. N
adventure=aventura
alertBroke=rompi\u00f3\:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} en\: {3}
alertPlaced=puesto\:
alertUsed=Usado\:
alertPlaced=colocado\:
alertUsed=usado\:
antiBuildBreak=\u00a74No puedes romper\u00a7c {0} \u00a74bloques aqu\u00ed.
antiBuildCraft=\n\n\u00a74No tienes permiso para crear\u00a7c {0}\u00a74.
antiBuildDrop=\u00a74No puedes tirar \u00a7c {0}\u00a74.
@@ -22,11 +22,11 @@ backAfterDeath=\u00a76Usa el comando \u00a7c/back \u00a76para volver al lugar de
backUsageMsg=\u00a76Volviendo a la ubicaci\u00f3n anterior.
backupDisabled=\u00a74No se ha configurado un c\u00f3digo externo de copias de seguridad.
backupFinished=Copia de seguridad completada.
backupStarted=Comenzando copia de seguridad...
balance=\u00a7aCantidad de dinero\: {0}
balanceOther=\u00a7aEl dinero de {0}\u00a7a es en total\:\u00a7c {1}
balanceTop=\u00a77Ranking de econom\u00edas ({0})
banExempt=\u00a74No puedes banear a este jugador.
backupStarted=\u00a76Copia de seguridad empezada.
balance=\u00a7aDinero\:\u00a7c {0}
balanceOther=\u00a7aDinero de {0} \u00a7a\:\u00a7c {1}
balanceTop=\u00a76Ranking de econom\u00edas ({0})
banExempt=\u00a74No puedes banear a ese jugador.
banFormat=\u00a74Baneado\: \u00a7r {0}
bed=\u00a7ocama\u00a7r
bedMissing=\u00a7cTu cama no esta, se encuentra obstru\u00edda o no esta segura
@@ -35,9 +35,9 @@ bedSet=\u00a76Cama establecida como lugar de aparicion\!
bigTreeFailure=\u00a7cError al generar el \u00e1rbol grande. Prueba de nuevo en tierra, tierra h\u00fameda o hierba.
bigTreeSuccess=\u00a76\u00c1rbol grande generado.
blockList=\u00a76Essentials ha cedido los siguientes comandos a otros plugins\:
bookAuthorSet=\u00a76Autor del libro cambiado a {0}.
bookAuthorSet=\u00a76Ahora el autor de este libro es {0}.
bookLocked=\u00a76El libro ha sido bloqueado.
bookTitleSet=\u00a76Se ha cambiado el t\u00edtulo del libo a {0}.
bookTitleSet=\u00a76Ahora el t\u00edtulo del libro es {0}.
broadcast=\u00a7r\u00a76[\u00a74Difundido\u00a76]\u00a7a {0}
buildAlert=\u00a74No tienes permisos para construir.
bukkitFormatChanged=Formato de la versi\u00f3n de Bukkit cambiado. Versi\u00f3n no comprobada.
@@ -46,7 +46,7 @@ canTalkAgain=\u00a77Ya puedes hablar de nuevo.
cannotStackMob=\u00a74No tienes permiso para apilar tantos mobs.
cantFindGeoIpDB=No se puede encontrar la base de datos del Geo IP.
cantReadGeoIpDB=\u00a1Error al leer la base de datos de GeoIP\!
cantSpawnItem=\u00a7cNo tienes acceso para producir este objeto {0}
cantSpawnItem=\u00a74No tienes acceso para producir el \u00edtem\u00a7c {0}\u00a74.
chatTypeAdmin=[A]
chatTypeLocal=[L]
chatTypeSpy=[Esp\u00eda]
@@ -55,14 +55,14 @@ cleaning=Limpiando archivos de usuario.
commandFailed=Comando {0} fallido\:
commandHelpFailedForPlugin=Error al obtener ayuda para el plugin\: {0}
commandNotLoaded=\u00a74El comando {0} no est\u00e1 cargado correctamente.
compassBearing=\u00a76Bearing\: {0} ({1} grados).
compassBearing=\u00a76Transporte\: {0} ({1} grados).
configFileMoveError=Error al mover config.yml a la carpeta de la copia de seguridad.
configFileRenameError=Error al renombrar archivo temp a config.yml.
connectedPlayers=\u00a76Jugadores conectados\u00a7r
connectionFailed=No se ha podido abrir la conexion.
cooldownWithMessage=\u00a74Tiempo restante\:\u00a76 {0}
corruptNodeInConfig=\u00a74Advertencia\: Tu archivo de configuraci\u00f3n tiene un nodo {0} incorrecto.
couldNotFindTemplate=\u00a74No se puede encontrar la plantilla\u00a77 {0}
couldNotFindTemplate=\u00a74No se puede encontrar la plantilla\u00a76 {0}
creatingConfigFromTemplate=Creando configuraci\u00f3n desde la plantilla\: {0}
creatingEmptyConfig=Creando configuraci\u00f3n vac\u00eda\: {0}
creative=creativo
@@ -74,25 +74,25 @@ defaultBanReason=\u00a1Baneado por mal comportamiento\!
deleteFileError=No se puede eliminar archivo\: {0}
deleteHome=\u00a77El hogar\u00a7c {0} \u00a77ha sido eliminado.
deleteJail=\u00a77La c\u00e1rcel {0} \u00a77ha sido eliminada.
deleteWarp=\u00a77El warp\u00a7c {0} \u00a77ha sido borrado.
deleteWarp=\u00a76El warp\u00a7c {0} \u00a76ha sido borrado.
deniedAccessCommand=\u00a7c{0} \u00a74ha denegado el acceso al comando.
denyBookEdit=\u00a74No puedes desbloquear este libro.
denyChangeAuthor=\u00a74No puedes cambiar el autor de este libro.
denyChangeTitle=\u00a74No puedes cambiar el t\u00edtulo de este libro.
depth=\u00a77Te encuentras en el nivel del mar.
depthAboveSea=\u00a77Est\u00e1s {0} bloque(s) por encima del mar.
depthBelowSea=\u00a76Est\u00e1s a\u00a7c {0} \u00a76bloque(s) por debajo del mar.
depthAboveSea=\u00a76Est\u00e1s\u00a7c {0} \u00a76bloque(s) por encima del mar.
depthBelowSea=\u00a76Est\u00e1s a\u00a7c {0} \u00a76bloque(s) por debajo del nivel del mar.
destinationNotSet=\u00a1Destino no establecido\!
disableUnlimited=\u00a77Desactivando colocacion ilimitada de \u00a7c{0} \u00a76para {1}.
disableUnlimited=\u00a76La colocaci\u00f3n ilimitada de \u00a7c{0} \u00a76ha sido desactivada para {1}\u00a76.
disabled=desactivado
disabledToSpawnMob=\u00a74El spawn de este mob est\u00e1 deshabilitado en la configuraci\u00f3n.
distance=\u00a76Distancia\: {0}
dontMoveMessage=\u00a77El teletransporte comenzar\u00e1 en\u00a7c {0}\u00a77. Por favor, no te muevas.
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)
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.
enableUnlimited=\u00a77Dando cantidad ilimitada de {0} a {1}.
enableUnlimited=\u00a76Dando cantidad ilimitada de\u00a7c {0} \u00a76a \u00a7c{1}\u00a76.
enabled=activado
enchantmentApplied=\u00a76El encantamiento\u00a7c {0} \u00a76fue aplicado al objeto de tu mano.
enchantmentNotFound=\u00a74\u00a1No se ha encontrado \u00e9ste encantamiento\!
@@ -103,46 +103,46 @@ errorCallingCommand=Error al ejecutar el comando /{0}
errorWithMessage=\u00a7cError\:\u00a74 {0}
essentialsHelp1=Archivo corrupto, no es posible abrirlo. Essentials est\u00e1 ahora desactivado. Si no puedes arreglar el archivo, ve a http\://tiny.cc/EssentialsChat
essentialsHelp2=Archivo corrupto, no es posible abrirlo. Essentials est\u00e1 ahora desactivado. Si no puedes arreglar el archivo, escribe /essentialshelp dentro del juego o ve a http\://tiny.cc/EssentialsChat
essentialsReload=\u00a76El plugin Essentials ha sido recargado. La versi\u00f3n es\u00a7c {0}
essentialsReload=\u00a76Essentials ha sido recargado. La versi\u00f3n es\u00a7c {0}.
exp=\u00a7c{0} \u00a76tiene\u00a7c {1} \u00a76 de exp. (nivel\u00a7c {2}\u00a76) y necesita\u00a7c {3} \u00a76de exp para subir su nivel.
expSet=\u00a7c{0} \u00a76ahora tiene\u00a7c {1} \u00a76de exp.
extinguish=\u00a76Te has suicidado.
extinguishOthers=\u00a76Has matado a {0}\u00a76.
extinguishOthers=\u00a77Has matado a {0}.
failedToCloseConfig=Error al cerrar configuraci\u00f3n {0}.
failedToCreateConfig=Error al crear configuraci\u00f3n {0}.
failedToWriteConfig=Error al escribir configuraci\u00f3n {0}.
false=\u00a74falso\u00a7f
feed=\u00a77Apetito satisfecho.
feedOther=\u00a77Acabas de ser alimentado de poder UltraMinecraftiano\! Ahora tienes {0} muslitos llenos\!
false=\u00a74no\u00a7r
feed=\u00a76Tu apetito est\u00e1 satisfecho.
feedOther=\u00a76Satisficiste el apetito de \u00a7c{0}\u00a76.
fileRenameError=Error al renombrar el archivo {0}
fireworkColor=\u00a74Par\u00e1metros inv\u00e1lidos. Inserta primero el color.
fireworkEffectsCleared=\u00a77Borrados todos los efectos.
fireworkSyntax=\u00a77Uso del cohete\:\u00a7c color\:<color> [color\:<color>] [forma\:<shape>] [efecto de explosi\u00f3n\:<effect>]\n\u00a77Para usar m\u00faltiples colores/efectos, separa los nombres mediante comas\: \u00a7cred,blue,pink\n\u00a77Formas\:\u00a7c star, ball, large, creeper, burst \u00a76Efectos\:\u00a7c trail, twinkle.
flyMode=\u00a77Modo de vuelo\u00a7c {0} \u00a77para\u00a7c {1}\u00a77.
flyMode=\u00a76Modo de vuelo\u00a7c {0} \u00a76para\u00a7c {1}\u00a76.
flying=volando
foreverAlone=\u00a7cNo tienes nadie a quien puedas responder.
fullStack=\u00a74Ya tienes el stack completo.
gameMode=\u00a76El modo de juego de\u00a7c {1} ha sido cambiado a\u00a7c {0}\u00a76.
gameMode=\u00a76El modo de juego de\u00a7c {1} \u00a76ha sido cambiado a\u00a7c {0}\u00a76.
gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entidades, \u00a7c{4}\u00a76 tiles.
gcfree=Memoria libre\: {0} MB
gcmax=Memoria maxima\: {0} MB
gctotal=Memoria asignada\: {0} MB.
gcfree=\u00a76Memoria libre\:\u00a7c {0} MB.
gcmax=\u00a76Memoria m\u00e1xima\:\u00a7c {0} MB.
gctotal=\u00a76Memoria asignada\:\u00a7c {0} MB.
geoIpUrlEmpty=El link para descargar GeoIP esta vacio.
geoIpUrlInvalid=El link para descargar GeoIP es inv\u00e1lido.
geoipJoinFormat=\u00a76El jugador \u00a7c{0} \u00a76viene de \u00a7c{1}\u00a76.
giveSpawn=\u00a77Se ha dado\u00a7c {0} \u00a76de\u00a7c {1} a\u00a7c {2}\u00a76.
godDisabledFor=desactivado para {0}
godEnabledFor=activado para {0}
godDisabledFor=\u00a7cdeshabilitado\u00a76 para\u00a7c {0}
godEnabledFor=\u00a7aactivado\u00a76 para\u00a7c {0}
godMode=\u00a77Modo de dios \u00a7c{0}\u00a77.
groupDoesNotExist=\u00a74Nadie conectado en este grupo\!
groupNumber=\u00a7c{0}\u00a7f conectados, para ver la lista completa\:\u00a7c /{1} {2}
hatArmor=\u00a7cNo puedes usar este item como sombrero\!
hatEmpty=\u00a7cNo est\u00e1s usando un sombrero.
hatFail=\u00a7cDebes tener un item en tu mano para usarlo de sombrero.
hatArmor=\u00a7c\u00a1No puedes usar este \u00edtem como sombrero\!
hatEmpty=\u00a74No est\u00e1s usando sombrero.
hatFail=\u00a74Necesitas tener un \u00edtem en tu mano para poder usarlo de sombrero.
hatPlaced=\u00a7eDisfruta de tu nuevo sombrero\!
hatRemoved=\u00a7eTu sombrero ha sido borrado.
haveBeenReleased=\u00a77Has sido liberado.
heal=\u00a77Has sido curado.
heal=\u00a76Has sido curado.
healDead=\u00a74\u00a1Est\u00e1 muerto, no puedes curarlo\!
healOther=\u00a77Has curado a {0}.
helpConsole=Para obtener ayuda de la consola, escribe ?.
@@ -150,51 +150,51 @@ helpFrom=\u00a76Comandos de {0}\:
helpLine=\u00a76/{0}\u00a7r\: {1}
helpMatching=\u00a77Comandos que coinciden con "{0}"\:
helpOp=\u00a74[Ayuda de Op]\u00a7r \u00a76{0}\:\u00a7r {1}
helpPlugin=\u00a74{0}\u00a7f\: Ayuda con los plugins\: /help {1}
helpPlugin=\u00a74{0}\u00a7r\: Ayuda para el plugin\: /help {1}
holdBook=\u00a74No tienes un libro para escribir.
holdFirework=\u00a74No tienes algun cohete al que agregar efectos.
holdPotion=\u00a74No tienes pociones a las que agregar efectos.
holeInFloor=\u00a74\u00a1No hay suelo en el spawn\! \u00a1Alguien lo ha roto\!
holeInFloor=\u00a74\u00a1No hay suelo en el punto de aparici\u00f3n\!
homeSet=\u00a77Hogar establecido.
homes=\u00a76Hogares\:\u00a7r {0}
hour=hora
hours=horas
ignoredList=\u00a77Ignorado\:\u00a7r {0}
ignoredList=\u00a76Ignorado\:\u00a7r {0}
ignorePlayer=A partir de ahora ignoras al jugador {0}.
illegalDate=Formato de fecha ilegal.
infoChapter=\u00a76Seleccionar cap\u00edtulo\:
infoChapterPages=\u00a7e ---- \u00a77{0} \u00a7e--\u00a77 P\u00e1gina \u00a7c{1}\u00a77 de \u00a7c{2} \u00a7e----
infoPages=\u00a7e ---- \u00a77{2} \u00a7e--\u00a77 P\u00e1gina \u00a74{0}\u00a77/\u00a74{1} \u00a7e----
infoUnknownChapter=\u00a74Cap\u00edtulo desconocido.
infoUnknownChapter=\u00a74Desconocido.
insufficientFunds=\u00a74Te falta dinero.
invalidCharge=\u00a74Carga no v\u00e1lida.
invalidFireworkFormat=\u00a77La opci\u00f3n \u00a74 {0} \u00a77no es un valor v\u00e1lido para\u00a74 {1}\u00a77.
invalidHome=\u00a1El hogar {0} no existe\!
invalidHomeName=\u00a74Nombre de casa inv\u00e1lido\!
invalidMob=\u00a74Invalid mob type.
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\!
invalidMob=\u00a74Tipo de mob inv\u00e1lido.
invalidNumber=N\u00famero inv\u00e1lido.
invalidPotion=\u00a74Poci\u00f3n inv\u00e1lida.
invalidPotionMeta=\u00a74Opciones de poci\u00f3n inv\u00e1lidas\: \u00a7c{0}\u00a74.
invalidSignLine=La l\u00ednea {0} en el cartel no es v\u00e1lida.
invalidWarpName=\u00a7cEste warp no ha sido encontrado. \u00bfEs posible que alguien lo haya borrado, o es un bug de Essentials?
invalidWarpName=\u00a74\u00a1Nombre del Warp no reconocido\!
invalidWorld=\u00a74Mundo erroneo o no cargado.
is=es
itemCannotBeSold=\u00a1Ese objeto no puede ser vendido al servidor\!
itemCannotBeSold=\u00a74\u00a1Ese objeto no puede ser vendido al servidor\!
itemMustBeStacked=El objeto tiene que ser intercambiado en montones. Una cantidad de 2s ser\u00edan dos montones, etc.
itemNames=Nombre corto del art\u00edculo\: {0}
itemNotEnough1=\u00a7cNo tienes suficientes unidades de ese objeto para venderlo.
itemNotEnough2=\u00a77Si pensabas en vender todos tus objetos de ese tipo, usa /sell nombredeobjeto
itemNames=\u00a76Nombre corto del \u00edtem\:\u00a7r {0}
itemNotEnough1=\u00a74No tienes la suficiente cantidad del \u00edtem para venderlo.
itemNotEnough2=\u00a76Si quieres vender todos tus \u00edtems que sean como ese, escribe /sell nombre_del_\u00edtem (en ingl\u00e9s).
itemNotEnough3=\u00a77/sell nombredeobjeto -1 vendera todos excepto un objeto, etc.
itemSellAir=\u00bf\u00bf\u00bfRealmente intentas vender AIRE??? \u00a1\u00a1\u00a1Pon un objeto en tu mano\!\!\!
itemSold=\u00a77Vendido por \u00a7c {0} \u00a77 ({1} {2} a {3} cada uno).
itemSoldConsole={0} Vendido {1} para\u00a77 {2} \u00a77({3} objetos a {4} cada uno)
itemSpawn=\u00a77Dando {0} de {1}
itemSpawn=\u00a76Dando {0} de {1}
itemType=\u00a76Objeto\:\u00a7c {0} \u00a76-\u00a7c {1}
itemsCsvNotLoaded=\u00a1No se ha podido cargar el archivo items.csv\!
jailAlreadyIncarcerated=\u00a74Ese jugador ya est\u00e1 en la c\u00e1rcel\:\u00a7c {0}
jailMessage=\u00a7c\u00a1Por el crimen hacer, en la carcel unos dias vas a estar\!
jailNotExist=Esa c\u00e1rcel no existe.
jailReleased=\u00a77Jugador \u00a7e{0}\u00a77 liberado.
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.
jailReleasedPlayerNotify=\u00a77\u00a1Has sido liberado\!
jailSentenceExtended=Tiempo en la c\u00e1rcel extendido a {0}
jailSet=\u00a76La c\u00e1rcel {0} ha sido creada.
@@ -203,12 +203,12 @@ kickDefault=Has sido expulsado del servidor\! Nota\: Revisa tu comportamiento
kickExempt=\u00a74No puedes expulsar a ese jugador.
kickedAll=\u00a74Todos los jugadores han sido expulsados.
kill=\u00a77Has matado a\u00a7c {0}\u00a77.
killExempt=\u00a74No puedes matar a {0}
killExempt=\u00a74No puedes matar a \u00a7c{0}\u00a74.
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitError2=\u00a74El kit que has especificado esta mal hecho o tiene algun bug. Por favor, habla con un administrador inmediatamente.
kitError2=\u00a74Este kit est\u00e1 mal creado. Por favor, contacta con un administrador.
kitError=\u00a7cNo hay ning\u00fan kit v\u00e1lido.
kitGiveTo=\u00a76El kit\u00a7c {0}\u00a76 se ha dado a {1}\u00a7.
kitInvFull=\u00a7cTu preciado inventario no tiene hueco para este kit. El kit se lanzar\u00e1 al suelo.
kitGiveTo=\u00a76Dando kit\u00a7c {0}\u00a76 a \u00a7c{1}\u00a76.
kitInvFull=\u00a74Tu preciado inventario no tiene hueco para este kit. El kit se lanzar\u00e1 al suelo.
kitNotFound=\u00a74Ese kit no existe.
kitOnce=\u00a74No puedes volver a usar este kit.
kitReceive=\u00a76Kit\u00a7c {0}\u00a76 recibido.
@@ -216,27 +216,27 @@ kitTimed=\u00a7c No puedes usar ese kit de nuevo para otro {0}.
kits=\u00a77Kits disponibles\: {0}
leatherSyntax=\u00a76Color sintax\: color\:<red>,<green>,<blue> ejemplo\: color\:255,0,0.
lightningSmited=\u00a76\u00a1Has sido golpeado m\u00e1gicamente\!
lightningUse=\u00a77Golpeando a {0}
lightningUse=\u00a76Golpeando al jugador\u00a7c {0}
listAfkTag=\u00a78[Ausente]\u00a7r
listAmount=\u00a79Hay \u00a7c{0}\u00a79 jugadores de un m\u00e1ximo de \u00a7c{1}\u00a79 jugadores \u00a72en linea\u00a79.
listAmountHidden=\u00a79Hay \u00a7c{0}\u00a79 jugadores de un maximo de \u00a7c{1}\u00a79 jugadores online.
listAmountHidden=\u00a76Hay \u00a7c{0}\u00a76/{1}\u00a76 jugadores de un m\u00e1ximo de \u00a7c{2}\u00a76 jugadores conectados.
listGroupTag=\u00a76{0}\u00a7r\: \u00a7r
listHiddenTag=\u00a78[Oculto]\u00a7r
loadWarpError=Error al cargar el teletransporte {0}
loadWarpError=\u00a74Error al cargar el Warp {0}.
localFormat=[L]<{0}> {1}
mailClear=\u00a77Para marcar tu email como le\u00eddo, escribe \u00a7c/mail clear\u00a77.
mailCleared=\u00a77Email limpiado\!
mailClear=\u00a76Para marcar tu correo como le\u00eddo, escribe\u00a7c /mail clear\u00a76.
mailCleared=\u00a76\u00a1El correo ha sido limpiado\!
mailSent=\u00a76\u00a1El correo ha sido enviado\!
markMailAsRead=\u00a7cPara marcar tu email como leido, escribe /mail clear
markMailAsRead=\u00a76Para marcar tu correo como le\u00eddo, escribe\u00a7c /mail clear\u00a76.
markedAsAway=\u00a77Has sido anunciado como AFK (Away-From-Keyboard/Ausente o Lejos del teclado).
markedAsNotAway=\u00a77Ya no estas AFK.
matchingIPAddress=\u00a77Los siguientes jugadores entraron previamente con la IP\:
maxHomes=No puedes establecer m\u00e1s de {0} hogares.
matchingIPAddress=\u00a76Los siguientes jugadores entraron previamente con la IP\:
maxHomes=\u00a74No puedes tener m\u00e1s de\u00a7c {0} \u00a74hogares.
mayNotJail=\u00a7cNo puedes encarcelar a esa persona.
me=yo
minute=minuto
minutes=minutos
missingItems=No tienes {0}x de {1}.
missingItems=\u00a74No tienes \u00a7c{0}x {1}\u00a74.
mobSpawnError=Error al cambiar la localizaci\u00f3n para el nacimiento de los mobs.
mobSpawnLimit=Cantidad de criaturas (mobs) limitadas por el l\u00edmite del servidor.
mobSpawnTarget=El bloque seleccionado ser\u00e1 el lugar donde van a aparecer los mobs.
@@ -246,227 +246,228 @@ moneySentTo=\u00a7a{0} ha sido enviado a {1}
month=mes
months=meses
moreThanZero=Las cantidades han de ser mayores que 0.
moveSpeed=\u00a76Has establecido la velocidad de {0} a\u00a7c {1} \u00a76para {2}\u00a76.
msgFormat=\u00a76[{0}\u00a76 -> {1}\u00a76] \u00a7r{2}
moveSpeed=\u00a76Establecida velocidad de {0} a\u00a7c {1} \u00a76durante \u00a7c{2}\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
multipleCharges=\u00a74Solo puedes aplicar una carga a este cohete.
multiplePotionEffects=\u00a74No puedes aplicarle m\u00e1s de un efecto a esta poci\u00f3n.
muteExempt=\u00a7cNo puedes silenciar a ese jugador.
muteNotify=\u00a7c{0} \u00a76ha silenciado a \u00a7c{1}\u00a76.
mutedPlayer=\u00a77El jugador\u00a7c {0} \u00a77est\u00e1 silenciado.
mutedPlayerFor=\u00a77Jugador\u00a7c {0} \u00a77silenciado por\u00a7c {1}\u00a77.
mutedPlayer=\u00a76El jugador\u00a7c {0} \u00a76est\u00e1 silenciado.
mutedPlayerFor=\u00a76Jugador\u00a7c {0} \u00a76silenciado por\u00a7c {1}\u00a76.
mutedUserSpeaks={0} intent\u00f3 hablar, pero est\u00e1 silenciado.
nearbyPlayers=Jugadores cercanos\: {0}
negativeBalanceError=El usuario no tiene permitido tener dinero negativo.
nickChanged=Se ha establecido un nombre diferente a un jugador.
nearbyPlayers=\u00a76Jugadores cercanos\:\u00a7r {0}
negativeBalanceError=\u00a74El jugador no tiene permitido tener dinero por debajo de 0$.
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.
nickNoMore=\u00a76Ya no tienes un nombre personalizado. VUELVES A SER TU.
nickSet=\u00a76Tu nombre se ha personalizado y ahora es\u00a7c {0}
nickTooLong=\u00a74Ese nombre es demasiado largo.
noAccessCommand=\u00a7cNo tienes permiso para ejecutar ese comando.
noAccessPermission=\u00a7cNo tienes permisos para eso {0} .
nickSet=\u00a76Tu seud\u00f3nimo ahora es \u00a7c{0}\u00a76.
nickTooLong=\u00a74Ese nick es demasiado largo.
noAccessCommand=\u00a74No tienes permiso para ejecutar ese comando.
noAccessPermission=\u00a74No tienes permiso para interactuar con \u00a7c{0}\u00a74.
noBreakBedrock=No puedes romper piedra base.
noDestroyPermission=\u00a7cNo tienes permisos para romper eso {0}.
noDurability=\u00a7cEste item no tiene durabilidad.
noGodWorldWarning=\u00a7cAdvertencia\! El Modo de dios ha sido desactivado en este mundo.
noHelpFound=\u00a7cNo hay comandos relacionados.
noHomeSetPlayer=El jugador no ha establecido un hogar.
noDestroyPermission=\u00a74No tienes permiso para destruir ese \u00a7c{0}\u00a74.
noDurability=\u00a74Este \u00edtem no tiene durabilidad.
noGodWorldWarning=\u00a74\u00a1Advertencia\! El modo de dios ha sido desactivado en este mundo.
noHelpFound=\u00a74No hay comandos relacionados.
noHomeSetPlayer=\u00a76El jugador no ha establecido hogares.
noIgnored=\u00a76No est\u00e1s ignorando a nadie.
noKitPermission=\u00a7cNecesitas el permiso \u00a74{0}\u00a7c para usar ese kit.
noKits=\u00a77No hay kits disponibles a\u00fan.
noMail=\u00a77No tienes correo nuevo.
noMatchingPlayers=\u00a77No se encontr\u00f3 al jugador buscado.
noMail=\u00a76No tienes correo nuevo.
noMatchingPlayers=\u00a76No se encontr\u00f3 al jugador buscado.
noMetaFirework=\u00a74No tienes permiso para usar los efectos de los fuegos artificiales.
noMetaPerm=\u00a74No tienes permiso para aplicar \u00a7c{0}\u00a74 efectos a este item.
noMetaPerm=\u00a74No tienes permiso para aplicar \u00a7c{0}\u00a74 efectos a este \u00edtem.
noNewMail=\u00a77No tienes correo nuevo.
noPendingRequest=No tienes ninguna petici\u00f3n pendiente.
noPerm=\u00a7cNo tienes el permiso de \u00a7f{0}\u00a7c.
noPermToSpawnMob=\u00a7cNo tienes permisos para spawnear a este mob.
noPlacePermission=\u00a7cNo tienes permiso para colocar este bloque en este lugar.
noPotionEffectPerm=\u00a74No tienes permiso para aplicar efectos \u00a7c {0} \u00a74a esta poci\u00f3n.
noPendingRequest=\u00a74No tienes peticiones pendientes.
noPerm=\u00a74No tienes el permiso \u00a7c{0}\u00a74.
noPermToSpawnMob=\u00a74No tienes permiso para generar esa criatura.
noPlacePermission=\u00a74No tienes permiso para colocar un bloque junto a eso.
noPotionEffectPerm=\u00a74No tienes permiso para aplicar el efecto\u00a7c {0} \u00a74a esta poci\u00f3n.
noPowerTools=\u00a76No tienes ninguna herramienta el\u00e9ctrica asignada.
noWarpsDefined=\u00a77No hay teletransportes definidos a\u00fan.
noWarpsDefined=\u00a76No hay warps disponibles.
none=ninguno
notAllowedToQuestion=\u00a7cNo est\u00e1s autorizado para usar las preguntas.
notAllowedToShout=\u00a7cNo est\u00e1s autorizado para gritar.
notEnoughExperience=No tienes suficiente experiencia.
notEnoughMoney=No tienes el dinero suficiente.
notAllowedToQuestion=\u00a74No est\u00e1s autorizado para hacer una pregunta.
notAllowedToShout=\u00a74No est\u00e1s autorizado para gritar.
notEnoughExperience=\u00a74No tienes la experiencia necesaria.
notEnoughMoney=\u00a74No tienes dinero suficiente.
notFlying=no esta volando
notRecommendedBukkit=* \! * La versi\u00f3n de bukkit no es la recomendada para esta versi\u00f3n de Essentials.
notRecommendedBukkit=\u00a74* \! * La versi\u00f3n de bukkit no es la recomendada para esta versi\u00f3n del plugin Essentials.
notSupportedYet=No soportado por el momento.
nothingInHand=\u00a7cNo tienes nada en tu mano.
now=ahora
nuke=\u00a7aQue la muerta afecte al que no despierte.
nuke=\u00a75Que la muerta afecte al que no despierte.
numberRequired=Es necesario un n\u00famero, amigo.
onlyDayNight=\u00a7c/time \u00a74solo se utiliza con los valores \u00a7cday \u00a74o \u00a7cnight \u00a74(\u00a76d\u00eda\u00a74/\u00a76noche\u00a74).
onlyPlayerSkulls=\u00a74Solo puede establecer el propietario de las cabezas del jugador (397\:3).
onlyPlayers=Solo los jugadores conectados pueden usar {0}.
onlyDayNight=\u00a76/time \u00a74\u00fanicamente funciona con los valores \u00a76Day\u00a74 o \u00a76Night\u00a74 (d\u00eda/noche).
onlyPlayerSkulls=\u00a74Solo puedes indicar el propietario de las calaveras de jugadores (\u00a7c397\:3\u00a74).
onlyPlayers=\u00a74Solo jugadores dentro del juego pueden usar \u00a7c{0}\u00a74.
onlySunStorm=\u00a7c/weather \u00a74solo acepta los valores \u00a7csun \u00a74o \u00a7cstorm \u00a74(\u00a76sol\u00a74/\u00a76tormenta\u00a74).
orderBalances=Creando un ranking de {0} usuarios segun su presupuesto, espera...
oversizedTempban=\u00a74No puedes banear por ese periodo de tiempo.
pTimeCurrent=\u00a7e{0}''s\u00a7f la hora es {1}.
pTimeCurrentFixed=\u00a7c{0}\u00a77 la hora ha sido corregida a\u00a7c {1}\u00a77.
pTimeCurrent=\u00a76La hora de \u00a7c{0} es\u00a7c {1}\u00a76.
pTimeCurrentFixed=\u00a7c{0}\u00a76 la hora ha sido corregida a\u00a7c {1}\u00a76.
pTimeNormal=\u00a7c{0} \u00a77\: el tiempo es normal (coincide con el del servidor).
pTimeOthersPermission=\u00a7cNo est\u00e1s autorizado para especificar la hora de otros usuarios.
pTimeOthersPermission=\u00a74No tienes permitido cambiar la hora de otros jugadores.
pTimePlayers=\u00a77Estos jugadores tienen establecida su propia hora\:\u00a7r
pTimeReset=La hora del usuario ha sido reiniciada a las\: \u00a7e{0}
pTimeSet=La hora del jugador ha sido cambiada a\: \u00a73{0}\u00a7f for\: \u00a7e{1}.
pTimeSetFixed=La hora del jugador ha sido fijada a las\: \u00a73{0}\u00a7f for\: \u00a7e{1}.
pWeatherCurrent=\u00a77El clima de\u00a7c {0}\u00a77 es\u00a7c {1}\u00a77.
pWeatherCurrent=\u00a76El clima de\u00a7c {0}\u00a76 es\u00a7c {1}\u00a76.
pWeatherInvalidAlias=\u00a74Tipo de clima inv\u00e1lido
pWeatherNormal=\u00a77El clima de \u00a7c{0} \u00a77es normal y coincide con el servidor.
pWeatherNormal=\u00a76El clima de \u00a7c{0} \u00a76es normal y coincide con el servidor.
pWeatherOthersPermission=\u00a74No est\u00e1s autorizado para cambiar el clima de otros jugadores.
pWeatherPlayers=\u00a77Jugadores que tienen su propio clima\: \u00a7r
pWeatherReset=\u00a77Clima reseteado para\: \u00a7c{0}
pWeatherSet=\u00a77Clima establecido en \u00a7c{0}\u00a77 para\: \u00a7c{1}\u00a77.
pendingTeleportCancelled=\u00a7cPetici\u00f3n de teletransporte cancelada.
playerBanIpAddress=\u00a76La IP \u00a7c {1} \u00a76ha sido baneada por\u00a7c {0}\u00a76.
playerBanned=\u00a7c{1} \u00a76ha sido baneado por\u00a7c {0}\u00a76 a causa de {2}\u00a76.
playerInJail=\u00a7cEl jugador {0} ya est\u00e1 en la c\u00e1rcel.
pWeatherReset=\u00a76Clima reseteado para\: \u00a7c{0}
pWeatherSet=\u00a76Clima establecido en \u00a7c{0}\u00a76 para\: \u00a7c{1}.
pendingTeleportCancelled=\u00a74Petici\u00f3n de teletransporte cancelada.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a7c{0} \u00a76 ha sido baneado\:\u00a7c {1} \u00a76por \u00a7c{2}\u00a76.
playerInJail=\u00a74El jugador\u00a7c {0}\u00a74 ya est\u00e1 en la c\u00e1rcel.
playerJailed=\u00a77Jugador {0} encarcelado.
playerJailedFor=\u00a77El jugador {0} ha sido encarcelado durante {1}.
playerKicked=\u00a7c\u00a1El jugador {0} ha echado a {1}\u00a7c\! \u00a77Motivo\: &r{2}\u00a77.
playerMuted=\u00a77Has sido silenciado.
playerMutedFor=\u00a77Has sido silenciado durante {0}.
playerNeverOnServer=\u00a74\u00a1El jugador \u00a7c{0} \u00a74nunca ha entrado al servidor\!
playerNotFound=\u00a7cJugador no encontrado.
playerNotFound=\u00a74Jugador no encontrado.
playerUnbanIpAddress=\u00a76La IP {1} ha sido desbaneada por\u00a7c {0}.
playerUnbanned=\u00a7c{1} \u00a76ha sido desbaneado por\u00a7c {0}\u00a76.
playerUnmuted=\u00a77Has sido desmuteado.
pong=PING PONG\!
playerUnmuted=\u00a76Ya no est\u00e1s silenciado.
pong=\u00a1PONG\!
posPitch=\u00a77Giro\: {0} (\u00c1ngulo de cabeza)
posX=\u00a77X\: {0} (+Este <-> -Oeste)
posY=\u00a77Y\: {0} (+Arriba <-> -abajo)
posYaw=\u00a77Yaw\: {0} (Rotaci\u00f3n)
posZ=\u00a77Z\: {0} (+Sur <-> -Norte)
possibleWorlds=\u00a77Los mundos posibles son desde el numero 0 hasta el {0}.
possibleWorlds=\u00a76Posibles mundos son los n\u00fameros desde el \u00a7c0\u00a76 hasta el \u00a7c{0}\u00a76.
potions=\u00a77Pociones\:\u00a7r {0}\u00a76.
powerToolAir=El comando no se puede ejecutar en el aire.
powerToolAlreadySet=El comando \u00a7c{0}\u00a7f ya esta asignado a {1}.
powerToolAlreadySet=\u00a74El comando \u00a7c{0}\u00a74 ya est\u00e1 asignado a \u00a7c{1}\u00a74.
powerToolAttach=\u00a77El comando \u00a7c{0}\u00a77 ha sido asignado a {1}\u00a77.
powerToolClearAll=\u00a77Todos los comandos de la herramienta el\u00e9ctrica han sido eliminados.
powerToolList=\u00a77El objeto \u00a7c{1} \u00a77tiene asignados los comandos\: \u00a7c{0}\u00a77.
powerToolListEmpty={0} no tiene comandos asignados.
powerToolNoSuchCommandAssigned=El comando \u00a7c{0}\u00a7f no ha sido asignado a {1}.
powerToolRemove=Comando \u00a7c{0}\u00a7f borrado desde {1}.
powerToolRemoveAll=Todos los comandos borrados desde {0}.
powerToolList=\u00a76El \u00edtem \u00a7c{1} \u00a76tiene asignados los comandos\: \u00a7c{0}\u00a76.
powerToolListEmpty=\u00a74El \u00edtem\u00a7c {0} \u00a74no tiene comandos asignados.
powerToolNoSuchCommandAssigned=\u00a74El comando \u00a7c{0}\u00a74 no ha sido asignado a \u00a7c{1}\u00a74.
powerToolRemove=\u00a76Comando \u00a7c{0}\u00a76 borrado de \u00a7c{1}\u00a76.
powerToolRemoveAll=\u00a76Todos los comandos borrados de \u00a7c{0}\u00a76.
powerToolsDisabled=\u00a77Todas tus herramientas de poder han sido desactivadas.
powerToolsEnabled=\u00a77Todas tus herramientas de poder han sido activadas.
questionFormat=\u00a76[\u00a7bPregunta\u00a76]\u00a7f {0}
questionFormat=\u00a72[Pregunta]\u00a7r {0}
readNextPage=\u00a77Escribe\u00a7c /{0} {1} \u00a77para leer la p\u00e1gina siguiente.
recipe=\u00a77Crafteo para \u00a7c{0}\u00a76 ({1} de {2})
recipe=\u00a76Receta para \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 de \u00a7c{2}\u00a76)
recipeBadIndex=No hay ning\u00fan crafteo con ese n\u00famero.
recipeFurnace=\u00a77Fundici\u00f3n \u00a7c {0}
recipeGrid=\u00a7{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\ \u00a7{0}X \u00a76is \u00a7c{1}
recipeMore=\u00a77Escribe /{0} \u00a7c{1}\u00a77 <number> para ver otros crafteos de \u00a7c{2}\u00a77.
recipeFurnace=\u00a76Fundir\: \u00a7c{0}\u00a76.
recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a7c{0}X \u00a76es \u00a7c{1}
recipeMore=\u00a76Escribe /{0} \u00a7c{1}\u00a76 <number> para ver otros crafteos de \u00a7c{2}\u00a76.
recipeNone=No existen crafteos para {0}
recipeNothing=nada
recipeShapeless=\u00a77Combinar \u00a7c{0}
recipeWhere=\u00a77Donde\: {0}
removed=\u00a77{0} entidades removidas.
repair=Has reparado satisfactoriamente tu\: \u00a7e{0}.
repairAlreadyFixed=\u00a77Este objeto no necesita ser reparado.
repairEnchanted=\u00a77No tienes permisos para reparar items encantados.
repairInvalidType=\u00a7cError\: \u00a74tipo de item invalido.
repairNone=\u00a74No hay objetos que necesiten reparaci\u00f3n.
requestAccepted=\u00a77Peticion de teletransporte aceptada.
requestAcceptedFrom=\u00a77{0} ha aceptado tu peticion de teletransporte.
requestDenied=\u00a77Peticion de teletransporte denegada.
requestDeniedFrom=\u00a77{0} ha denegado tu peticion de teletransporte.
requestSent=\u00a77Peticion enviada a {0}\u00a77.
requestTimedOut=\u00a7cA la solicitud de teletransporte se le ha acabado el tiempo.
removed=\u00a76Eliminadas\u00a7c {0} \u00a76entidades.
repair=\u00a76Has reparado exit\u00f3samente tu\: \u00a7c{0}\u00a76.
repairAlreadyFixed=\u00a74Este \u00edtem no necesita reparaci\u00f3n.
repairEnchanted=\u00a74No tienes permiso para reparar un \u00edtem encantado.
repairInvalidType=\u00a74Ese \u00edtem no puede ser reparado.
repairNone=\u00a74No hay \u00edtems que necesiten ser reparados.
requestAccepted=\u00a76Petici\u00f3n de teletransporte aceptada.
requestAcceptedFrom=\u00a7c{0} \u00a76ha aceptado tu teletransportaci\u00f3n.
requestDenied=\u00a76Petici\u00f3n de teletransporte denegada.
requestDeniedFrom=\u00a7c{0} \u00a76ha denegado tu teletransportaci\u00f3n.
requestSent=\u00a76La petici\u00f3n ha sido enviada a\u00a7c {0}\u00a76.
requestTimedOut=\u00a74El tiempo de la solicitud de teletransporte se ha agotado.
requiredBukkit=\u00a75* \! * \u00a7cNecesitas al menos el build {0} de CraftBukkit, descargalo desde \u00a7bhttp\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a77Econom\u00eda establecida a \u00a7a{0} \u00a76para \u00a7cTODOS \u00a77los jugadores que est\u00e1n conectados.
resetBalAll=\u00a76Econom\u00eda establecida a \u00a7a{0} \u00a76para TODOS los jugadores.
returnPlayerToJailError=\u00a7cError al intentar regresar al jugador {0} a la carcel\: {1}
resetBal=\u00a76Dinero reestablecido a \u00a7c{0} \u00a76a todos los jugadores conectados.
resetBalAll=\u00a76Dinero reestablecido a \u00a7c{0} \u00a76a todos los jugadores.
returnPlayerToJailError=\u00a74\u00a1Ha ocurrido un error al intentar enviar al jugador\u00a7c {0} \u00a74a la c\u00e1rcel\: \u00a7c{1}\u00a74\!
runningPlayerMatch=\u00a77Ejecutando busqueda de jugadores ''\u00a7c{0}\u00a77'' (puede tardar)
second=segundo
seconds=segundos
seenOffline=El jugador {0} esta desconectado desde {1}
seenOnline=El jugador {0} esta conectado desde {1}
serverFull=\u00a7cLo sentimos, el servidor esta \u00a74LLENO\u00a7c. Prueba mas tarde
serverTotal=\u00a77Total\:\u00a7c {0}
setBal=\u00a7aSu econom\u00eda personal ha sido establecida a {0}.
seenOffline=\u00a76El jugador\u00a7c {0} \u00a76ha estado \u00a74desconectado\u00a76 desde \u00a7c{1}\u00a76.
seenOnline=\u00a76El jugador\u00a7c {0} \u00a76ha estado \u00a7aconectado\u00a76 desde \u00a7c{1}\u00a76.
serverFull=\u00a1El servidor est\u00e1 lleno\!
serverTotal=\u00a76Total\:\u00a7c {0}
setBal=\u00a7aEconom\u00eda personal establecida en {0}.
setBalOthers=\u00a7aLa economia de {0}\u00a7a ha sido establecida a {1}.
setSpawner=Cambiado tipo de spawner a {0}
sheepMalformedColor=Color malformado.
shoutFormat=\u00a7a[\u00a7eMundo\u00a7a]\u00a7f {0}
setSpawner=\u00a7Cambiado tipo de generador a\u00a7c {0}\u00a76.
sheepMalformedColor=\u00a74Color malformado.
shoutFormat=\u00a76[Mundo]\u00a7r {0}
signFormatFail=\u00a74[{0}]
signFormatSuccess=\u00a71[{0}]
signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74No puedes poner carteles en este sitio.
similarWarpExist=Ya existe un teletransporte con ese nombre.
slimeMalformedSize=Medidas malformadas.
socialSpy=\u00a77Esp\u00eda del chat de {0} \u00a77ha sido {1}
soloMob=\u00a7cParece que este mob prefiere estar marginado...
spawnSet=\u00a77El lugar de muerte, aparicion o el sitio del comando /spawn ha sido colocado para el grupo {0}.
similarWarpExist=\u00a74Ya existe un warp con ese nombre.
slimeMalformedSize=\u00a74Medidas malformadas.
socialSpy=\u00a76Esp\u00eda de chat para \u00a7c{0}\u00a76\: \u00a7c{1}
soloMob=\u00a74A este mob le gusta estar solo.
spawnSet=\u00a76El lugar de aparici\u00f3n o el sitio del comando /spawn ha sido colocado para el grupo\u00a7c {0}\u00a76.
spawned=nacido
sudoExempt=\u00a7cNo puedes obligar a este usuario\! Motivo\: es op o tiene rango superior.
sudoRun=Forzando {0} a ejecutar\: /{1} {2}
suicideMessage=\u00a77Adios mundo cruel...
suicideSuccess=\u00a77{0} \u00a7fse ha quitado la vida porque le han suspendido en mates...
sudoExempt=\u00a74No puedes usar el comando sudo con este jugador.
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a76Adi\u00f3s mundo cruel...
suicideSuccess=\u00a76{0} \u00a7cse ha suicidado...
survival=supervivencia
takenFromAccount=\u00a7a{0} han sido sacados de tu cuenta econ\u00f3mica.
takenFromOthersAccount=\u00a7c{0} han sidos sacados de la cuenta economica de {1}\u00a7c . Nuevo presupuesto\: {2}
takenFromOthersAccount=\u00a7a{0} han sido sacados de la cuenta de {1}\u00a7a. \u00a72Nuevo balance\: {2}.
teleportAAll=\u00a77Peticion de teletransporte enviada a todos los jugadores...
teleportAll=\u00a77Teletransportando a todos los jugadores...
teleportAtoB=\u00a77{0}\u00a77 te ha teletransportado hasta {1}\u00a77.
teleportDisabled=\u00a7a{0} \u00a7etiene desactivado los teletransportes\!
teleportHereRequest=\u00a7c{0}\u00a77te ha pedido que te teletransportes con \u00e9l.
teleportNewPlayerError=\u00a7cError al teletransportar al nuevo jugador\!
teleportRequest=\u00a7c{0}\u00a77 te ha pedido teletransportarse contigo.
teleportRequestTimeoutInfo=\u00a7cA esta solicitud se le acabara el tiempo despues de {0} \u00a7csegundos.
teleportTop=\u00a77Teletransportandote a la cima.
teleportationCommencing=\u00a77Comenzando teletransporte...
teleportationDisabled=\u00a77Teletransporte desactivado.
teleportationDisabledFor=\u00a76Teletransporte desactivado para {0}.
teleportationEnabled=\u00a77Teletransporte activado.
teleportationEnabledFor=\u00a77Teleportation enabled for {0}
teleporting=\u00a77Teletransportando...
tempBanned=Baneado temporalmente del servidor durante {0}\!
tempbanExempt=\u00a77No puedes banear temporalmente a ese jugador.
thunder=Tu has {0} los truenos en tu mundo.
thunderDuration=Tu has {0} los truenos en tu mundo durante {1} seconds.
teleportAtoB=\u00a7c{0}\u00a76 te ha teletransportado a \u00a7c{1}\u00a76.
teleportDisabled=\u00a7c{0} \u00a74tiene la teletransportaci\u00f3n desactivada.
teleportHereRequest=\u00a7c{0}\u00a76te ha pedido que te teletransportes hasta \u00e9l.
teleportNewPlayerError=\u00a74\u00a1Ha ocurrido un error al teletransportar al nuevo jugador\!
teleportRequest=\u00a7c{0}\u00a76 te ha pedido teletransportarse hasta ti.
teleportRequestTimeoutInfo=\u00a76La solicitud ser\u00e1 autom\u00e1ticamente cancelada despu\u00e9s de\u00a7c {0} segundos\u00a76.
teleportTop=\u00a76Teletransportandote hasta la cima.
teleportationCommencing=\u00a76Teletransportando...
teleportationDisabled=\u00a76Teletransporte \u00a7cdeshabilitado\u00a76.
teleportationDisabledFor=\u00a76Teletransporte \u00a7cdeshabilitado \u00a76para \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teletransporte \u00a7chabilitado\u00a76.
teleportationEnabledFor=\u00a76Teletransporte \u00a7chabilitado \u00a76para \u00a7c{0}\u00a76.
teleporting=\u00a76Teletransportando...
teleportToPlayer=\u00a76Teletransport\u00e1ndose a \u00a7c{0}\u00a76.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a74Ese jugador no puede recibir un baneo temporal tuyo.
thunder=\u00a76Has cambiado los truenos a\u00a7c {0} \u00a76en tu mundo.
thunderDuration=\u00a76Has\u00a7c {0} \u00a76una tormenta en tu mundo durante\u00a7c {1} \u00a76segundos.
timeBeforeHeal=Tiempo antes de la siguiente curacion\: {0}
timeBeforeTeleport=Tiempo antes del proximo teletransporte\: {0}
timeFormat=\u00a73{0}\u00a7f o \u00a73{1}\u00a7f o \u00a73{2}\u00a7f
timeSetPermission=\u00a7cNo estas autorizado para establecer la hora.
timeWorldCurrent=La hora actual en {0} es \u00a73{1}
timeWorldSet=La hora ha sido establecida a {0} en\: \u00a7c{1}
timeBeforeTeleport=\u00a74Tiempo antes del pr\u00f3ximo teletransporte\:\u00a7c {0}\u00a74.
timeFormat=\u00a7c{0}\u00a76 o \u00a7c{1}\u00a76 o \u00a7c{2}\u00a76
timeSetPermission=\u00a74No tienes permitido cambiar la hora.
timeWorldCurrent=\u00a76La hora actual en\u00a7c {0} \u00a76es \u00a7c{1}\u00a76.
timeWorldSet=\u00a76La hora ha sido establecida a\u00a7c {0} \u00a76en el mundo\: \u00a7c{1}\u00a76.
totalWorthAll=\u00a7aVendidos todos los objetos por un valor total de \u00a7c {1}\u00a7a.
totalWorthBlocks=\u00a7aVendidos todos los bloques por un total de \u00a7c{1}\u00a7a.
tps=TPS actual \= {0}
tps=\u00a76Ticks por segundo \= {0}
tradeSignEmpty=Esta tienda no tiene nada disponible para ti.
tradeSignEmptyOwner=No hay nada que recojer de esta tienda.
treeFailure=\u00a7cError al generar el \u00e1rbol. Prueba de nuevo en tierra, tierra h\u00fameda o hierba.
treeSpawned=\u00a77\u00c1rbol generado.
true=activado
typeTpaccept=\u00a77Escribe \u00a7c/tpaccept \u00a76para aceptar el teletransporte.
typeTpdeny=\u00a77Para denegar esta peticion, escribe \u00a7c/tpdeny\u00a77.
typeWorldName=\u00a77Tu tambien puedes escribir el nombre de un mundo especifico.
unableToSpawnMob=No se puede generar Mobs.
unignorePlayer=Ya no estas ignorando al jugador {0}.
unknownItemId=ID de objeto desconocido\: {0}
unknownItemInList=Objeto desconocido {0} en {1} lista.
unknownItemName=Nombre de objeto desconocido\: {0}
unlimitedItemPermission=\u00a7cNo tienes permiso para objetos ilimitados {0}.
unlimitedItems=Objetos ilimitados.
unmutedPlayer=\u00a77Jugador {0} desmuteado.
unvanishedReload=\u00a7cUn reinicio te ha forzado a ser visible.
true=\u00a7as\u00ed\u00a7f
typeTpaccept=\u00a76Escribe \u00a7c/tpaccept \u00a76para aceptar el teletransporte.
typeTpdeny=\u00a76Para denegar la teletransportaci\u00f3n, escribe \u00a7c/tpdeny\u00a76.
typeWorldName=\u00a76T\u00fa tambi\u00e9n puedes escribir el nombre de un mundo espec\u00edfico.
unableToSpawnMob=\u00a74No puedes generar criaturas.
unignorePlayer=\u00a76Ya no ignoras al jugador\u00a7c {0}\u00a76.
unknownItemId=\u00a74ID de \u00edtem desconocida\:\u00a7r {0}\u00a74.
unknownItemInList=\u00a74\u00cdtem desconocido {0} en {1} lista.
unknownItemName=\u00a74Nombre de \u00edtem desconocido\: {0}.
unlimitedItemPermission=\u00a74Sin permiso para art\u00edculo ilimitado \u00a7c{0}\u00a74.
unlimitedItems=\u00a76\u00cdtems ilimitados\:\u00a7r
unmutedPlayer=\u00a76El jugador\u00a7c {0} \u00a76ya no est\u00e1 silenciado.
unvanishedReload=\u00a74Un reinicio o una recarga del servidor te ha forzado a perder la invisibilidad.
upgradingFilesError=Error mientras se actualizaban los archivos
uptime=\u00a76Tiempo encendido\:\u00a7c {0}
userAFK=\u00a75{0} \u00a75se encuentra ausente y es probable que no responda.
userAFK=\u00a77{0} \u00a75se encuentra ausente y es probable que no responda.
userDoesNotExist=El usuario {0} no existe
userIsAway={0} \u00a7festa ahora ausente\!
userIsNotAway={0} \u00a7fya no esta ausente\!
userJailed=\u00a77Has sido encarcelado\!
userIsAway=\u00a77{0} \u00a77\u00a1est\u00e1 ausente\!
userIsNotAway=\u00a77{0} \u00a77\u00a1ya no est\u00e1 ausente\!
userJailed=\u00a76\u00a1Has sido encarcelado\!
userUnknown=\u00a74Aviso\: \u00a7cel jugador \u00a74{0} \u00a7cnunca ha visitado el servidor\!
userdataMoveBackError=Error al mover userdata/{0}.tmp a userdata/{1}
userdataMoveError=Error al mover userdata/{0} a userdata/{1}.tmp
usingTempFolderForTesting=Usando carpeta temporal para pruebas\:
vanished=\u00a7aHas desaparecido.
vanished=\u00a76Ahora eres invisible para los usuarios normales, ellos no podr\u00e1n detectarte ni con comandos.
versionMismatch=La version no coincide\! Por favor actualiza {0} a la misma version.
versionMismatchAll=La version no coincide\! Por favor actualiza todos los jars de Essentials a la misma version.
voiceSilenced=\u00a77Tu voz ha sido silenciada
@@ -474,13 +475,13 @@ walking=caminando
warpDeleteError=Problema al borrar el archivo de teletransporte.
warpList={0}
warpListPermission=\u00a7cNo tienes permiso para listar esos teletransportes.
warpNotExist=Ese teletransporte no existe.
warpOverwrite=\u00a7cNo puedes sobreescribir ese atajo.
warpSet=\u00a77Atajo {0} establecido.
warpUsePermission=\u00a7cNo tienes permisos para usar ese teletransporte.
warpingTo=\u00a77Teletransportandote a {0}...
warpNotExist=\u00a74Ese Warp no existe.
warpOverwrite=\u00a74No puedes sobrescribir ese Warp.
warpSet=\u00a76El Warp\u00a7c {0} \u00a76ha sido establecido.
warpUsePermission=\u00a74No tienes permisos para usar ese Warp.
warpingTo=\u00a76Teletransportadote a\u00a7c {0}\u00a76...
warps=\u00a76Warps\:\u00a7r {0}
warpsCount=\u00a77Hay {0} teletransportes. Mostrando pagina {1} de {2}.
warpsCount=\u00a76Hay\u00a7c {0} \u00a76puntos de teletransporte. Mostrando p\u00e1gina \u00a7c{1} \u00a76de \u00a7c{2}\u00a76.
weatherStorm=\u00a77Has establecido el tiempo como tormenta en este mundo.
weatherStormFor=\u00a77Has establecido el tiempo como tormenta en este {1} durante {0} segundos.
weatherSun=\u00a77Has establecido el tiempo como sol en este mundo.
@@ -488,19 +489,19 @@ weatherSunFor=\u00a77Has establecido el tiempo como sol en este {1} durante {0}
whoisAFK=\u00a77 - Ausente\:\u00a7r {0}
whoisBanned=\u00a77 - Baneado\:\u00a7f {0}
whoisExp=\u00a77 - Exp\:\u00a7f {0} (Nivel {1})
whoisFly=\u00a77 - Modo de vuelo\:\u00a7f {0} ({1})
whoisFly=\u00a77 - Modo volar\:\u00a7f {0} ({1})
whoisGamemode=\u00a77 - Modo de juego\:\u00a7f {0}
whoisGeoLocation=\u00a77 - Localizacion\:\u00a7f {0}
whoisGeoLocation=\u00a77 - Ubicaci\u00f3n\:\u00a7f {0}
whoisGod=\u00a77 - Modo de dios\:\u00a7f {0}
whoisHealth=\u00a77 - Salud\:\u00a7f {0}/20
whoisIPAddress=\u00a77 - Direccion IP\:\u00a7f {0}
whoisIPAddress=\u00a77 - Direcci\u00f3n IP\:\u00a7f {0}
whoisJail=\u00a77 - C\u00e1rcel\:\u00a7r {0}
whoisLocation=\u00a76 - Localizacion\:\u00a7f ({0}, {1}, {2}, {3})
whoisLocation=\u00a77 - Ubicaci\u00f3n\:\u00a7f ({0}, {1}, {2}, {3})
whoisMoney=\u00a77 - Dinero\:\u00a7f {0}
whoisMuted=\u00a77 - Silenciado\:\u00a7r {0}
whoisNick=\u00a77 - Nick\:\u00a7r {0}
whoisMuted=\u00a77 - Silenciado\:\u00a7f {0}
whoisNick=\u00a77 - Nick\:\u00a7f {0}
whoisOp=\u00a77 - OP\:\u00a7f {0}
whoisTop=\u00a7a \=\=\= \u00a72QuienEs\:\u00a7e {0} \u00a7a \=\=\=
whoisTop=\u00a76 \=\=\= Acerca de\:\u00a7c {0} \u00a76 \=\=\=
worth=\u00a77Pila de {0} con valor de \u00a7c{1}\u00a77 ({2} objeto(s) a {3} cada uno)
worthMeta=\u00a77Pila de {0} con metadata de {1} , con valor de \u00a7c{2}\u00a77 ({3} objeto(s) a {4} cada uno)
worthSet=Establecer el valor de un valor
@@ -513,7 +514,7 @@ kitDelay=\u00a7m{0}\u00a7r
giveSpawnFailure=\u00a74Espacio insuficiente, \u00a7c{0} \u00a7c{1} \u00a74se ha perdido.
noKitGroup=\u00a74No tienes acceso a este kit.
inventoryClearingFromAll=\u00a77Limpiando el inventario de todos los usuarios...
inventoryClearingAllItems=\u00a7aLimpiando todos los objetos del inventario a\u00a77 {0}\u00a7a.
inventoryClearingAllItems=\u00a76Limpiado todos los objetos del inventario a\u00a76 {0}.
inventoryClearingAllArmor=\u00a7eLimpiado objetos y armaduras de\u00a7a {0}\u00a7e.
inventoryClearingAllStack=\u00a76Inventario limpiado completamente a \u00a7c {0} \u00a76de {1}\u00a76.
inventoryClearingStack=\u00a76Eliminado\u00a7c {0} \u00a76de\u00a7c {1} \u00a76de {2}\u00a76.
@@ -524,7 +525,7 @@ totalSellableBlocks=\u00a7aEl valor total de la venta de todos tus bloques es \u
radiusTooBig=\u00a74\u00a1Radio demasiado grande\! Lo m\u00e1ximo es {0}.
isIpBanned=\u00a76IP \u00a7c{0} \u00a76est\u00e1 baneada.
mobDataList=\u00a77Datos de mobs v\u00e1lidos\:\u00a7r {0}
vanish=\u00a76Ocultaci\u00f3n m\u00e1gica para {0}\u00a76\: {1}
vanish=\u00a76Invisibilidad m\u00e1gica para {0}\u00a76\:\u00a7c {1}
noLocationFound=\u00a74Localizaci\u00f3n inv\u00e1lida.
coordsKeyword={0}, {1}, {2}
banExemptOffline=\u00a74No puedes banear a jugadores que no est\u00e1n conectados.
@@ -532,18 +533,26 @@ tempbanExemptOffline=\u00a74No puedes banear temporalmente a jugadores que no es
mayNotJailOffline=\u00a74No puedes encarcelar a jugadores que no est\u00e1n conectados.
muteExemptOffline=\u00a74No puedes silenciar a jugadores que no est\u00e1n conectados.
ignoreExempt=\u00a74No puedes ignorar a este jugador.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the Skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that Skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player Skull.
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
unsafeTeleportDestination=\u00a74El destino es inseguro y el teletransporte seguro est\u00e1 desactivado.
noMetaJson=El formato JSON Metadata no esta soportado para esta versi\u00f3n de bukkit.
maxMoney=\u00a74Esta transacci\u00f3n supera el l\u00edmite del dinero para esta cuenta.
skullChanged=\u00a76Calavera cambiada a \u00a7c{0}\u00a76.
alphaNames=\u00a74Los nombres de jugadores s\u00f3lo pueden contener letras, n\u00fameros y gui\u00f3n bajo.
givenSkull=\u00a76Se te ha dado el cr\u00e1neo de \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74No tienes permiso de modificar ese cr\u00e1neo.
teleportInvalidLocation=El valor de las coordenadas no puede ser mayor a 30000000
invalidSkull=\u00a74Por favor sost\u00e9n un cr\u00e1neo de un jugador.
weatherInvalidWorld=\u00a1No se ha podido encontrar el mundo llamado "{0}"\!
gameModeInvalid=\u00a74Necesitas especificar un jugador/modo v\u00e1lido.
mailTooLong=\u00a74Mensaje muy largo. Intenta mantenerte debajo de 1000 caracteres.
mailDelay=Demasiados correos han sido enviados en el \u00faltimo minuto. M\u00e1ximo\: {0}
seenAccounts=\u00a76El jugador ha sido tambi\u00e9n conocido como\:\u00a7c {0}
unableToSpawnItem=\u00a74No se puede generar \u00a7c{0}\u00a74, no es un objeto generable.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

View File

@@ -7,9 +7,9 @@ action=\u00a75* {0} \u00a75{1}
addedToAccount=\u00a7a{0} on lisatud teie kontole.
addedToOthersAccount=\u00a7a{0} lisatud {1}\u00a7a kontole. Uus summa\: {2}
adventure=seiklus
alertBroke=purustas\:
alertBroke=l\u00f5hkus\:
alertFormat=\u00a73[{0}] \u00a7r {1} \u00a76 {2} asukohas\: {3}
alertPlaced=pani maha\:
alertPlaced=asetas\:
alertUsed=kasutas\:
antiBuildBreak=\u00a74Teil ei ole siin luba lammutada\u00a7c {0} \u00a74plokke.
antiBuildCraft=\u00a74Teil ei ole luba valmistada\u00a7c {0}\u00a74.
@@ -18,111 +18,111 @@ antiBuildInteract=\u00a74Teil ei ole luba suhelda\u00a7c {0}\u00a74''iga.
antiBuildPlace=\u00a74Teil ei ole luba siia asetada\u00a7c {0} \u00a74.
antiBuildUse=\u00a74Teil ei ole luba kasutada\u00a7c {0}\u00a74.
autoAfkKickReason=Teid kickiti, sest olite eemal rohkem kui {0} minutit.
backAfterDeath=\u00a76Kasutage /back k\u00e4sku, et oma surmapaigale naasta.
backAfterDeath=\u00a76Kasuta k\u00e4sku /back, et oma surmapaigale naasta.
backUsageMsg=\u00a76Tagasi viimine eelmisesse asukohta.
backupDisabled=\u00a74V\u00e4line backup skript ei ole konfigureeritud.
backupFinished=\u00a76Backup valmis.
backupStarted=\u00a76Backup alustatud.
backupFinished=\u00a76Varukoopia on valmis.
backupStarted=\u00a76Varukoopia tegemine alustatud.
balance=\u00a7aRaha\:\u00a7c {0}
balanceOther=\u00a7aM\u00e4ngija {0}\u00a7a raha\:\u00a7c {1}
balanceOther=\u00a7aM\u00e4ngijal {0}\u00a7a on raha\:\u00a7c {1}
balanceTop=\u00a76Top rikkaimad({0})
banExempt=\u00a74Te ei saa bannida seda m\u00e4ngijat.
banFormat=\u00a74Bannitud\:\n\u00a7r{0}
banExempt=\u00a74Sa ei saa blokeerida seda m\u00e4ngijat.
banFormat=\u00a74Blokeeritud\:\n\u00a7r{0}
bed=\u00a7ovoodi\u00a7r
bedMissing=\u00a74Teie voodi on kas m\u00e4\u00e4ramata, kadunud v\u00f5i blokeeritud.
bedMissing=\u00a74Sinu voodi on kas m\u00e4\u00e4ramata, kadunud v\u00f5i takistatud.
bedNull=\u00a7mvoodi\u00a7r
bedSet=\u00a76Voodi spawn m\u00e4\u00e4ratud\!
bedSet=\u00a76Voodikoht m\u00e4\u00e4ratud\!
bigTreeFailure=\u00a74Suure puu generatsiooni viga. Proovige uuesti muru v\u00f5i mulla peal.
bigTreeSuccess=\u00a76Suur puu spawnitud.
bigTreeSuccess=\u00a76Suur puu on tekitatud.
blockList=\u00a76Essentials lootis j\u00e4rgnevad k\u00e4sud teisele pluginale\:
bookAuthorSet=\u00a76Raamatu autor m\u00e4\u00e4ratud kasutajale {0}.
bookAuthorSet=\u00a76Raamatu autoriks on m\u00e4\u00e4ratud {0}.
bookLocked=\u00a76See raamat on n\u00fc\u00fcd lukus.
bookTitleSet=\u00a76Raamatu pealkiri m\u00e4\u00e4ratud j\u00e4rgnevaks\: {0}.
bookTitleSet=\u00a76Raamatu pealkirjaks on m\u00e4\u00e4ratud "{0}".
broadcast=\u00a7r\u00a76[\u00a74Teade\u00a76]\u00a7a {0}
buildAlert=\u00a74Teil ei ole luba ehitada.
bukkitFormatChanged=Bukkit versiooni formaat muudetud. Versioon ei ole kontrollitud.
burnMsg=\u00a76S\u00fc\u00fctasite m\u00e4ngija\u00a7c {0} \u00a76p\u00f5lema\u00a7c {1} sekundiks\u00a76.
canTalkAgain=\u00a76Te saate j\u00e4lle r\u00e4\u00e4kida.
cannotStackMob=\u00a74Teil ei ole luba stackida mitmeid loomi.
burnMsg=\u00a76S\u00fc\u00fctasid m\u00e4ngija\u00a7c {0} \u00a76p\u00f5lema\u00a7c {1} sekundiks\u00a76.
canTalkAgain=\u00a76Sa saad j\u00e4lle r\u00e4\u00e4kida.
cannotStackMob=\u00a74Sul ei ole luba kihistada mitmeid elukaid.
cantFindGeoIpDB=Ei leia GeoIP andmebaasi\!
cantReadGeoIpDB=Tekkis viga lugedes GeoIP andmebaasi\!
cantSpawnItem=\u00a74Teil ei ole luba spawnida eset\u00a7c {0}\u00a74.
cantSpawnItem=\u00a74Sul ei ole luba tekitada eset\u00a7c {0}\u00a74.
chatTypeAdmin=[A]
chatTypeLocal=[L]
chatTypeSpy=[Spioon]
cleaned=Kasutajafailid Puhastatud.
cleaned=Kasutajafailid puhastatud.
cleaning=Kasutajafailide puhastus.
commandFailed=K\u00e4sk {0} eba\u00f5nnestus\:
commandHelpFailedForPlugin=Viga saades abi pluginale\: {0}
commandNotLoaded=\u00a74K\u00e4sk {0} on ebakoheselt laetud.
compassBearing=\u00a76Laager\: {0} ({1} kraadi).
compassBearing=\u00a76Suund\: {0} ({1} kraadi).
configFileMoveError=Viga liigutades config.yml backup asukohta.
configFileRenameError=Viga temp faili \u00fcmber nimetamisega config.yml-ks.
connectedPlayers=\u00a76\u00dchendatud m\u00e4ngijad\u00a7r
connectionFailed=\u00dchenduse avamine eba\u00f5nnestus.
cooldownWithMessage=\u00a74Maha jahtumine\: {0}
corruptNodeInConfig=\u00a74Teade\: Teie konfiguratsioon failis on vigane {0} node.
corruptNodeInConfig=\u00a74Teade\: Sinu konfiguratsioonifailis on vigane {0} node.
couldNotFindTemplate=\u00a74Ei leidnud \u0161ablooni {0}
creatingConfigFromTemplate=Koniguratsiooni loomine \u0161abloonist\: {0}
creatingConfigFromTemplate=Seadete loomine \u0161abloonist\: {0}
creatingEmptyConfig=Loon t\u00fchja konfiguratsiooni\: {0}
creative=loominguline
currency={0}{1}
currentWorld=\u00a76Praegune Maailm\:\u00a7c {0}
currentWorld=\u00a76Praegune maailm\:\u00a7c {0}
day=p\u00e4ev
days=p\u00e4eva
defaultBanReason=Ban Hammer on r\u00e4\u00e4kinud\!
defaultBanReason=Blokeerimishaamer on r\u00e4\u00e4kinud\!
deleteFileError=Faili {0} ei saanud kustutada
deleteHome=\u00a76Kodu\u00a7c {0} \u00a76on eemaldatud.
deleteJail=\u00a76Vangla\u00a7c {0} \u00a76on eemaldatud.
deleteWarp=\u00a76L\u00f5im\u00a7c {0} \u00a76on eemaldatud.
deniedAccessCommand=\u00a7c{0} \u00a74keelati ligip\u00e4\u00e4s k\u00e4sule.
denyBookEdit=\u00a74Te ei saa avada seda raamatut.
denyChangeAuthor=\u00a74Te ei saa muuta k\u00e4esoleva raamatu autorit.
denyChangeTitle=\u00a74Te ei saa muuta k\u00e4esoleva raamatu pealkirja.
depth=\u00a76Te olete merepinnal.
depthAboveSea=\u00a76Te olete\u00a7c {0} \u00a76plokk(i) \u00fcle merepinna.
depthBelowSea=\u00a76Te olete\u00a7c {0} \u00a76plokk(i) allpool merepinda.
deniedAccessCommand=\u00a74M\u00e4ngijal \u00a7c{0} \u00a74keelati ligip\u00e4\u00e4s k\u00e4sule.
denyBookEdit=\u00a74Sa ei saa avada seda raamatut.
denyChangeAuthor=\u00a74Sa ei saa muuta selle raamatu autorit.
denyChangeTitle=\u00a74Sa ei saa muuta selle raamatu pealkirja.
depth=\u00a76Sa oled merepinnal.
depthAboveSea=\u00a76Sa oled\u00a7c {0} \u00a76plokk(i) merepinnast k\u00f5rgemal.
depthBelowSea=\u00a76Sa oled\u00a7c {0} \u00a76plokk(i) merepinnast madalamal.
destinationNotSet=Sihtpaik ei ole m\u00e4\u00e4ratud\!
disableUnlimited=\u00a76Peatatud l\u00f5pmatu plokki asetamine \u00a7c {0} \u00a76m\u00e4ngijale {1}.
disabled=peatatud
disabledToSpawnMob=\u00a74Selle mob-i spawnimine on peatatud konfiguratsioonis.
disabled=keelatud
disabledToSpawnMob=\u00a74Selle eluka tekitamine on konfiguratsioonis keelatud.
distance=\u00a76Kaugus\: {0}
dontMoveMessage=\u00a76Teleportatsioon algab\u00a7c {0}\u00a76 sekundi p\u00e4rast. \u00c4ra liigu.
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)
duplicatedUserdata=Topelt kasutaja andmed\: {0} ja {1}.
durability=\u00a76Sellel esemel on \u00a7c{0}\u00a76 kasutust j\u00e4rel
editBookContents=\u00a7eTe v\u00f5ite n\u00fc\u00fcd muuta k\u00e4esoleva raamatu sisu.
enableUnlimited=\u00a76Annan piiramatus koguses \u00a7c {0} \u00a76m\u00e4ngijale {1}.
editBookContents=\u00a7eSa v\u00f5id n\u00fc\u00fcd muuta selle raamatu sisu.
enableUnlimited=\u00a76Annan piiramatus koguses\u00a7c {0} \u00a76m\u00e4ngijale \u00a7c{1}\u00a76.
enabled=lubatud
enchantmentApplied=\u00a76Loits\u00a7c {0} \u00a76on lisatud k\u00e4esolevale esemele.
enchantmentNotFound=\u00a74Loitsu ei leitud\!
enchantmentPerm=\u00a74Teil ei ole luba j\u00e4rgnevaks\:\u00a7c {0}\u00a74.
enchantmentPerm=\u00a74Sul ei ole luba j\u00e4rgnevaks\:\u00a7c {0}\u00a74.
enchantmentRemoved=\u00a76Loits\u00a7c {0} \u00a76on eemaldatud k\u00e4esolevalt esemelt.
enchantments=\u00a76Loitsud\:\u00a7r {0}
errorCallingCommand=Viga kutsudes k\u00e4sku /{0}
errorWithMessage=\u00a7cViga\:\u00a74 {0}
essentialsHelp1=Fail on katki/vigane ja Essentials ei saa seda avada. Essentials on n\u00fc\u00fcd suletud. Kui te ei suuda faili ise korda teha, siis k\u00fclastage http\://tiny.cc/EssentialsChat
essentialsHelp2=Fail on katki/vigane ja Essentials ei saa seda avada. Essentials on n\u00fc\u00fcd suletud. Kui te ei suuda faili ise korda teha, siis kas kirjutage /essentialshelp m\u00e4ngus v\u00f5i k\u00fclastage http\://tiny.cc/EssentialsChat
essentialsReload=\u00a76Essentials Uuesti Laetud\u00a7c {0}
essentialsReload=\u00a76Essentials taaslaetud\u00a7c {0}.
exp=\u00a7c{0}\u00a76''il on\u00a7c {1} \u00a76exp (level\u00a7c {2}\u00a76) ja vajab veel\u00a7c {3} \u00a76exp j\u00e4rgmiseks leveliks.
expSet=\u00a7c{0}\u00a76''il on n\u00fc\u00fcd\u00a7c {1} \u00a76exp.
extinguish=\u00a76Te kustutasite end.
extinguishOthers=\u00a76Kustutasite m\u00e4ngija {0}\u00a76.
failedToCloseConfig=Esines viga konfiguratsiooni {0} sulgemisega.
failedToCreateConfig=Viga konfiguratsiooni {0} tegemisega.
failedToCreateConfig=Esines viga konfiguratsiooni {0} loomisel.
failedToWriteConfig=Esines viga kirjutamisega konfiguratsiooni {0}.
false=\u00a74false\u00a7r
feed=\u00a76Teie isu on kadunud.
feedOther=\u00a76Rahuldasite m\u00e4ngija {0}\u00a76 isu.
fileRenameError=Faili {0} \u00fcmber nimetamine eba\u00f5nnestus\!
fireworkColor=\u00a74Vigane ilutulestiku parameetrid sisestatud, peate esmalt v\u00e4rvi paika panema.
fireworkEffectsCleared=\u00a76K\u00f5ik effektid eemaldatud k\u00e4esoleval kogusel.
fireworkSyntax=\u00a76Ilutulestiku parameetrid\:\u00a7c color\:<color> [fade\:<color>] [shape\:<shape>] [effect\:<effect>]\n\u00a76To use multiple colors/effects, seperate values with commas\: \u00a7cred,blue,pink\n\u00a76Shapes\:\u00a7c star, ball, large, creeper, burst \u00a76Effects\:\u00a7c trail, twinkle.
flyMode=\u00a76M\u00e4\u00e4rasid lendamise\u00a7c {0} \u00a76m\u00e4ngijale {1}\u00a76.
feedOther=\u00a76Rahuldasid \u00a7c{0}\u00a76 isu.
fileRenameError=Faili {0} \u00fcmbernimetamine eba\u00f5nnestus\!
fireworkColor=\u00a74Vigsed ilutulestiku parameetrid sisestatud, peate esmalt v\u00e4rvi paika panema.
fireworkEffectsCleared=\u00a76K\u00f5ik effektid eemaldatud k\u00e4esoleval esemel.
fireworkSyntax=\u00a76Ilutulestiku parameetrid\:\u00a7c v\u00e4rv\:<color> [hajutus\:<color>] [kuju\:<shape>] [effekt\:<effect>]\n\u00a76Et kasutada mitmeid effekte/v\u00e4rve korraga, eralda nad \u00fcksteisest komaga\: \u00a7cred,blue,pink\n\u00a76Kujud\:\u00a7c star, ball, large, creeper, burst \u00a76Effektid\:\u00a7c trail, twinkle.
flyMode=\u00a76Lubasid lendamise\u00a7c {0} \u00a76m\u00e4ngijale {1}\u00a76.
flying=lendab
foreverAlone=\u00a74Teil ei ole mitte kellelegi vastata.
fullStack=\u00a74Teil on juba t\u00e4is kogus.
gameMode=\u00a76M\u00e4\u00e4rasid m\u00e4ngu moodi\u00a7c {0} \u00a76m\u00e4ngijale {1}\u00a76.
foreverAlone=\u00a74Sul ei ole mitte kellelegi vastata.
fullStack=\u00a74Sul on juba t\u00e4is kuhi.
gameMode=\u00a7c{1} \u00a76m\u00e4ngure\u017eiimiks on seatud \u00a7c{0}\u00a76.
gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 t\u00fckki, \u00a7c{3}\u00a76 \u00fcksust, \u00a7c{4}\u00a76 plaati.
gcfree=\u00a76Vaba m\u00e4lu\:\u00a7c {0} MB.
gcmax=\u00a76Maksimaalne m\u00e4lu\:\u00a7c {0} MB.
@@ -131,20 +131,20 @@ geoIpUrlEmpty=GeoIP allalaadimise url on t\u00fchi.
geoIpUrlInvalid=GeoIP allalaadimise url on vigane.
geoipJoinFormat=\u00a76M\u00e4ngija \u00a7c{0} \u00a76tuleb asukohast \u00a7c{1}\u00a76.
giveSpawn=\u00a76Annan\u00a7c {0} \u00a7c {1}\u00a76''i\u00a7c m\u00e4ngijale\u00a7c {2}\u00a76.
godDisabledFor=\u00a74keelatud\u00a76 m\u00e4ngijal\u00a7c {0}
godDisabledFor=\u00a7ckeelatud\u00a76 m\u00e4ngijale\u00a7c {0}
godEnabledFor=\u00a7alubatud\u00a76 m\u00e4ngijal\u00a7c {0}
godMode=\u00a76God mode\u00a7c {0}\u00a76.
groupDoesNotExist=\u00a74Selles gruppis ei ole mitte kedagi sees\!
groupNumber=\u00a7c{0}\u00a7f sees, t\u00e4is listiks\:\u00a7c /{1} {2}
godMode=\u00a76Jumalare\u017eiim\u00a7c {0}\u00a76.
groupDoesNotExist=\u00a74Selles grupis ei ole mitte kedagi v\u00f5rgus\!
groupNumber=\u00a7c{0}\u00a7f v\u00f5rgus, terve nimekiri\:\u00a7c /{1} {2}
hatArmor=\u00a74K\u00e4esolevat eset ei saa m\u00fctsina kasutada\!
hatEmpty=\u00a74Te ei kanna m\u00fctsi.
hatEmpty=\u00a74Sa ei kanna m\u00fctsi.
hatFail=\u00a74Teil peab olema k\u00e4es olema midagi mida kanda.
hatPlaced=\u00a76Naudi oma uut m\u00fctsi\!
hatRemoved=\u00a76Teie m\u00fcts on eemaldatud.
haveBeenReleased=\u00a76Teid on vabastatud.
heal=\u00a76Teid on elustatud.
healDead=\u00a74Sa ei saa elustada kedagi kes on surnud\!
healOther=\u00a76Elustasite m\u00e4ngija\u00a7c {0}\u00a76.
haveBeenReleased=\u00a76Sind on vabastatud.
heal=\u00a76Sind on tervendatud.
healDead=\u00a74Sa ei saa surnuid tervendada\!
healOther=\u00a76Tervendasid\u00a7c {0}\u00a76.
helpConsole=Et vaadata abi konsoolist, kirjuta ?.
helpFrom=\u00a76K\u00e4sud m\u00e4ngijalt {0}\:
helpLine=\u00a76/{0}\u00a7r\: {1}
@@ -161,17 +161,17 @@ hour=tund
hours=tundi
ignoredList=\u00a76Ignoreerid\:\u00a7r {0}
ignorePlayer=\u00a76Te ignoreerite m\u00e4ngijat\u00a7c {0}\u00a76.
illegalDate=Illegaalne kuup\u00e4eva formaat.
illegalDate=Vigane kuup\u00e4eva vorming.
infoChapter=\u00a76Vali peat\u00fckk\:
infoChapterPages=\u00a7e ---- \u00a76{0} \u00a7e--\u00a76 Leht \u00a7c{1}\u00a76/\u00a7c{2} \u00a7e----
infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Leht \u00a7c{0}\u00a76/\u00a7c{1} \u00a7e----
infoUnknownChapter=\u00a74Tundmatu peat\u00fckk.
insufficientFunds=\u00a74Ebapiisavas koguses raha.
invalidCharge=\u00a74Vigane tasu.
invalidFireworkFormat=\u00a76Valik \u00a74{0} \u00a76ei ole kehtiv summa \u00a74{1}\u00a76 jaoks.
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\!
invalidMob=\u00a74Invalid mob type.
invalidMob=\u00a74Kehtetu eluka liik.
invalidNumber=Vigane Number.
invalidPotion=\u00a74Vigane n\u00f5iajook.
invalidPotionMeta=\u00a74Vigane n\u00f5iajoogi meta\: \u00a7c{0}\u00a74.
@@ -182,7 +182,7 @@ is=on
itemCannotBeSold=\u00a74K\u00e4esolevat eset ei saa serverile m\u00fc\u00fca.
itemMustBeStacked=\u00a74Eset saad vahetada stackina. Kogus 2s oleks kaks stacki, jne.
itemNames=\u00a76Eseme l\u00fchendid\:\u00a7r {0}
itemNotEnough1=\u00a74Teil pole piisavalt k\u00e4esolevat eset,et seda m\u00fc\u00fca.
itemNotEnough1=\u00a74Sul pole k\u00e4es piisavat hulka eset, et seda m\u00fc\u00fca.
itemNotEnough2=\u00a76Kui teil oli plaanis m\u00fc\u00fca k\u00f5ik oma esemed sellest t\u00fc\u00fcbist, siis kasutage /sell esemenimi.
itemNotEnough3=\u00a76/sell esemenimi -1 m\u00fc\u00fcb k\u00f5ik peale \u00fche, jne.
itemSellAir=Te t\u00f5esti proovisite m\u00fc\u00fca \u00d5hku? V\u00f5tke ese endale k\u00e4tte.
@@ -199,90 +199,90 @@ jailReleasedPlayerNotify=\u00a76Teid on vabastatud\!
jailSentenceExtended=\u00a76Vangi aega pikendati j\u00e4rgnevalt\: {0}
jailSet=\u00a76Vangla\u00a7c {0} \u00a76on m\u00e4\u00e4ratud.
jumpError=\u00a74See teeks teie arvuti ajule haiget.
kickDefault=Kickitud serverist.
kickExempt=\u00a74Te ei saa seda m\u00e4ngijat kickida.
kickedAll=\u00a74Kickitud k\u00f5ik m\u00e4ngijad serverist.
kickDefault=Serverist v\u00e4lja visatud.
kickExempt=\u00a74Sa ei saa seda m\u00e4ngijat m\u00e4ngust v\u00e4lja visata.
kickedAll=\u00a74K\u00f5ik m\u00e4ngijad on serverist v\u00e4lja visatud.
kill=\u00a76Tapsid\u00a7c {0}\u00a76-i.
killExempt=\u00a74Te ei saa tappa {0}\u00a74-i
killExempt=\u00a74Sa ei saa tappa \u00a7c{0}\u00a74.
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitError2=\u00a74See kit on ebakorrektselt seadistatud. Kontakteeru omanikuga.
kitError=\u00a74Ei leidnud \u00fchtegi kit-i.
kitGiveTo=\u00a76Annan kit-i\u00a7c {0}\u00a76 m\u00e4ngijale {1}\u00a7.
kitInvFull=\u00a74Teie seljakott on t\u00e4is, panime abipaki maha.
kitError2=\u00a74See abipakk on ebakorrektselt seadistatud. Kontakteeru omanikuga.
kitError=\u00a74Ei leitud \u00fchtegi abipakki.
kitGiveTo=\u00a76Annan abipaki\u00a7c {0}\u00a76 m\u00e4ngijale \u00a7c{1}\u00a76.
kitInvFull=\u00a74Sinu seljakott on t\u00e4is, panime abipaki maha.
kitNotFound=\u00a74Antud abipakki ei ole olemas.
kitOnce=\u00a74Te ei saa seda abipakki uuesti kasutada.
kitReceive=\u00a76Saite abipaki\u00a7c {0}\u00a76.
kitTimed=\u00a74Te saate seda abipakki kasutada peale\u00a7c {0}\u00a74.
kits=\u00a76Abipakkid\:\u00a7r {0}
leatherSyntax=\u00a76Nahast v\u00e4rvi Syntax\: color\:<red>,<green>,<blue> eg\: color\:255,0,0.
kitReceive=\u00a76Said abipaki\u00a7c {0}\u00a76.
kitTimed=\u00a74Sa saad seda abipakki kasutada peale\u00a7c {0}\u00a74.
kits=\u00a76Abipakid\:\u00a7r {0}
leatherSyntax=\u00a76Nahav\u00e4rvi s\u00fcntaks\: color\:<red>,<green>,<blue> eg\: color\:255,0,0.
lightningSmited=\u00a76Pikne on teid l\u00f6\u00f6nud\!
lightningUse=\u00a76Viskad pikse noole m\u00e4ngijale\u00a7c {0}
listAfkTag=\u00a77[Eemal]\u00a7r
listAmount=\u00a76Serveris on \u00a7c{0}\u00a76/\u00a7c{1}\u00a76 m\u00e4ngijat sees.
listAmountHidden=\u00a76Serveris on \u00a7c{0}\u00a76/{1}\u00a76 maksimaalsest \u00a7c{2}\u00a76 m\u00e4ngijat sees.
listAmount=\u00a76V\u00f5rgus on \u00a7c{0}\u00a76/\u00a7c{1}\u00a76 m\u00e4ngijat.
listAmountHidden=\u00a76V\u00f5rgus on \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76)/\u00a7c{2}\u00a76 m\u00e4ngijat.
listGroupTag=\u00a76{0}\u00a7r\: \u00a7r
listHiddenTag=\u00a77[PEIDETUD]\u00a7r
loadWarpError=\u00a74Viga laadides l\u00f5imu {0}.
loadWarpError=\u00a74L\u00f5imu {0} laadimisel tekkis viga.
localFormat=[L]<{0}> {1}
mailClear=\u00a76Et m\u00e4rkida posti loetuks, kirjuta\u00a7c /mail clear.
mailCleared=\u00a76Post puhastatud\!
mailSent=\u00a76Post saadetud\!
markMailAsRead=\u00a76Et m\u00e4rkida enda posti loetuks, kirjuta\u00a7c /mail clear.
mailClear=\u00a76Et m\u00e4rkida kirjad loetuks, kirjuta\u00a7c /mail clear\u00a76.
mailCleared=\u00a76Kirjad on puhastatud\!
mailSent=\u00a76Kiri saadetud\!
markMailAsRead=\u00a76Et m\u00e4rkida kirjad loetuks, kirjuta\u00a7c /mail clear\u00a76.
markedAsAway=\u00a76Teid on m\u00e4rgitud kui eemal.
markedAsNotAway=\u00a76Te ei ole enam m\u00e4rgitud kui eemal.
matchingIPAddress=\u00a76J\u00e4rgnevad m\u00e4ngijad on eelnevalt sisse loginud sellelt IP aadressilt\:
maxHomes=\u00a74Te ei saa m\u00e4\u00e4rata rohkem kui\u00a7c {0} \u00a74kodu.
mayNotJail=\u00a74Te ei tohi antud m\u00e4ngijat vangistada\!
maxHomes=\u00a74Sa ei saa m\u00e4\u00e4rata rohkem kui\u00a7c {0} \u00a74kodu.
mayNotJail=\u00a74Sa ei tohi antud m\u00e4ngijat vangistada\!
me=mina
minute=minut
minutes=minutit
missingItems=\u00a74Teil ei ole {0}x {1}.
mobSpawnError=\u00a74Viga vahetades mob spawnerit.
mobSpawnLimit=Mob kogus piiratud serveri piirile.
mobSpawnTarget=\u00a74Sihitud plokk peab olema mob spawner.
mobsAvailable=\u00a76Mobid\:\u00a7r {0}
missingItems=\u00a74Sul ei ole \u00a7c{0}x {1}\u00a74.
mobSpawnError=\u00a74Elukatekitaja vahetamisel tekkis viga.
mobSpawnLimit=Elukate hulk piiratud serveri limiidile.
mobSpawnTarget=\u00a74Sihitud plokk peab olema elukatekitaja.
mobsAvailable=\u00a76Elukad\:\u00a7r {0}
moneyRecievedFrom=\u00a7a{0} on saadud kasutajalt {1}.
moneySentTo=\u00a7a{0} on saadetud m\u00e4ngijale {1}.
month=kuu
months=kuud
moreThanZero=\u00a74Kogused peavad olema suuremad kui 0.
moveSpeed=\u00a76M\u00e4\u00e4rasite {0} kiiruse\u00a7c {1} \u00a76m\u00e4ngijale {2}\u00a76.
msgFormat=\u00a76[{0}\u00a76 -> {1}\u00a76] \u00a7r{2}
moveSpeed=\u00a7c{1} \u00a76{0}kiiruseks on seatud \u00a7c{2}\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
multipleCharges=\u00a74Te ei saa lisada rohkem kui \u00fche laadimise k\u00e4esolevale ilutulestikule.
multiplePotionEffects=\u00a74Te ei saa lisada rohkem kui \u00fche effekti k\u00e4esolevale n\u00f5iajoogile.
muteExempt=\u00a74Te ei saa muteda antud m\u00e4ngijat.
muteNotify=\u00a7c{0} \u00a76mutes m\u00e4ngija \u00a7c{1}\u00a76.
mutedPlayer=\u00a76M\u00e4ngija\u00a7c {0} \u00a76mutetud.
mutedPlayerFor=\u00a76M\u00e4ngija\u00a7c {0} \u00a76mutetud\u00a7c {1}\u00a76.
mutedUserSpeaks={0} \u00fcritas r\u00e4\u00e4kida, aga on muted.
muteExempt=\u00a74Sa ei tohi vaigistada antud m\u00e4ngijat.
muteNotify=\u00a7c{0} \u00a76vaigistas m\u00e4ngija \u00a7c{1}\u00a76.
mutedPlayer=\u00a76M\u00e4ngija\u00a7c {0} \u00a76on vaigistatud.
mutedPlayerFor=\u00a76M\u00e4ngija\u00a7c {0} \u00a76on vaigistatud\u00a7c {1}\u00a76.
mutedUserSpeaks={0} \u00fcritas r\u00e4\u00e4kida, aga on vaigistatud.
nearbyPlayers=\u00a76M\u00e4ngijad l\u00e4heduses\:\u00a7r {0}
negativeBalanceError=\u00a74Kasutajal ei ole lubatud olla negatiivne raha summa.
negativeBalanceError=\u00a74Kasutajal ei ole tohi olla negatiivne rahasumma.
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.
nickNoMore=\u00a76Teilt eemaldati h\u00fc\u00fcdnimi.
nickSet=\u00a76Teie h\u00fc\u00fcdnimi on n\u00fc\u00fcd \u00a7c{0}
nickSet=\u00a76Sinu h\u00fc\u00fcdnimi on n\u00fc\u00fcd \u00a7c{0}\u00a76.
nickTooLong=\u00a74Antud h\u00fc\u00fcdnimi on liiga pikk.
noAccessCommand=\u00a74Teil ei ole sellele k\u00e4sule juurdep\u00e4\u00e4su.
noAccessPermission=\u00a74Teil ei ole \u00f5igust sellele {0}-ile.
noAccessPermission=\u00a74Sul pole \u00f5igust \u00a7c{0}\u00a74 avamiseks.
noBreakBedrock=\u00a74Teil ei ole lubatud purustada aluskivi.
noDestroyPermission=\u00a74Teil ei ole luba purustada seda {0}.
noDestroyPermission=\u00a74Sul pole \u00f5igust \u00a7c{0}\u00a74 l\u00f5hkumiseks.
noDurability=\u00a74K\u00e4esoleval esemel puudub vastupidavus.
noGodWorldWarning=\u00a74Hoiatus\! God mood ei ole lubatud selles maailmas.
noGodWorldWarning=\u00a74Hoiatus\! Jumalare\u017eiim ei ole selles maailmas lubatud.
noHelpFound=\u00a74Klappivaid k\u00e4ske ei ole.
noHomeSetPlayer=\u00a76M\u00e4ngija ei ole m\u00e4\u00e4ranud kodu.
noIgnored=\u00a76Te ei ignoreeri mitte kedagi.
noKitPermission=\u00a74Te vajate \u00a7c{0}\u00a74 luba, et kasutada seda kit-i.
noKits=\u00a76\u00dchtegi kit-i ei ole hetkel saadaval.
noMail=\u00a76Teil ei ole uut posti.
noKitPermission=\u00a74Te vajate \u00a7c{0}\u00a74 luba, et kasutada seda abipakki.
noKits=\u00a76\u00dchtegi abipakki ei ole hetkel saadaval.
noMail=\u00a76Teil ei ole \u00fchtegi kirja.
noMatchingPlayers=\u00a76Klappivaid m\u00e4ngijaid ei leitud.
noMetaFirework=\u00a74Teil ei ole luba, et m\u00e4\u00e4rata ilutulestiku meta.
noMetaPerm=\u00a74Teil ei ole luba lisada \u00a7c{0}\u00a74 meta-t k\u00e4esolevale esemele.
noNewMail=\u00a76Teil ei ole uut posti.
noMetaFirework=\u00a74Teil ei ole luba, et m\u00e4\u00e4rata ilutulestiku effekte.
noMetaPerm=\u00a74Teil ei ole luba lisada \u00a7c{0}\u00a74 effekte k\u00e4esolevale esemele.
noNewMail=\u00a76Teil ei ole \u00fchtegi uut kirja.
noPendingRequest=\u00a74Teil ei ole ootel taotlust.
noPerm=\u00a74Teil ei ole \u00a7c{0}\u00a74 permissionit.
noPermToSpawnMob=\u00a74Teil ei ole luba spawnida antud mob-i.
noPermToSpawnMob=\u00a74Sul ei ole luba tekitada antud elukat.
noPlacePermission=\u00a74Teil ei ole luba asetada plokki selle m\u00e4rgi l\u00e4heduses.
noPotionEffectPerm=\u00a74Teil ei ole luba, et lisada n\u00f5iajoogi effekti \u00a7c{0} \u00a74k\u00e4esolevale n\u00f5iajoogile.
noPowerTools=\u00a76Teil ei ole power tool-e m\u00e4\u00e4ratud.
@@ -293,18 +293,18 @@ notAllowedToShout=\u00a74Te ei ole autoriseeritud, et karjuda.
notEnoughExperience=\u00a74Teil ei ole piisavalt exp-d.
notEnoughMoney=\u00a74Teil pole piisavalt raha.
notFlying=ei lenda
notRecommendedBukkit=\u00a74* \! * Bukkit versioon ei ole soovitatud build Essentials''ile.
notRecommendedBukkit=\u00a74* \! * Bukkit''i versioon ei ole soovitatud build Essentials''ile.
notSupportedYet=Ei ole veel toetatud.
nothingInHand=\u00a74Teil ei ole mitte midagi k\u00e4es.
now=n\u00fc\u00fcd
nuke=\u00a75Las surm sajab neile peale.
numberRequired=Number l\u00e4heb sinna, rumaluke.
onlyDayNight=/time toetab ainult day/night.
onlyPlayerSkulls=\u00a74Te saate m\u00e4\u00e4rata ainult m\u00e4ngija kolju omaniku (397\:3).
onlyPlayers=\u00a74Ainult in-game m\u00e4ngijad saavad kasutada {0}.
onlyPlayerSkulls=\u00a74Sa saad m\u00e4\u00e4rata ainult m\u00e4ngija kolju (\u00a7c397\:3\u00a74) omaniku.
onlyPlayers=\u00a74K\u00e4sku \u00a7c{0}\u00a74 saab kasutada ainult m\u00e4ngusiseselt.
onlySunStorm=\u00a74/weather toetab ainult sun/storm.
orderBalances=\u00a76J\u00e4rjestan\u00a7c {0} \u00a76m\u00e4ngija raha, palun oota...
oversizedTempban=\u00a74Te ei saa bannida m\u00e4ngijat nii pikaks ajaks.
oversizedTempban=\u00a74Sa ei saa blokeerida m\u00e4ngijat nii pikaks ajaks.
pTimeCurrent=\u00a7c{0}\u00a76''i aeg on\u00a7c {1}\u00a76.
pTimeCurrentFixed=\u00a7c{0}\u00a76''i aeg on peatatud\u00a7c {1}\u00a76.
pTimeNormal=\u00a7c{0}\u00a76''i aeg on normaalne ja kattub serveriga.
@@ -321,52 +321,52 @@ pWeatherPlayers=\u00a76Nendel m\u00e4ngijatel on oma ilm\:\u00a7r
pWeatherReset=\u00a76M\u00e4ngija ilm on taastatud m\u00e4ngjale\: \u00a7c{0}
pWeatherSet=\u00a76M\u00e4ngija ilm on seatud \u00a7c{0}\u00a76 m\u00e4ngijale\: \u00a7c{1}.
pendingTeleportCancelled=\u00a74Ootel teleport kutse h\u00fcljatud.
playerBanIpAddress=\u00a76M\u00e4ngija\u00a7c {0} \u00a76bannis IP aadressi\u00a7c {1}\u00a76.
playerBanned=\u00a76M\u00e4ngija\u00a7c {0} \u00a76bannis m\u00e4ngija\u00a7c {1} \u00a76p\u00f5hjusega {2}.
playerInJail=\u00a74M\u00e4ngija on juba vangis\u00a7c {0}\u00a76.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a76M\u00e4ngija\u00a7c {0} \u00a76blokeeris\u00a7c {1} \u00a76p\u00f5hjusega \u00a7c{2}\u00a76.
playerInJail=\u00a74M\u00e4ngija on juba vangis\u00a7c {0}\u00a74.
playerJailed=\u00a76M\u00e4ngija\u00a7c {0} \u00a76vangistatud.
playerJailedFor=\u00a76M\u00e4ngija\u00a7c {0} \u00a76vangistatud p\u00f5hjusega {1}.
playerKicked=\u00a76M\u00e4ngija\u00a7c {0} \u00a76kickiti {1} p\u00f5hjusega {2}.
playerMuted=\u00a76Teid on mutetud\!
playerMutedFor=\u00a76Teid on mutetud m\u00e4\u00e4ratud ajaks\:\u00a7c {0}.
playerKicked=\u00a76M\u00e4ngija\u00a7c {0} \u00a76viskas {1} v\u00e4lja p\u00f5hjusega {2}.
playerMuted=\u00a76Sa oled vaigistatud\!
playerMutedFor=\u00a76Sind on vaigistatud m\u00e4\u00e4ratud ajaks\:\u00a7c {0}.
playerNeverOnServer=\u00a74M\u00e4ngija\u00a7c {0} \u00a74ei ole kunagi siin m\u00e4nginud.
playerNotFound=\u00a74M\u00e4ngijat ei leitud.
playerUnbanIpAddress=\u00a76M\u00e4ngija\u00a7c {0} \u00a76unbannis IP\: {1}.
playerUnbanned=\u00a76M\u00e4ngija\u00a7c {0} \u00a76unbannis\u00a7c {1}.
playerUnmuted=\u00a76Teie mute on eemaldatud.
playerUnbanIpAddress=\u00a76M\u00e4ngija\u00a7c {0} \u00a76eemaldas IP {1} blokeeringu.
playerUnbanned=\u00a76M\u00e4ngija\u00a7c {0} \u00a76eemaldas\u00a7c {1} \u00a76blokeeringu.
playerUnmuted=\u00a76Sinu vaigistus on eemaldatud.
pong=Pong\!
posPitch=\u00a76Pitch\: {0} (pea nurk)
posX=\u00a76X\: {0} (+Ida <-> -L\u00e4\u00e4s)
posY=\u00a76Y\: {0} (+\u00dcles <-> -Alla)
posYaw=\u00a76Yaw\: {0} (P\u00f6\u00f6re)
posZ=\u00a76Z\: {0} (+L\u00f5una <-> -P\u00f5hi)
possibleWorlds=\u00a76V\u00f5imalikud maailmad on numbrid 0 l\u00e4bi {0}.
possibleWorlds=\u00a76V\u00f5imalikud maailmad on numbrite \u00a7c0\u00a76 kuni \u00a7c{0}\u00a76 vahel.
potions=\u00a76N\u00f5iajoogid\:\u00a7r {0}\u00a76.
powerToolAir=\u00a74K\u00e4sku ei saa m\u00e4\u00e4rata \u00f5hule.
powerToolAlreadySet=\u00a74K\u00e4sk \u00a7c{0}\u00a74 on juba m\u00e4\u00e4ratud esemele {1}.
powerToolAlreadySet=\u00a74K\u00e4sk \u00a7c{0}\u00a74 on juba lisatud esemele \u00a7c{1}\u00a74.
powerToolAttach=\u00a7c{0}\u00a76 k\u00e4sk m\u00e4\u00e4ratud esemele {1}.
powerToolClearAll=\u00a76K\u00f5ik powertool k\u00e4sud puhastatud.
powerToolList=\u00a76Esemel \u00a7c{1} \u00a76on j\u00e4rgnevad k\u00e4sud\: \u00a7c{0}\u00a76.
powerToolListEmpty=\u00a74Esemel \u00a7c{0} \u00a74ei ole m\u00e4\u00e4ratud k\u00e4ske.
powerToolNoSuchCommandAssigned=\u00a74K\u00e4sk \u00a7c{0}\u00a74 ei ole m\u00e4\u00e4ratud esemele {1}.
powerToolRemove=\u00a76K\u00e4sk \u00a7c{0}\u00a76 eemaldatud esemelt {1}.
powerToolRemoveAll=\u00a76K\u00f5ik k\u00e4sud eemaldatud esemelt {0}.
powerToolNoSuchCommandAssigned=\u00a74K\u00e4sk \u00a7c{0}\u00a74 ei ole lisatud esemele \u00a7c{1}\u00a74.
powerToolRemove=\u00a76K\u00e4sk \u00a7c{0}\u00a76 eemaldatud esemelt \u00a7c{1}\u00a76.
powerToolRemoveAll=\u00a76K\u00f5ik k\u00e4sud eemaldatud esemelt \u00a7c{0}\u00a76.
powerToolsDisabled=\u00a76K\u00f5ik su power tool-id on disabled.
powerToolsEnabled=\u00a76K\u00f5ik su power tool-id on enabled.
powerToolsEnabled=\u00a76K\u00f5ik su power tool-id on lubatud.
questionFormat=\u00a72[K\u00fcsimus]\u00a7r {0}
readNextPage=\u00a76Kirjuta\u00a7c /{0} {1}\u00a76, et lugeda j\u00e4rgmist lehte.
recipe=\u00a76Retsept esemele \u00a7c{0}\u00a76 ({1} koguses {2})
recipe=\u00a76Retsept esemele \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 koguses \u00a7c{2}\u00a76)
recipeBadIndex=Ei leidunud restepti antud numbriga.
recipeFurnace=\u00a76Sulata \u00a7c{0}
recipeGrid=\u00a7{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a0\u00a7{0}X \u00a76on \u00a7c{1}
recipeFurnace=\u00a76Sulata\: \u00a7c{0}\u00a76.
recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a7c{0}X \u00a76on \u00a7c{1}
recipeMore=\u00a76Kirjuta /{0} \u00a7c{1}\u00a76 <number>, et n\u00e4ha \u00a7c{2}\u00a76 retsepti.
recipeNone=Mitte \u00fchtegi retsepti ei ole olemas j\u00e4rgnevale esemele\: {0}
recipeNothing=mitte midagi
recipeShapeless=\u00a76Kombineeri \u00a7c{0}
recipeWhere=\u00a76Kus\: {0}
removed=\u00a76Eemaldatud\u00a7c {0} \u00a76\u00fcksust.
repair=\u00a76Te olete edukalt parandanud oma\: \u00a7c{0}.
repair=\u00a76Te olete edukalt parandanud oma\: \u00a7c{0}\u00a76.
repairAlreadyFixed=\u00a74Antud ese ei tarvi parandamist.
repairEnchanted=\u00a74Teil ei ole lubatud parandada loitsitud esemeid.
repairInvalidType=\u00a74K\u00e4esolevat eset ei saa parandada.
@@ -377,20 +377,20 @@ requestDenied=\u00a76Teleport kutse h\u00fcljatud.
requestDeniedFrom=\u00a7c{0} \u00a76h\u00fclgas teie teleport kutse.
requestSent=\u00a76Kutse saadetud m\u00e4ngijale\u00a7c {0}\u00a76.
requestTimedOut=\u00a74Teleport kutse aegus.
requiredBukkit=\u00a76* \! * Teil on vaja v\u00e4hemalt build {0} CraftBukkit''it, laadige see alla http\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a76Raha on taastatud j\u00e4rgnevaks\: \u00a7a{0} \u00a76k\u00f5ikidele serveris olevatele m\u00e4ngijatele.
resetBalAll=\u00a76Raha on taastatud j\u00e4rgnevaks\: \u00a7a{0} \u00a76k\u00f5ikidele m\u00e4ngijatele.
returnPlayerToJailError=\u00a74Ilmnes viga tagastades m\u00e4ngijat\u00a7c {0} \u00a74vanglasse\: {1}\!
requiredBukkit=\u00a76* \! * Teil on vaja v\u00e4hemalt build {0} CraftBukkit''it, laadige see alla aadressilt http\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a76Raha on taastatud summaks \u00a7c{0} \u00a76k\u00f5ikidel online m\u00e4ngijatel.
resetBalAll=\u00a76Raha on taastatud summaks \u00a7c{0} \u00a76k\u00f5ikidel m\u00e4ngijatel.
returnPlayerToJailError=\u00a74Tekkis viga tagastades m\u00e4ngija\u00a7c {0} \u00a74vanglasse\: \u00a7c{1}\u00a74\!
runningPlayerMatch=\u00a76Jooksutan otsingu m\u00e4ngjatele ''\u00a7c{0}\u00a76'' (see v\u00f5ib v\u00f5tta aega)
second=sekund
seconds=sekundit
seenOffline=\u00a76M\u00e4ngija\u00a7c {0} \u00a76on \u00a74offline\u00a76 alates {1}.
seenOnline=\u00a76M\u00e4ngija\u00a7c {0} \u00a76on \u00a7aonline\u00a76 alates {1}.
seenOffline=\u00a76M\u00e4ngija\u00a7c {0} \u00a76on olnud \u00a74v\u00f5rgust v\u00e4ljas\u00a76 alates \u00a7c{1}\u00a76.
seenOnline=\u00a76M\u00e4ngija\u00a7c {0} \u00a76on olnud \u00a7av\u00f5rgus\u00a76 alates \u00a7c{1}\u00a76.
serverFull=Server on t\u00e4is\!
serverTotal=\u00a76Serveril kokku\:\u00a7c {0}
setBal=\u00a7aTeie raha m\u00e4\u00e4rati j\u00e4rgnevaks\: {0}.
setBalOthers=\u00a7aM\u00e4\u00e4rasite {0}\u00a7a''i raha j\u00e4rgnevaks\: {1}.
setSpawner=\u00a76Muutsite spawneri t\u00fc\u00fcbi j\u00e4rgnevaks\:\u00a7c {0}
setSpawner=\u00a76Muutsid elukatekitaja t\u00fc\u00fcbi j\u00e4rgnevaks\:\u00a7c {0}\u00a76.
sheepMalformedColor=\u00a74Moondunud v\u00e4rv.
shoutFormat=\u00a76[H\u00fc\u00fcd]\u00a7r {0}
signFormatFail=\u00a74[{0}]
@@ -399,12 +399,12 @@ signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74Teil ei ole lubatud siia m\u00e4rki teha.
similarWarpExist=\u00a74L\u00f5im sarnase nimiga on juba olemas.
slimeMalformedSize=\u00a74Moondunud suurus.
socialSpy=\u00a76SocialSpy m\u00e4ngijale {0}\u00a76\: {1}
soloMob=\u00a74Antud mob-ile meeldib olla \u00fcksi.
socialSpy=\u00a76SocialSpy on \u00a7c{1}\u00a76 m\u00e4ngijale \u00a7c{0}
soloMob=\u00a74Antud elukale meeldib olla \u00fcksi.
spawnSet=\u00a76Spawn asukoht m\u00e4\u00e4ratud gruppile\u00a7c {0}\u00a76.
spawned=spawnitud
spawned=tekkis
sudoExempt=\u00a74Te ei saa sudo-da antud kasutajat.
sudoRun=\u00a76Sunnin\u00a7c {0}\u00a76''i kirjutama k\u00e4sku\:\u00a7r /{1} {2}
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a76Headaega julm maailm...
suicideSuccess=\u00a76{0} \u00a76v\u00f5ttis endalt elu.
survival=elluj\u00e4\u00e4mine
@@ -412,7 +412,7 @@ takenFromAccount=\u00a7a{0} on v\u00f5etud teie kontolt.
takenFromOthersAccount=\u00a7a{0} v\u00f5etud m\u00e4ngija {1}\u00a7a kontolt. Uus raha summa\: {2}.
teleportAAll=\u00a76Teleporteerumise kutse saadetud k\u00f5igile...
teleportAll=\u00a76Teleporteerun k\u00f5ik m\u00e4ngijad...
teleportAtoB=\u00a7c{0}\u00a76 teleportis teid m\u00e4ngija {1}\u00a76 juurde.
teleportAtoB=\u00a7c{0}\u00a76 teleportis su \u00a7c{1}\u00a76 juurde.
teleportDisabled=\u00a7c{0}\u00a74-il on teleportimine disabled.
teleportHereRequest=\u00a7c{0}\u00a76 saatis teile kutse, et telepordiksid nende juurde.
teleportNewPlayerError=\u00a74Viga teleportimisel uut m\u00e4ngijat\!
@@ -420,18 +420,19 @@ teleportRequest=\u00a7c{0}\u00a76 soovib teie juurde teleportida.
teleportRequestTimeoutInfo=\u00a76See kutse aegub peale\u00a7c {0} sekundit\u00a76.
teleportTop=\u00a76Teleporteerud \u00fcles.
teleportationCommencing=\u00a76Teleporteerumine algab...
teleportationDisabled=\u00a76Teleportimine keelatud.
teleportationDisabledFor=\u00a76Teleporimine keelatud m\u00e4ngijale {0}.
teleportationEnabled=\u00a76Teleportimine lubatud.
teleportationEnabledFor=\u00a76Teleporteerumine lubatud m\u00e4ngijale {0}.
teleportationDisabled=\u00a76Teleportimine \u00a7ckeelatud\u00a76.
teleportationDisabledFor=\u00a76Teleporimine \u00a7ckeelatud \u00a76m\u00e4ngijale \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportimine \u00a7clubatud\u00a76.
teleportationEnabledFor=\u00a76Teleporimine \u00a7clubatud \u00a76m\u00e4ngijale \u00a7c{0}\u00a76.
teleporting=\u00a76Teleportimine...
tempBanned=Ajutiselt bannitud serverist j\u00e4rgnevaks ajaks\: {0}.
tempbanExempt=\u00a74Te ei v\u00f5i tempbannida seda m\u00e4ngijat.
teleportToPlayer=\u00a76Telepordin \u00a7c{0}\u00a76 juurde.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a74Sa ei v\u00f5i seda m\u00e4ngijat ajutiselt blokeerida.
thunder=\u00a76Sa\u00a7c {0} \u00a76\u00e4ikeseliseks oma maailmas.
thunderDuration=\u00a76Sa\u00a7c {0} \u00a76\u00e4ikeliseks oma maailmas\u00a7c {1} \u00a76sekundiks.
timeBeforeHeal=\u00a74Aeg enne j\u00e4rgmist elustamist\:\u00a7c {0}\u00a76.
timeBeforeTeleport=\u00a74Aeg enne j\u00e4rgmist teleportimist\:\u00a7c {0}\u00a76.
timeFormat=\u00a7c{0}\u00a76 v\u00f5i \u00a7c{1}\u00a76 v\u00f5i \u00a7c{2}\u00a76.
timeFormat=\u00a7c{0}\u00a76, \u00a7c{1}\u00a76 v\u00f5i \u00a7c{2}\u00a76
timeSetPermission=\u00a74Teil ei ole lubatud aega muuta.
timeWorldCurrent=\u00a76Praegune aeg maailmas\u00a7c {0} \u00a76on \u00a7c{1}\u00a76.
timeWorldSet=\u00a76Aeg on m\u00e4\u00e4ratud j\u00e4rgnevaks\:\u00a7c {0} \u00a76maailmas\: \u00a7c{1}\u00a76.
@@ -441,25 +442,25 @@ tps=\u00a76Praegune TPS \= {0}
tradeSignEmpty=\u00a74Vahetus m\u00e4rgil ei ole mitte midagi saadaval teile.
tradeSignEmptyOwner=\u00a74Ei ole mitte midagi mida korjata sellelt vahetus m\u00e4rgilt.
treeFailure=\u00a74Puidu generatsiooni viga. Proovi uuesti muru v\u00f5i mulla peal.
treeSpawned=\u00a76Puu spawnitud.
treeSpawned=\u00a76Puu on tekitatud.
true=\u00a7atrue\u00a7r
typeTpaccept=\u00a76Et teleportida, kirjuta \u00a7c/tpaccept\u00a76.
typeTpdeny=\u00a76Et h\u00fcljata seda kutset, kirjuta \u00a7c/tpdeny\u00a76.
typeWorldName=\u00a76V\u00f5ite kirjutada ka teatud maailma nime.
unableToSpawnMob=\u00a74Tekkis viga spawnides mob-i.
unableToSpawnMob=\u00a74Eluka tekitamisel tekkis viga.
unignorePlayer=\u00a76Sa ei ignoreeri enam m\u00e4ngijat\u00a7c {0}\u00a76.
unknownItemId=\u00a74Tundmatu eseme id\:\u00a7r {0}\u00a74.
unknownItemInList=\u00a74Tundmatu ese {0} {1} listis.
unknownItemName=\u00a74Tundmatu eseme nimi\: {0}.
unlimitedItemPermission=\u00a74Puuduvad \u00f5igused l\u00f5pmatult esemete jaoks {0}.
unlimitedItemPermission=\u00a74Puuduvad \u00f5igused l\u00f5pmatu eseme \u00a7c{0}\u00a74 jaoks.
unlimitedItems=\u00a76L\u00f5pmatud esemed\:\u00a7r
unmutedPlayer=\u00a76M\u00e4ngija\u00a7c {0} \u00a76unmuted.
unvanishedReload=\u00a74Reload sundis sind muutuma n\u00e4htavaks.
unmutedPlayer=\u00a76M\u00e4ngija\u00a7c {0} \u00a76vaigistus eemaldatud.
unvanishedReload=\u00a74Taaslaadimine sundis sind muutuma n\u00e4htavaks.
upgradingFilesError=Viga uuendades faile.
uptime=\u00a76Uptime\:\u00a7c {0}
userAFK=\u00a77{0} \u00a75on hetkel Eemal ja ei pruugi vastata.
userAFK=\u00a77{0} \u00a75on hetkel eemal ja ei pruugi vastata.
userDoesNotExist=\u00a74Kasutaja\u00a7c {0} \u00a74ei ole olemas.
userIsAway=\u00a77* {0} \u00a77on n\u00fc\u00fcd Eemal.
userIsAway=\u00a77* {0} \u00a77on n\u00fc\u00fcd eemal.
userIsNotAway=\u00a77* {0} \u00a77on tagasi.
userJailed=\u00a76Teid on vangistatud\!
userUnknown=\u00a74Hoiatus\: Kasutaja ''\u00a7c{0}\u00a74'' ei ole kunagi selle serveriga liitunud.
@@ -480,24 +481,24 @@ warpSet=\u00a76L\u00f5im\u00a7c {0} \u00a76m\u00e4\u00e4ratud.
warpUsePermission=\u00a74Teil ei ole \u00d5igust, et seda l\u00f5imu kasutada.
warpingTo=\u00a76Kasutate l\u00f5imu, et liikuda asukohta\:\u00a7c {0}\u00a76.
warps=\u00a76L\u00f5imud\:\u00a7r {0}
warpsCount=\u00a76Kokku on\u00a7c {0} \u00a76l\u00f5imu. N\u00e4itan lehte {1}/{2}.
warpsCount=\u00a76Kokku on\u00a7c {0} \u00a76l\u00f5imu. N\u00e4itan lehte \u00a7c{1}\u00a76/\u00a7c{2}\u00a76.
weatherStorm=\u00a76Te m\u00e4\u00e4rasite ilma \u00a7ctormiseks\u00a76 maailmas\u00a7c {0}\u00a76.
weatherStormFor=\u00a76M\u00e4\u00e4rasite ilma \u00a7ctormiseks\u00a76 maailmas\u00a7c {0}\u00a76 {1} sekundiks.
weatherSun=\u00a76M\u00e4\u00e4rasite ilma \u00a7cp\u00e4ikeselisek\u00a76 maailmas\u00a7c {0}\u00a76.
weatherSunFor=\u00a76M\u00e4\u00e4rasite ilma \u00a7cp\u00e4ikeliseks\u00a76 maailmas\u00a7c {0}\u00a76 {1} sekundiks.
whoisAFK=\u00a76 - Eemal\:\u00a7r {0}
whoisBanned=\u00a76 - Bannitud\:\u00a7r {0}
whoisBanned=\u00a76 - Blokeeritud\:\u00a7r {0}
whoisExp=\u00a76 - Exp\:\u00a7r {0} (Level {1})
whoisFly=\u00a76 - Lendab?\:\u00a7r {0} ({1})
whoisGamemode=\u00a76 - M\u00e4ngumood\:\u00a7r {0}
whoisFly=\u00a76 - Lennure\u017eiim\:\u00a7r {0} ({1})
whoisGamemode=\u00a76 - M\u00e4ngure\u017eiim\:\u00a7r {0}
whoisGeoLocation=\u00a76 - Asukoht\:\u00a7r {0}
whoisGod=\u00a76 - Jumala mood\:\u00a7r {0}
whoisGod=\u00a76 - Jumalare\u017eiim\:\u00a7r {0}
whoisHealth=\u00a76 - Tervis\:\u00a7r {0}/20
whoisIPAddress=\u00a76 - IP Aadress\:\u00a7r {0}
whoisJail=\u00a76 - Vangis\:\u00a7r {0}
whoisLocation=\u00a76 - Asukoht\:\u00a7r ({0}, {1}, {2}, {3})
whoisMoney=\u00a76 - Raha\:\u00a7r {0}
whoisMuted=\u00a76 - Mutetud\:\u00a7r {0}
whoisMuted=\u00a76 - Vaigistatud\:\u00a7r {0}
whoisNick=\u00a76 - H\u00fc\u00fcdnimi\:\u00a7r {0}
whoisOp=\u00a76 - OP\:\u00a7r {0}
whoisTop=\u00a76 \=\=\=\=\=\= WhoIs\:\u00a7c {0} \u00a76\=\=\=\=\=\=
@@ -506,12 +507,12 @@ worthMeta=\u00a7aStack {0}''i metadataga {1} v\u00e4\u00e4rt \u00a7c{2}\u00a7a
worthSet=\u00a76V\u00e4\u00e4rtus m\u00e4\u00e4ratud
year=aasta
years=aastat
youAreHealed=\u00a76Teid on elustatud.
youHaveNewMail=\u00a76Teil on\u00a7c {0} \u00a76lugemata s\u00f5numit\! Kirjuta \u00a7c/mail read\u00a76, et lugeda enda posti.
youAreHealed=\u00a76Sind on tervendatud.
youHaveNewMail=\u00a76Teil on\u00a7c {0} \u00a76lugemata s\u00f5numit\! Kirjutage \u00a7c/mail read\u00a76, et lugeda enda kirju.
whoisHunger=\u00a76 - N\u00e4lg\:\u00a7r {0}/20 (+{1} k\u00fcllastus)
kitDelay=\u00a7m{0}\u00a7r
giveSpawnFailure=\u00a74Pole piisavalt ruumi, \u00a7c{0} \u00a7c{1} \u00a74kadus \u00e4ra.
noKitGroup=\u00a74Teil ei ole luba sellele abipakile.
giveSpawnFailure=\u00a74Pole piisavalt ruumi, \u00a7c{0} \u00a7c{1} \u00a74j\u00e4i saamata.
noKitGroup=\u00a74Sul ei ole juurdep\u00e4\u00e4su sellele abipakile.
inventoryClearingFromAll=\u00a76T\u00fchjendan k\u00f5ikide m\u00e4ngijate seljakoti...
inventoryClearingAllItems=\u00a76Puhastati k\u00f5ik seljakoti esemed\: {0}\u00a76.
inventoryClearingAllArmor=\u00a76Puhastati k\u00f5ik seljakoti esemed ja armor\: {0}\u00a76.
@@ -522,28 +523,36 @@ localNoOne=
totalSellableAll=\u00a7aKogusumma k\u00f5ikide m\u00fc\u00fcvate esemete ja plokkide v\u00e4\u00e4rtus on \u00a7c{1}\u00a7a.
totalSellableBlocks=\u00a7aKogusumma k\u00f5ikide m\u00fc\u00fcdavate plokkide v\u00e4\u00e4rtus on \u00a7c{1}\u00a7a.
radiusTooBig=\u00a74Raadius on liiga suur\! Maksimaalne raadius on {0}.
isIpBanned=\u00a76IP \u00a7c{0} \u00a76on bannitud.
isIpBanned=\u00a76IP \u00a7c{0} \u00a76on blokeeritud.
mobDataList=\u00a76Kehtiv mob data\:\u00a7r {0}
vanish=\u00a76Vanish m\u00e4ngijale {0}\u00a76\: {1}
vanish=\u00a76Haihtumine\u00a76 {1} \u00a76 m\u00e4ngijale {0}
noLocationFound=\u00a74Ei leidnud sobivat asukohta.
coordsKeyword={0}, {1}, {2}
banExemptOffline=\u00a74Te ei v\u00f5i bannida m\u00e4ngijaid kes ei ole serveris sees.
tempbanExemptOffline=\u00a74Te ei v\u00f5i tempbannida m\u00e4ngijaid kes ei ole serveris sees.
mayNotJailOffline=\u00a74Te ei v\u00f5i vangistada m\u00e4ngijaid kes ei ole serveris sees.
muteExemptOffline=\u00a74Te ei v\u00f5i muteda m\u00e4ngijaid keda pole serveris sees.
tempbanExemptOffline=\u00a74Sa ei tohi ajutiselt blokeerida v\u00f5rgust v\u00e4ljas olevaid m\u00e4ngijaid.
mayNotJailOffline=\u00a74Sa ei tohi vangistada v\u00f5rgust v\u00e4ljas olevaid m\u00e4ngijaid.
muteExemptOffline=\u00a74Sa ei tohi vaigistada v\u00f5rgust v\u00e4ljas olevaid m\u00e4ngijaid.
ignoreExempt=\u00a74Te ei saa seda m\u00e4ngijat ignoreerida.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the Skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that Skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player Skull.
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
unsafeTeleportDestination=\u00a75Teleportimise sihtpunkt on ohtlik ja teleportimise-ohutus on maha v\u00f5etud.
noMetaJson=See Bukkiti versioon ei toeta JSON metaandmeid.
maxMoney=\u00a74See tehing \u00fcletab selle konto liimiti.
skullChanged=\u00a76Kolju muudetud\: \u00a7c{0}\u00a76.
alphaNames=\u00a74H\u00fc\u00fcdnimed nimed v\u00f5ivad sisaldada ainult t\u00e4hti, numbreid ning allkriipse.
givenSkull=\u00a76Sulle anti \u00a7c{0} kolju\u00a76.
noPermissionSkull=\u00a74Sul ei ole luba muuta seda koljut.
teleportInvalidLocation=Koordinaatide v\u00e4\u00e4rtus ei saa olla \u00fcle 30000000
invalidSkull=\u00a74Palun hoia k\u00e4es m\u00e4ngija koljut.
weatherInvalidWorld=Maailma nimega {0} ei leitud\!
gameModeInvalid=\u00a74Sa pead m\u00e4\u00e4rama kehtiva m\u00e4ngija/re\u017eiimi.
mailTooLong=\u00a74Kiri on liiga pikk. P\u00fc\u00fcdke hoida kirja alla 1000 t\u00e4hem\u00e4rgi.
mailDelay=Saatsid liiga palju kirju viimase minuti jooskul. Maksimaalne kirjade saatmise arv\: {0}
seenAccounts=\u00a76M\u00e4ngija on tuntud ka kui\:\u00a7c {0}
unableToSpawnItem=\u00a74Ei saa tekitada \u00a7c{0}\u00a74, see ei ole tekitatav ese.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

View File

@@ -11,12 +11,12 @@ alertBroke=rikkoi\:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} sijainnissa\: {3}
alertPlaced=laittoi\:
alertUsed=k\u00e4ytti\:
antiBuildBreak=\u00a74You are not permitted to break\u00a7c {0} \u00a74blocks here.
antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74.
antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74.
antiBuildInteract=\u00a74You are not permitted to interact with\u00a7c {0}\u00a74.
antiBuildPlace=\u00a74You are not permitted to place\u00a7c {0} \u00a74here.
antiBuildUse=\u00a74You are not permitted to use\u00a7c {0}\u00a74.
antiBuildBreak=\u00a74Sinulla ei ole oikeuksia rikkoa\u00a7c {0} \u00a74palikoita t\u00e4\u00e4ll\u00e4.
antiBuildCraft=\u00a74Sinulla ei ole oikeuksia tehd\u00e4\u00a7c {0}\u00a74.
antiBuildDrop=\u00a74Sinulla ei ole oikeuksia tiputtaa\u00a7c {0}\u00a74.
antiBuildInteract=\u00a74Sin\u00e4 et saa olla tekemisiss\u00e4\u00a7c {0}\u00a74kanssa.
antiBuildPlace=\u00a74Sinulla ei ole oikeuksia laittaa\u00a7c {0} \u00a74t\u00e4h\u00e4n.
antiBuildUse=\u00a74Sinulla ei ole oikeuksia k\u00e4ytt\u00e4\u00e4\u00a7c {0}\u00a74.
autoAfkKickReason=Sinut on potkittu, koska olit tekem\u00e4tt\u00e4 mit\u00e4\u00e4n {0} minuuttia.
backAfterDeath=\u00a77K\u00e4yt\u00e4 /back komentoa p\u00e4\u00e4st\u00e4ksesi takaisin sijaintiin, jossa kuolit.
backUsageMsg=\u00a77Palautetaan \u00e4skeiseen sijaintiin.
@@ -24,34 +24,34 @@ backupDisabled=Ulkoista varmuuskopio koodia ei ole konfiguroitu.
backupFinished=Varmuuskopiointi suoritettu
backupStarted=Varmuuskopiointi aloitettu
balance=\u00a77Rahatilanne\: {0}
balanceOther=\u00a7aBalance of {0}\u00a7a\:\u00a7c {1}
balanceOther=\u00a7aSaldo {0}\u00a7a\:\u00a7c {1}
balanceTop=\u00a77Top rahatilanteet ({0})
banExempt=\u00a7cEt voi bannia pelaajaa.
banFormat=\u00a74Banned\:\n\u00a7r{0}
bed=\u00a7obed\u00a7r
bedMissing=\u00a74Your bed is either unset, missing or blocked.
bedNull=\u00a7mbed\u00a7r
bedSet=\u00a76Bed spawn set\!
banFormat=\u00a74Porttikiellot\:\n\u00a7r{0}
bed=\u00a7os\u00e4nky\u00a7r
bedMissing=\u00a74S\u00e4nkysi puuttui, se on kadoksissa tai tukittu.
bedNull=\u00a7ms\u00e4nky\u00a7r
bedSet=S\u00e4nky spawni asetettu\!
bigTreeFailure=\u00a7cIson puun luominen ep\u00e4onnistui. Yrit\u00e4 uudelleen nurmikolla tai mullalla.
bigTreeSuccess=\u00a77Iso puu luotu.
blockList=Essentials siirsi seuraavat komennot muihin plugineihin\:
bookAuthorSet=\u00a76Author of the book set to {0}.
bookLocked=\u00a76This book is now locked.
bookTitleSet=\u00a76Title of the book set to {0}.
bookAuthorSet=\u00a76Kirjan tekij\u00e4 on nyt {0}.
bookLocked=\u00a76T\u00e4m\u00e4 kirja on nyt lukittu.
bookTitleSet=\u00a76Kirjan titteli on nyt {0}.
broadcast=[\u00a7cIlmoitus\u00a7f]\u00a7a {0}
buildAlert=\u00a7cSinulla ei ole oikeuksia rakentaa
bukkitFormatChanged=Bukkitin versiomuoto muuttui. Versiota ei ole tarkistettu.
burnMsg=\u00a77Asetit pelaajan {0} tuleen {1} sekunniksi.
canTalkAgain=\u00a77Voit taas puhua
cannotStackMob=\u00a74You do not have permission to stack multiple mobs.
cannotStackMob=\u00a74Sinulla ei ole oikeutta pinota montaa mobia.
cantFindGeoIpDB=Ei l\u00f6ydetty GeoIP tietokantaa\!
cantReadGeoIpDB=Ei pystytty lukemaan GeoIP tietokantaa\!
cantSpawnItem=\u00a7cSinulla ei ole oikeutta luoda tavaraa {0}
chatTypeAdmin=[A]
chatTypeLocal=[L]
chatTypeSpy=[Spy]
cleaned=Userfiles Cleaned.
cleaning=Cleaning userfiles.
chatTypeSpy=[Vakoilla]
cleaned=K\u00e4ytt\u00e4j\u00e4tiedot on poistettu.
cleaning=Poistetaan k\u00e4ytt\u00e4j\u00e4tietoja.
commandFailed=Komento {0} ep\u00e4onnistui\:
commandHelpFailedForPlugin=Virhe haettaessa apua komennoista\: {0}
commandNotLoaded=\u00a7cKomento {0} on v\u00e4\u00e4rin ladattu.
@@ -76,9 +76,9 @@ deleteHome=\u00a77Koti {0} on poistettu.
deleteJail=\u00a77Vankila {0} on poistettu.
deleteWarp=\u00a77Warp {0} on poistettu.
deniedAccessCommand={0} p\u00e4\u00e4sy komentoon ev\u00e4ttiin.
denyBookEdit=\u00a74You cannot unlock this book.
denyBookEdit=Et voi avata t\u00e4t\u00e4 kirjaa.
denyChangeAuthor=\u00a74You cannot change the author of this book
denyChangeTitle=\u00a74You cannot change the title of this book.
denyChangeTitle=\u00a74Et voi vaihtaa t\u00e4m\u00e4n kirjan titteli\u00e4.
depth=\u00a77Olet merenpinnan tasolla.
depthAboveSea=\u00a77Olet {0} palikkaa meritason yl\u00e4puolella.
depthBelowSea=\u00a77Olet {0} palikkaa meritason alapuolella.
@@ -86,13 +86,13 @@ destinationNotSet=Sijaintia ei ole m\u00e4\u00e4ritetty
disableUnlimited=\u00a77Poistettu k\u00e4yt\u00f6st\u00e4 loputon laittaminen tavaralta "{0}", pelaajalta {1}.
disabled=poissa k\u00e4yt\u00f6st\u00e4
disabledToSpawnMob=T\u00e4m\u00e4n mobin luominen on poistettu k\u00e4yt\u00f6st\u00e4 config tiedostossa.
distance=\u00a76Distance\: {0}
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)
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=\u00a7eYou may now edit the contents of this book.
enableUnlimited=\u00a77Annetaan loputon m\u00e4\u00e4r\u00e4 tavaraa "{0}" pelaajalle {1}.
editBookContents=\u00a7eVoit nyt muokata t\u00e4m\u00e4n kirjan sis\u00e4lt\u00f6\u00e4.
enableUnlimited=\u00a76Giving unlimited amount of\u00a7c {0} \u00a76to \u00a7c{1}\u00a76.
enabled=k\u00e4yt\u00f6ss\u00e4
enchantmentApplied=\u00a77Parannus "{0}" on lis\u00e4tty tavaraan k\u00e4dess\u00e4si.
enchantmentNotFound=\u00a7cParannusta ei l\u00f6ydetty
@@ -103,7 +103,7 @@ errorCallingCommand=Virhe kutsuttaessa komentoa /{0}
errorWithMessage=\u00a7cVirhe\: {0}
essentialsHelp1=Tiedosto on viallinen ja Essentials ei voi avata sit\u00e4. Essentials on nyt poistettu k\u00e4yt\u00f6st\u00e4. Jos et voi korjata tiedostoa itse, mene osoitteeseen http\://tiny.cc/EssentialsChat
essentialsHelp2=Tiedosto on viallinen ja Essentials ei voi avata sit\u00e4. Essentials on nyt poistettu k\u00e4yt\u00f6st\u00e4. Jos et voi korjata tiedostoa itse, kirjoita /essentialshelp peliss\u00e4 tai mene osoitteeseen http\://tiny.cc/EssentialsChat
essentialsReload=\u00a77Essentials ladattu uudelleen. Versio\: {0}
essentialsReload=\u00a76Essentials reloaded\u00a7c {0}.
exp=Pelaajalla \u00a7c{0} \u00a77on\u00a7c {1} \u00a77expi\u00e4 (taso\u00a7c {2}\u00a77) ja tarvitsee\u00a7c {3} \u00a77lis\u00e4\u00e4 expi\u00e4 seuravaan tasoon.
expSet=Pelaajalla\u00a7c{0} \u00a77on nyt\u00a7c {1} \u00a77expi\u00e4.
extinguish=\u00a77Sammutit itsesi.
@@ -113,16 +113,16 @@ failedToCreateConfig=Virhe luotaessa tiedostoa config {0}
failedToWriteConfig=Virhe muokattaessa tiedostoa config {0}
false=v\u00e4\u00e4r\u00e4
feed=\u00a77Ruokahalusi on tyydytetty.
feedOther=\u00a77Tyydytit ruokahalun pelaajalta {0}.
feedOther=\u00a76You satiated the appetite of \u00a7c{0}\u00a76.
fileRenameError={0} uudelleen nime\u00e4minen ep\u00e4onnistui
fireworkColor=\u00a74Invalid firework charge parameters inserted, must set a color first.
fireworkEffectsCleared=\u00a76Removed all effects from held stack.
fireworkSyntax=\u00a76Firework parameters\:\u00a7c color\:<color> [fade\:<color>] [shape\:<shape>] [effect\:<effect>]\n\u00a76To use multiple colors/effects, seperate values with commas\: \u00a7cred,blue,pink\n\u00a76Shapes\:\u00a7c star, ball, large, creeper, burst \u00a76Effects\:\u00a7c trail, twinkle.
fireworkColor=\u00a74V\u00e4\u00e4r\u00e4nlaiset ilotulitteen parametrit, v\u00e4ri t\u00e4ytyy valita ensin.
fireworkEffectsCleared=\u00a76Kaikki vaikutukset poistettu k\u00e4dess\u00e4si olevasta tavarasta.
fireworkSyntax=\u00a76Ilotulitteen parametrit\:\u00a7c v\u00e4ri\:<v\u00e4ri> [h\u00e4ivytys\: <v\u00e4ri>] [muoto\:<muoto>] [effekti\:<effekti>]\n\u00a76K\u00e4ytt\u00e4\u00e4ksesi montaa v\u00e4ri\u00e4/effekti\u00e4, erota arvot pilkulla\: \u00a7cred,blue,pink\n\u00a76Muotoja\:\u00a7c star, ball, large, creeper, burst \u00a76Effektit<shape>\:\u00a7c trail, twinkle.
flyMode=\u00a77Lento {0} pelaajalla {1}.
flying=lent\u00e4v\u00e4
foreverAlone=\u00a7cSinulla ei ole ket\u00e4\u00e4n kenelle vastata.
fullStack=\u00a74You already have a full stack.
gameMode=\u00a77Asetit pelimuodon "{0}" pelaajalle {1}.
fullStack=\u00a74Sinulla on jo t\u00e4ysi pino.
gameMode=\u00a76Set game mode\u00a7c {0} \u00a76for \u00a7c{1}\u00a76.
gcWorld=\u00a76{0} "\u00a7c{1}\u00a76"\: \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities, \u00a7c{4}\u00a76 tiles.
gcfree=Vapaa muisti\: {0} MB
gcmax=Maksimi muisti\: {0} MB
@@ -130,20 +130,20 @@ gctotal=Sallittu muisti\: {0} MB
geoIpUrlEmpty=GeoIP latausosoite on tyhj\u00e4.
geoIpUrlInvalid=GeoIP latausosoite on viallinen.
geoipJoinFormat=\u00a76Pelaaja \u00a7c{0} \u00a76tulee maasta \u00a7c{1}\u00a76.
giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76.
godDisabledFor=poistettu pelaajalta {0}
giveSpawn=\u00a76Annetaan\u00a7c {0} \u00a7c {1} \u00a76pelaajalle\u00a7c {2}\u00a76.
godDisabledFor=\u00a7cdisabled\u00a76 for\u00a7c {0}
godEnabledFor=laitettu pelaajalle {0}
godMode=\u00a77God muoto {0}.
groupDoesNotExist=\u00a74There''s no one online in this group\!
groupNumber=\u00a7c{0}\u00a7f online, for the full list\:\u00a7c /{1} {2}
groupDoesNotExist=\u00a74Kukaan ei ole paikalla t\u00e4st\u00e4 ryhm\u00e4st\u00e4\!
groupNumber=\u00a7c{0}\u00a7f paikalla, n\u00e4hd\u00e4ksesi kokolistan\:\u00a7c /{1} {2}
hatArmor=\u00a7cVirhe, et voi k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 tavaraa hattuna\!
hatEmpty=\u00a7cYou are not wearing a hat.
hatFail=\u00a7cSinulla tulee olla jotain k\u00e4dess\u00e4si, mit\u00e4 k\u00e4ytt\u00e4\u00e4 hattuna.
hatPlaced=\u00a7eNauti uudesta hatustasi\!
hatRemoved=\u00a76Your hat has been removed.
hatRemoved=\u00a76Hattusi on poistettu.
haveBeenReleased=\u00a77Sinut on vapautettu
heal=\u00a77Sinut on parannettu.
healDead=\u00a74You cannot heal someone who is dead\!
healDead=\u00a74Et voi parantaa pelaajaa, joka on kuollut\!
healOther=\u00a77Paransit pelaajan {0}.
helpConsole=Katsoaksesi apua konsolista, kirjoita ?.
helpFrom=\u00a77Komennot {0}\:
@@ -151,24 +151,24 @@ helpLine=\u00a76/{0}\u00a7r\: {1}
helpMatching=\u00a77Komennot "{0}"\:
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}\:\u00a7f {1}
helpPlugin=\u00a74{0}\u00a7f\: Plugin apu\: /help {1}
holdBook=\u00a74You are not holding a writable book.
holdFirework=\u00a74You must be holding a firework to add effects.
holdPotion=\u00a74You must be holding a potion to apply effects to it.
holdBook=\u00a74Et pid\u00e4 k\u00e4dess\u00e4si kirjoitettavaa kirjaa.
holdFirework=\u00a74Sinul\u00f6a t\u00e4ytyy olla k\u00e4dess\u00e4si ilotulite lis\u00e4t\u00e4ksesi effektej\u00e4.
holdPotion=\u00a74Sinul\u00f6a t\u00e4ytyy olla taikajuoma k\u00e4dess\u00e4si lis\u00e4t\u00e4ksesi siihen effektej\u00e4.
holeInFloor=Reik\u00e4 lattiassa
homeSet=\u00a77Koti asetettu.
homes=Kodit\: {0}
hour=tunti
hours=tunnit
ignoredList=\u00a76Ignored\:\u00a7r {0}
ignoredList=\u00a76Huomiotta\:\u00a7r {0}
ignorePlayer=J\u00e4tit huomiotta pelaajan {0}.
illegalDate=Laiton p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4n muoto.
infoChapter=\u00a76Select chapter\:
infoChapterPages=\u00a7e ---- \u00a76{0} \u00a7e--\u00a76 Page \u00a7c{1}\u00a76 of \u00a7c{2} \u00a7e----
infoChapter=\u00a76Valitse luku\:
infoChapterPages=\u00a7e ---- \u00a76{0} \u00a7e--\u00a76 Sivu \u00a7c{1}\u00a76 kirjasta \u00a7c{2} \u00a7e----
infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Sivu \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
infoUnknownChapter=\u00a74Unknown chapter.
infoUnknownChapter=\u00a74Tuntematon luku.
insufficientFunds=\u00a74Insufficient funds available.
invalidCharge=\u00a7cMit\u00e4t\u00f6n m\u00e4\u00e4r\u00e4ys.
invalidFireworkFormat=\u00a76The option \u00a74{0} \u00a76is not a valid value for \u00a74{1}\u00a76.
invalidFireworkFormat=\u00a74The option \u00a7c{0} \u00a74is not a valid value for \u00a7c{1}\u00a74.
invalidHome=Kotia {0} ei ole olemassa
invalidHomeName=\u00a74Invalid home name\!
invalidMob=\u00a74Invalid mob type.
@@ -203,18 +203,18 @@ kickDefault=Potkittu palvelimelta
kickExempt=\u00a7cEt voi potkia h\u00e4nt\u00e4.
kickedAll=\u00a7cPotkittu kaikki pelaajat palvelimelta
kill=\u00a77Tappoi {0}.
killExempt=\u00a74You can not kill {0}
killExempt=\u00a74You cannot kill \u00a7c{0}\u00a74.
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitError2=\u00a74That kit is improperly defined. Contact an administrator.
kitError=\u00a7cEi ole sopivia pakkauksia.
kitGiveTo=\u00a76Giving kit\u00a7c {0}\u00a76 to {1}\u00a7.
kitGiveTo=\u00a76Giving kit\u00a7c {0}\u00a76 to \u00a7c{1}\u00a76.
kitInvFull=\u00a7cSinun reppusi on t\u00e4ynn\u00e4, laitetaan tavarat maahan
kitNotFound=\u00a74That kit does not exist.
kitNotFound=Tuota Kitti\u00e4 ei ole olemassa.
kitOnce=\u00a74You can''t use that kit again.
kitReceive=\u00a76Received kit\u00a7c {0}\u00a76.
kitTimed=\u00a7cAika, jota ennen et voi k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 pakkausta uudelleen\: {0}.
kits=\u00a77Pakkaukset\: {0}
leatherSyntax=\u00a76Leather Color Syntax\: color\:<red>,<green>,<blue> eg\: color\:255,0,0.
leatherSyntax=\u00a76Leather color syntax\: color\:<red>,<green>,<blue> eg\: color\:255,0,0.
lightningSmited=\u00a77Sinut on salamoitu
lightningUse=\u00a77Salamoidaan {0}
listAfkTag=\u00a77[AFK]\u00a7f
@@ -224,10 +224,10 @@ listGroupTag=\u00a76{0}\u00a7r\: \u00a7r
listHiddenTag=\u00a77[HIDDEN]\u00a7f
loadWarpError=Virhe ladattaessa warppia {0}
localFormat=[L]<{0}> {1}
mailClear=\u00a7cPoistaaksesi viestisi, kirjoita /mail clear
mailClear=\u00a76To mark your mail as read, type\u00a7c /mail clear\u00a76.
mailCleared=\u00a77Viestit poistettu\!
mailSent=\u00a77Viesti l\u00e4hetetty\!
markMailAsRead=\u00a7cMerkitse viestit luetuiksi, kirjoita /mail clear
markMailAsRead=\u00a76To mark your mail as read, type\u00a7c /mail clear\u00a76.
markedAsAway=\u00a77Sinut on laitettu poissaolevaksi.
markedAsNotAway=\u00a77Sinua ei ole en\u00e4\u00e4 laitettu poissaolevaksi.
matchingIPAddress=\u00a76The following players previously logged in from that IP address\:
@@ -236,7 +236,7 @@ mayNotJail=\u00a7cEt voi laittaa tuota pelaajaa vankilaan
me=min\u00e4
minute=minuutti
minutes=minuuttia
missingItems=Sinulla ei ole {0}kpl {1}.
missingItems=\u00a74You do not have \u00a7c{0}x {1}\u00a74.
mobSpawnError=Virhe vaihdettaessa mob-luojan tyyppi\u00e4.
mobSpawnLimit=Mobien m\u00e4\u00e4r\u00e4 rajoitettu palvelimen maksimim\u00e4\u00e4r\u00e4\u00e4n
mobSpawnTarget=Kohteen pit\u00e4\u00e4 olla mob-luoja palikka.
@@ -246,13 +246,13 @@ moneySentTo=\u00a7a{0} on l\u00e4hetetty pelaajalle {1}
month=kuukausi
months=kuukaudet
moreThanZero=M\u00e4\u00e4r\u00e4n pit\u00e4\u00e4 olla enemm\u00e4n kuin 0.
moveSpeed=\u00a76Set {0} speed to\u00a7c {1} \u00a76for {2}\u00a76.
msgFormat=\u00a76[{0}\u00a76 -> {1}\u00a76] \u00a7r{2}
moveSpeed=\u00a76Set {0} speed to\u00a7c {1} \u00a76for \u00a7c{2}\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
multipleCharges=\u00a74You cannot apply more than one charge to this firework.
multiplePotionEffects=\u00a74You cannot apply more than one effect to this potion.
muteExempt=\u00a7cEt voi hiljent\u00e4\u00e4 tuota pelaajaa.
muteNotify=\u00a7c{0} \u00a76has muted \u00a7c{1}\u00a76.
mutedPlayer=\u00a76Player\u00a7c {0} \u00a76muted.
muteNotify=\u00a7c {0} \u00a76Mykisti Pelaaja \u00a7c {1} \u00a76.
mutedPlayer=Pelaaja {0} voi taas puhua.
mutedPlayerFor=\u00a76Player\u00a7c {0} \u00a76muted for\u00a7c {1}\u00a76.
mutedUserSpeaks={0} yritti puhua, mutta oli hiljennetty.
nearbyPlayers=Pelaajat l\u00e4hell\u00e4\: {0}
@@ -262,12 +262,12 @@ nickDisplayName=\u00a77Sinun tulee ottaa k\u00e4ytt\u00f6\u00f6n change-displayn
nickInUse=\u00a7cSe nimi on jo k\u00e4yt\u00f6ss\u00e4.
nickNamesAlpha=\u00a7cLempinimen pit\u00e4\u00e4 olla aakkosista.
nickNoMore=\u00a77Sinulla ei ole en\u00e4\u00e4 lempinime\u00e4.
nickSet=\u00a77Lempinimesi on nyt \u00a7c{0}
nickTooLong=\u00a74That nickname is too long.
nickSet=\u00a77Lempinimesi on nyt \u00a7c{0}.
nickTooLong=\u00a74Tuo lempinimi on liian pitk\u00e4.
noAccessCommand=\u00a7cSinulla ei ole oikeutta tuohon komentoon.
noAccessPermission=\u00a7cSinulla ei ole oikeutta tuohon {0}.
noAccessPermission=\u00a74Sinulla ei ole oikeutta Tuohon \u00a7c {0} \u00a74.
noBreakBedrock=Sinulla ei ole lupaa tuhota bedrock-palikoita.
noDestroyPermission=\u00a7cSinulla ei ole lupaa tuhota sit\u00e4 {0}.
noDestroyPermission=\u00a74You do not have permission to destroy that \u00a7c{0}\u00a74.
noDurability=\u00a7cT\u00e4ll\u00e4 tavaralla ei ole kestoa.
noGodWorldWarning=\u00a7cVaroitus\! God muoto ei ole k\u00e4yt\u00f6ss\u00e4 t\u00e4ss\u00e4 maailmassa.
noHelpFound=\u00a7cEi komentoja.
@@ -300,8 +300,8 @@ now=nyt
nuke=Antaa kuoleman sateen kohdata heid\u00e4t
numberRequired=Numero menee tuohon, h\u00f6lm\u00f6.
onlyDayNight=/time tukee vain day/night.
onlyPlayerSkulls=\u00a74You can only set the owner of player skulls (397\:3).
onlyPlayers=Vain peliss\u00e4 olevat pelaajat voivat k\u00e4ytt\u00e4\u00e4 {0}.
onlyPlayerSkulls=\u00a74You can only set the owner of player skulls (\u00a7c397\:3\u00a74).
onlyPlayers=\u00a74Only in-game players can use \u00a7c{0}\u00a74.
onlySunStorm=/weather tukee vain sun/storm.
orderBalances=J\u00e4rjestet\u00e4\u00e4n rahatilanteita {0}, odota...
oversizedTempban=\u00a74You may not ban a player for this period of time.
@@ -314,16 +314,16 @@ pTimeReset=Pelaajan aika on resetoitu\: \u00a7e{0}
pTimeSet=Pelaajan aika on asetettu \u00a73{0}\u00a7f koska\: \u00a7e{1}
pTimeSetFixed=Pelaajan aika on korjattu \u00a73{0}\u00a7f koska\: \u00a7e{1}
pWeatherCurrent=\u00a7c{0}\u00a76''s weather is\u00a7c {1}\u00a76.
pWeatherInvalidAlias=\u00a74Invalid weather type
pWeatherInvalidAlias=\u00a74Tota s\u00e4\u00e4n tyyppi\u00e4 ei ole olemassa
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}.
pendingTeleportCancelled=\u00a7cOdottava teleporttipyynt\u00f6 peruttu.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1}\u00a76.
playerBanned=\u00a76Player\u00a7c {0} \u00a76banned\u00a7c {1} \u00a76for {2}.
playerInJail=\u00a7cPelaaja on jo vankilassa {0}.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanned=\u00a76Player\u00a7c {0} \u00a76banned\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerInJail=\u00a74Player is already in jail\u00a7c {0}\u00a74.
playerJailed=\u00a77Pelaaja {0} laitettu vankilaan.
playerJailedFor=\u00a77Pelaaja {0} laitettu vankilaan, koska {1}.
playerKicked=\u00a7cPelaaja {0} potki pelaajan {1} koska {2}
@@ -332,7 +332,7 @@ playerMutedFor=\u00a77Sinut on hiljennetty, koska {0}
playerNeverOnServer=\u00a7cPelaaja {0} ei ole koskaan ollut t\u00e4ll\u00e4 palvelimella.
playerNotFound=\u00a7cPelaajaa ei l\u00f6ydetty.
playerUnbanIpAddress=\u00a76Player\u00a7c {0} \u00a76unbanned IP\: {1}.
playerUnbanned=\u00a76Player\u00a7c {0} \u00a76unbanned\u00a7c {1}.
playerUnbanned=\u00a76Player\u00a7c {0} \u00a76Poisti pelaajan \u00a7c {1} karkoituksen.
playerUnmuted=\u00a77Sin\u00e4 voit taas puhua
pong=Pong\!
posPitch=\u00a76Pitch\: {0} (Head angle)
@@ -340,28 +340,28 @@ posX=\u00a76X\: {0} (+East <-> -West)
posY=\u00a76Y\: {0} (+Up <-> -Down)
posYaw=\u00a76Yaw\: {0} (Rotation)
posZ=\u00a76Z\: {0} (+South <-> -North)
possibleWorlds=\u00a77Mahdollisia maailmoja on numerot v\u00e4lilt\u00e4 0 - {0}.
possibleWorlds=\u00a76Possible worlds are the numbers \u00a7c0\u00a76 through \u00a7c{0}\u00a76.
potions=\u00a76Potions\:\u00a7r {0}\u00a76.
powerToolAir=Komentoa ei voi liitt\u00e4\u00e4 k\u00e4teen.
powerToolAlreadySet=Komento \u00a7c{0}\u00a7f on liitetty kohteeseen {1}.
powerToolAlreadySet=\u00a74Command \u00a7c{0}\u00a74 is already assigned to \u00a7c{1}\u00a74.
powerToolAttach=\u00a7c{0}\u00a7f komento liitetty kohteeseen {1}.
powerToolClearAll=Kaikki voimaty\u00f6kalun komennot on poistettu.
powerToolList={1} omistaa seuraavat komennot\: \u00a7c{0}\u00a7f.
powerToolListEmpty={0} ei ole komentoja liitetty.
powerToolNoSuchCommandAssigned=Komentoa \u00a7c{0}\u00a7f ei ole liitetty kohteeseen {1}.
powerToolRemove=Komento \u00a7c{0}\u00a7f poistettu kohteesta {1}.
powerToolRemoveAll=Kaikki komennot poistettu kohteesta {0}.
powerToolNoSuchCommandAssigned=\u00a74Command \u00a7c{0}\u00a74 has not been assigned to \u00a7c{1}\u00a74.
powerToolRemove=\u00a76Command \u00a7c{0}\u00a76 removed from \u00a7c{1}\u00a76.
powerToolRemoveAll=\u00a76All commands removed from \u00a7c{0}\u00a76.
powerToolsDisabled=Kaikki voimaty\u00f6kalut on poistettu k\u00e4yt\u00f6st\u00e4.
powerToolsEnabled=Kaikki voimaty\u00f6alut on otettu k\u00e4ytt\u00f6\u00f6n.
questionFormat=\u00a77[Question]\u00a7f {0}
readNextPage=Kirjoita /{0} {1} lukeaksesi seuraavan sivun
recipe=\u00a76Recipe for \u00a7c{0}\u00a76 ({1} of {2})
recipe=\u00a76Recipe for \u00a7c{0}\u00a76 (\u00a7c{1}\u00a76 of \u00a7c{2}\u00a76)
recipeBadIndex=There is no recipe by that number.
recipeFurnace=\u00a76Smelt \u00a7c{0}
recipeGrid=\u00a7{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\ \u00a7{0}X \u00a76is \u00a7c{1}
recipeFurnace=\u00a76Smelt\: \u00a7c{0}\u00a76.
recipeGrid=\u00a7c{0}X \u00a76| \u00a7{1}X \u00a76| \u00a7{2}X
recipeGridItem=\u00a7c{0}X \u00a76is \u00a7c{1}
recipeMore=\u00a76Type /{0} \u00a7c{1}\u00a76 <number> to see other recipes for \u00a7c{2}\u00a76.
recipeNone=No recipes exist for {0}
recipeNone=No recipes exist for {0}.
recipeNothing=nothing
recipeShapeless=\u00a76Combine \u00a7c{0}
recipeWhere=\u00a76Where\: {0}
@@ -370,7 +370,7 @@ repair=Onnistuneesti korjasit ty\u00f6kalun\: \u00a7e{0}.
repairAlreadyFixed=\u00a77T\u00e4m\u00e4 tavara ei kaipaa korjaamista.
repairEnchanted=\u00a77Sinulla ei ole lupaa korjata kehitettyj\u00e4 tavaroita.
repairInvalidType=\u00a7cT\u00e4t\u00e4 tavaraa ei voi korjata.
repairNone=\u00a74There were no items that needed repairing.
repairNone=Ei ollut tavaroita, jotka olivat korjauksen tarpeessa.
requestAccepted=\u00a77Teleporttaus pyynt\u00f6 hyv\u00e4ksytty.
requestAcceptedFrom=\u00a77{0} hyv\u00e4ksyi sinun teleportti pyynn\u00f6n.
requestDenied=\u00a77Teleporttaus pyynt\u00f6 kielletty.
@@ -378,19 +378,19 @@ requestDeniedFrom=\u00a77{0} kielt\u00e4ytyi sinun teleportti pyynn\u00f6st\u00e
requestSent=\u00a77Pyynt\u00f6 l\u00e4hetetty pelaajalle {0}\u00a77.
requestTimedOut=\u00a7cTeleportti pyynt\u00f6 aikakatkaistiin
requiredBukkit=* \! * Tarvitset v\u00e4hint\u00e4\u00e4n {0} version CraftBukkitista, lataa se osoitteesta http\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a76Balance has been reset to \u00a7a{0} \u00a76for all online players.
resetBalAll=\u00a76Balance has been reset to \u00a7a{0} \u00a76for all players.
returnPlayerToJailError=Virhe laitettaessa pelaaja {0} takaisin vankilaan\: {1}
runningPlayerMatch=\u00a76Running search for players matching ''\u00a7c{0}\u00a76'' (this could take a little while)
resetBal=\u00a76Balance has been reset to \u00a7c{0} \u00a76for all online players.
resetBalAll=\u00a76Balance has been reset to \u00a7c{0} \u00a76for all players.
returnPlayerToJailError=\u00a74Error occurred when trying to return player\u00a7c {0} \u00a74to jail\: \u00a7c{1}\u00a74\!
runningPlayerMatch=\u00a76Running search for players matching ''\u00a7c{0}\u00a76'' (this could take a little while).
second=sekunti
seconds=sekuntia
seenOffline=Pelaaja {0} on ollut offline jo {1}
seenOnline=Pelaaja {0} on ollut online jo {1}
seenOffline=\u00a76Player\u00a7c {0} \u00a76has been \u00a74offline\u00a76 since \u00a7c{1}\u00a76.
seenOnline=\u00a76Player\u00a7c {0} \u00a76has been \u00a7aonline\u00a76 since \u00a7c{1}\u00a76.
serverFull=Palvelin on t\u00e4ynn\u00e4
serverTotal=Palvelimen kokonaism\u00e4\u00e4r\u00e4m\u00e4\u00e4r\u00e4\: {0}
setBal=\u00a7aYour balance was set to {0}.
setBal=\u00a7aSinun rahatilanne on asetettu {0}.
setBalOthers=\u00a7aYou set {0}\u00a7a''s balance to {1}.
setSpawner=Vaihdettu mob-luojan tyyppi {0}
setSpawner=\u00a76Changed spawner type to\u00a7c {0}\u00a76.
sheepMalformedColor=Viallinen v\u00e4ri.
shoutFormat=\u00a77[Huuto]\u00a7f {0}
signFormatFail=\u00a74[{0}]
@@ -399,12 +399,12 @@ signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74Sinulla ei ole lupaa laittaa kyltti\u00e4 t\u00e4h\u00e4n.
similarWarpExist=Tuon niminen warp on jo olemassa.
slimeMalformedSize=Viallinen koko.
socialSpy=\u00a76SocialSpy for {0}\u00a76\: {1}
socialSpy=\u00a76SocialSpy for \u00a7c{0}\u00a76\: \u00a7c{1}
soloMob=Tuo mob tykk\u00e4\u00e4 olevan yksin
spawnSet=\u00a77Spawn sijainti m\u00e4\u00e4ritetty ryhm\u00e4lle {0}.
spawned=luotu
sudoExempt=Et voi sudoa t\u00e4t\u00e4 pelaajaa
sudoRun=Pakotetaan {0} suorittamaan\: /{1} {2}
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a77Hyv\u00e4sti julma maailma...
suicideSuccess=\u00a77{0} riisti oman henkens\u00e4
survival=selviytyminen
@@ -420,18 +420,19 @@ teleportRequest=\u00a7c{0}\u00a7c on pyyt\u00e4nyt lupaa sinun luokse teleportta
teleportRequestTimeoutInfo=\u00a77T\u00e4m\u00e4 pyynt\u00f6 aikakatkaistaan {0} sekunnin kuluttua.
teleportTop=\u00a77Teleportataan p\u00e4\u00e4lle.
teleportationCommencing=\u00a77Teleportataan...
teleportationDisabled=\u00a77Teleporttaus poistettu k\u00e4yt\u00f6st\u00e4.
teleportationDisabledFor=\u00a76Teleportation disabled for {0}.
teleportationEnabled=\u00a77Teleportation otettu k\u00e4ytt\u00f6\u00f6n.
teleportationEnabledFor=\u00a76Teleportation enabled for {0}
teleportationDisabled=\u00a76Teleportation \u00a7cdisabled\u00a76.
teleportationDisabledFor=\u00a76Teleportation \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76.
teleportationEnabled=\u00a76Teleportation \u00a7cenabled\u00a76.
teleportationEnabledFor=\u00a76Teleportation \u00a7cenabled \u00a76for \u00a7c{0}\u00a76.
teleporting=\u00a77Teleportataan...
tempBanned=Olet v\u00e4liaikaisesti bannattu palvelimelta, koska {0}
teleportToPlayer=\u00a76Teleportataan \u00a7c {0} \u00a76.
tempBanned=\u00a7cYou have been temporarily banned for {0}\:\n\u00a7r{2}
tempbanExempt=\u00a77Et voi bannia tuota pelaajaa
thunder=Myrsky {0} maailmassasi
thunderDuration=Myrsky {0} maailmassasi {1} sekuntia.
timeBeforeHeal=Aika ennen seuraavaa parannusta\: {0}
timeBeforeTeleport=Aika ennen seuraavaa teleporttausta\: {0}
timeFormat=\u00a73{0}\u00a7f tai \u00a73{1}\u00a7f tai \u00a73{2}\u00a7f
timeFormat=\u00a7c{0}\u00a76 or \u00a7c{1}\u00a76 or \u00a7c{2}\u00a76
timeSetPermission=\u00a7cSinulla ei ole lupaa vaihtaa aikaa.
timeWorldCurrent=T\u00e4m\u00e4nhetkinen aika maailmassa {0} on \u00a73{1}
timeWorldSet=Aika vaihdettiin {0} maailmassa\: \u00a7c{1}
@@ -451,7 +452,7 @@ unignorePlayer=Otat taas huomioon pelaajan {0}.
unknownItemId=Tuntematon tavaran ID\: {0}
unknownItemInList=Tuntematon tavara {0} listassa {1}.
unknownItemName=Tuntematon tavaran nimi\: {0}
unlimitedItemPermission=\u00a7cEi lupaa loputtomalle tavaralle {0}.
unlimitedItemPermission=\u00a74No permission for unlimited item \u00a7c{0}\u00a74.
unlimitedItems=Loputtomat tavarat\:
unmutedPlayer=Pelaajat {0} voi taas puhua.
unvanishedReload=\u00a7cSinut on pakotettu taas n\u00e4kyv\u00e4ksi uudelleen latauksen vuoksi.
@@ -480,7 +481,7 @@ warpSet=\u00a77Warp {0} asetettu.
warpUsePermission=\u00a7cSinulla ei ole oikeutta k\u00e4ytt\u00e4\u00e4 tuota warppia.
warpingTo=\u00a77Sinut warpataan pian kohteeseen {0}.
warps=Warpit\: {0}
warpsCount=\u00a77Warppeja on {0} kpl. N\u00e4ytet\u00e4\u00e4n sivu {1} / {2}.
warpsCount=\u00a76There are\u00a7c {0} \u00a76warps. Showing page \u00a7c{1} \u00a76of \u00a7c{2}\u00a76.
weatherStorm=\u00a77Laitoit myrskyn maailmaan {0}
weatherStormFor=\u00a77Laitoit myrskyn maailmaan {0} {1} sekunniksi
weatherSun=\u00a77Laitoit auringon paistamaan maailmaan {0}
@@ -522,7 +523,7 @@ localNoOne=
totalSellableAll=\u00a7aThe total worth of all sellable items and blocks is \u00a7c{1}\u00a7a.
totalSellableBlocks=\u00a7aThe total worth of all sellable blocks is \u00a7c{1}\u00a7a.
radiusTooBig=\u00a74Radius is too big\! Maximum radius is {0}.
isIpBanned=\u00a76IP \u00a7c{0} \u00a76is banned.
isIpBanned=\u00a76IP \u00a7c {0} \u00a76On karkoitettu.
mobDataList=\u00a76Valid mob data\:\u00a7r {0}
vanish=\u00a76Vanish for {0}\u00a76\: {1}
noLocationFound=\u00a74No valid location found.
@@ -531,19 +532,27 @@ banExemptOffline=\u00a74You may not ban offline players.
tempbanExemptOffline=\u00a74You may not tempban offline players.
mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player.
ignoreExempt=\u00a74You may not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit.
maxMoney=\u00a74This transaction would exceed the balance limit for this account.
skullChanged=\u00a76Skull changed to \u00a7c{0}.\u00a76.
skullChanged=\u00a76Skull changed to \u00a7c{0}\u00a76.
alphaNames=\u00a74Player names can only contain letters, numbers and underscores.
givenSkull=\u00a76You have been given the Skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that Skull.
givenSkull=\u00a76You have been given the skull of \u00a7c{0}\u00a76.
noPermissionSkull=\u00a74You do not have permission to modify that skull.
teleportInvalidLocation=Value of coordinates cannot be over 30000000
invalidSkull=\u00a74Please hold a player Skull.
invalidSkull=\u00a74Please hold a player skull.
weatherInvalidWorld=World named {0} not found\!
gameModeInvalid=\u00a74You need to specify a valid player/mode.
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000
mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 characters.
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
seenAccounts=\u00a76Player has also been known as:\u00a7c {0}
seenAccounts=\u00a76Player has also been known as\:\u00a7c {0}
unableToSpawnItem=\u00a74Cannot spawn \u00a7c{0}\u00a74, this is not a spawnable item.
itemsConverted=\u00a76Converted all items into blocks.
itemsNotConverted=\u00a74You have no items that can be converted into blocks.
mailSentTo=\u00a7c{0}\u00a76 has been sent the following mail\:
mailMessage={0}
whoisTempBanned=\u00a76 - Ban expires:\u00a7r {0}
playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u00a76 for \u00a7c{2}\u00a76: \u00a7c{3}\u00a76.
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}

Some files were not shown because too many files have changed in this diff Show More