summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Essentials/src/com/earth2me/essentials/Essentials.java51
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java95
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java67
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java14
-rw-r--r--Essentials/src/com/earth2me/essentials/IEssentials.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/ISettings.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/Jails.java23
-rw-r--r--Essentials/src/com/earth2me/essentials/Kit.java12
-rw-r--r--Essentials/src/com/earth2me/essentials/Mob.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/OfflinePlayer.java13
-rw-r--r--Essentials/src/com/earth2me/essentials/Settings.java60
-rw-r--r--Essentials/src/com/earth2me/essentials/TNTExplodeListener.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/Trade.java18
-rw-r--r--Essentials/src/com/earth2me/essentials/User.java43
-rw-r--r--Essentials/src/com/earth2me/essentials/UserData.java29
-rw-r--r--Essentials/src/com/earth2me/essentials/Util.java20
-rw-r--r--Essentials/src/com/earth2me/essentials/Warps.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/api/Economy.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/api/IJails.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandantioch.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbalance.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbalancetop.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandban.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbreak.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandeco.java26
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandessentials.java39
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandgive.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandkit.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandkittycannon.java44
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandlightning.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandlist.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandnuke.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandseen.java25
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsell.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java22
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java29
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandspawner.java47
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java70
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsudo.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtempban.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtp.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpa.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpo.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandwarp.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandwhois.java9
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandworld.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandworth.java16
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/WarpNotFoundException.java16
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/FakeExplosion.java51
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/metrics/Metrics.java539
-rw-r--r--Essentials/src/com/earth2me/essentials/metrics/MetricsListener.java40
-rw-r--r--Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java196
-rw-r--r--Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java25
-rw-r--r--Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignDisposal.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignFree.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignKit.java9
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignTrade.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/textreader/HelpInput.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/textreader/TextInput.java2
-rw-r--r--Essentials/src/config.yml24
-rw-r--r--Essentials/src/info.txt6
-rw-r--r--Essentials/src/items.csv10
-rw-r--r--Essentials/src/messages.properties87
-rw-r--r--Essentials/src/messages_da.properties87
-rw-r--r--Essentials/src/messages_de.properties13
-rw-r--r--Essentials/src/messages_en.properties87
-rw-r--r--Essentials/src/messages_es.properties87
-rw-r--r--Essentials/src/messages_fr.properties87
-rw-r--r--Essentials/src/messages_nl.properties87
-rw-r--r--Essentials/src/plugin.yml11
-rw-r--r--Essentials/test/com/earth2me/essentials/FakeServer.java12
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java9
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java31
82 files changed, 1851 insertions, 635 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java
index f480d9e8f..684080f63 100644
--- a/Essentials/src/com/earth2me/essentials/Essentials.java
+++ b/Essentials/src/com/earth2me/essentials/Essentials.java
@@ -24,6 +24,9 @@ import com.earth2me.essentials.commands.EssentialsCommand;
import com.earth2me.essentials.commands.IEssentialsCommand;
import com.earth2me.essentials.commands.NoChargeException;
import com.earth2me.essentials.commands.NotEnoughArgumentsException;
+import com.earth2me.essentials.metrics.Metrics;
+import com.earth2me.essentials.metrics.MetricsListener;
+import com.earth2me.essentials.metrics.MetricsStarter;
import com.earth2me.essentials.perm.PermissionsHandler;
import com.earth2me.essentials.register.payment.Methods;
import com.earth2me.essentials.signs.SignBlockListener;
@@ -66,7 +69,7 @@ import org.yaml.snakeyaml.error.YAMLException;
public class Essentials extends JavaPlugin implements IEssentials
{
- public static final int BUKKIT_VERSION = 1988;
+ public static final int BUKKIT_VERSION = 2070;
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private transient ISettings settings;
private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this);
@@ -82,6 +85,7 @@ public class Essentials extends JavaPlugin implements IEssentials
private transient UserMap userMap;
private transient ExecuteTimer execTimer;
private transient I18n i18n;
+ private transient Metrics metrics;
@Override
public ISettings getSettings()
@@ -129,14 +133,16 @@ public class Essentials extends JavaPlugin implements IEssentials
LOGGER.log(Level.WARNING, _("versionMismatch", plugin.getDescription().getName()));
}
}
- final Matcher versionMatch = Pattern.compile("git-Bukkit-([0-9]+).([0-9]+).([0-9]+)-R[0-9]+-(?:[0-9]+-g[0-9a-f]+-)?b([0-9]+)jnks.*").matcher(getServer().getVersion());
+ final Matcher versionMatch = Pattern.compile("git-Bukkit-(?:(?:[0-9]+)\\.)+[0-9]+-R[\\.0-9]+-(?:[0-9]+-g[0-9a-f]+-)?b([0-9]+)jnks.*").matcher(getServer().getVersion());
if (versionMatch.matches())
{
- final int versionNumber = Integer.parseInt(versionMatch.group(4));
- if (versionNumber < BUKKIT_VERSION)
+ final int versionNumber = Integer.parseInt(versionMatch.group(1));
+ if (versionNumber < BUKKIT_VERSION && versionNumber > 100)
{
+ LOGGER.log(Level.SEVERE, "* ! * ! * ! * ! * ! * ! * ! * ! * ! *");
LOGGER.log(Level.SEVERE, _("notRecommendedBukkit"));
LOGGER.log(Level.SEVERE, _("requiredBukkit", Integer.toString(BUKKIT_VERSION)));
+ LOGGER.log(Level.SEVERE, "* ! * ! * ! * ! * ! * ! * ! * ! * ! *");
this.setEnabled(false);
return;
}
@@ -223,7 +229,7 @@ public class Essentials extends JavaPlugin implements IEssentials
final EssentialsEntityListener entityListener = new EssentialsEntityListener(this);
pm.registerEvents(entityListener, this);
-
+
final EssentialsWorldListener worldListener = new EssentialsWorldListener(this);
pm.registerEvents(worldListener, this);
@@ -237,6 +243,18 @@ public class Essentials extends JavaPlugin implements IEssentials
getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 100);
Economy.setEss(this);
execTimer.mark("RegListeners");
+
+ final MetricsStarter metricsStarter = new MetricsStarter(this);
+ if (metricsStarter.getStart() != null && metricsStarter.getStart() == true)
+ {
+ getScheduler().scheduleAsyncDelayedTask(this, metricsStarter, 1);
+ }
+ else if (metricsStarter.getStart() != null && metricsStarter.getStart() == false)
+ {
+ final MetricsListener metricsListener = new MetricsListener(this, metricsStarter);
+ pm.registerEvents(metricsListener, this);
+ }
+
final String timeroutput = execTimer.end();
if (getSettings().isDebug())
{
@@ -435,6 +453,16 @@ public class Essentials extends JavaPlugin implements IEssentials
return backup;
}
+ public Metrics getMetrics()
+ {
+ return metrics;
+ }
+
+ public void setMetrics(Metrics metrics)
+ {
+ this.metrics = metrics;
+ }
+
@Override
public User getUser(final Object base)
{
@@ -599,15 +627,16 @@ public class Essentials extends JavaPlugin implements IEssentials
{
return i18n;
}
-
- private static class EssentialsWorldListener implements Listener, Runnable {
+
+
+ private static class EssentialsWorldListener implements Listener, Runnable
+ {
private transient final IEssentials ess;
public EssentialsWorldListener(final IEssentials ess)
{
this.ess = ess;
}
-
@EventHandler(priority = EventPriority.LOW)
public void onWorldLoad(final WorldLoadEvent event)
@@ -616,7 +645,8 @@ public class Essentials extends JavaPlugin implements IEssentials
ess.getWarps().reloadConfig();
for (IConf iConf : ((Essentials)ess).confList)
{
- if (iConf instanceof IEssentialsModule) {
+ if (iConf instanceof IEssentialsModule)
+ {
iConf.reloadConfig();
}
}
@@ -629,7 +659,8 @@ public class Essentials extends JavaPlugin implements IEssentials
ess.getWarps().reloadConfig();
for (IConf iConf : ((Essentials)ess).confList)
{
- if (iConf instanceof IEssentialsModule) {
+ if (iConf instanceof IEssentialsModule)
+ {
iConf.reloadConfig();
}
}
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java
index 648bfcef5..17f0f1778 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java
@@ -17,13 +17,9 @@ public class EssentialsBlockListener implements Listener
this.ess = ess;
}
- @EventHandler(priority = EventPriority.LOWEST)
+ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event)
{
- if (event.isCancelled())
- {
- return;
- }
final User user = ess.getUser(event.getPlayer());
// Do not rely on getItemInHand();
// http://leaky.bukkit.org/issues/663
@@ -32,7 +28,7 @@ public class EssentialsBlockListener implements Listener
{
return;
}
- boolean unlimitedForUser = user.hasUnlimited(is);
+ final boolean unlimitedForUser = user.hasUnlimited(is);
if (unlimitedForUser && user.getGameMode() == GameMode.SURVIVAL)
{
ess.scheduleSyncDelayedTask(
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
index e4879186d..524edc16f 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
@@ -24,48 +24,47 @@ public class EssentialsEntityListener implements Listener
}
@EventHandler(priority = EventPriority.LOWEST)
- public void onEntityDamage(EntityDamageEvent event)
+ public void onEntityDamage(final EntityDamageByEntityEvent event)
{
- if (event instanceof EntityDamageByEntityEvent)
+ final Entity eAttack = event.getDamager();
+ final Entity eDefend = event.getEntity();
+ if (eDefend instanceof Player && eAttack instanceof Player)
{
- EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
- Entity eAttack = edEvent.getDamager();
- Entity eDefend = edEvent.getEntity();
- if (eDefend instanceof Player && eAttack instanceof Player)
+ final User defender = ess.getUser(eDefend);
+ final User attacker = ess.getUser(eAttack);
+ attacker.updateActivity(true);
+ final List<String> commandList = attacker.getPowertool(attacker.getItemInHand());
+ if (commandList != null && !commandList.isEmpty())
{
- User defender = ess.getUser(eDefend);
- User attacker = ess.getUser(eAttack);
- attacker.updateActivity(true);
- ItemStack is = attacker.getItemInHand();
- List<String> commandList = attacker.getPowertool(is);
- if (commandList != null && !commandList.isEmpty())
+ for (String command : commandList)
{
- for (String command : commandList)
+ if (command != null && !command.isEmpty())
{
-
- if (command != null && !command.isEmpty())
- {
- attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName()));
- event.setCancelled(true);
- return;
- }
+ attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName()));
+ event.setCancelled(true);
+ return;
}
}
}
- if (eDefend instanceof Animals && eAttack instanceof Player)
+ }
+ else if (eDefend instanceof Animals && eAttack instanceof Player)
+ {
+ final User player = ess.getUser(eAttack);
+ final ItemStack hand = player.getItemInHand();
+ if (hand != null && hand.getType() == Material.MILK_BUCKET)
{
- User player = ess.getUser(eAttack);
- ItemStack hand = player.getItemInHand();
- if (hand != null && hand.getType() == Material.MILK_BUCKET)
- {
- ((Animals)eDefend).setAge(-24000);
- hand.setType(Material.BUCKET);
- player.setItemInHand(hand);
- player.updateInventory();
- event.setCancelled(true);
- }
+ ((Animals)eDefend).setAge(-24000);
+ hand.setType(Material.BUCKET);
+ player.setItemInHand(hand);
+ player.updateInventory();
+ event.setCancelled(true);
}
}
+ }
+
+ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
+ public void onEntityDamage(final EntityDamageEvent event)
+ {
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
final Player player = (Player)event.getEntity();
@@ -75,8 +74,8 @@ public class EssentialsEntityListener implements Listener
}
}
- @EventHandler(priority = EventPriority.LOWEST)
- public void onEntityCombust(EntityCombustEvent event)
+ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
+ public void onEntityCombust(final EntityCombustEvent event)
{
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
@@ -85,26 +84,22 @@ public class EssentialsEntityListener implements Listener
}
@EventHandler(priority = EventPriority.LOWEST)
- public void onEntityDeath(final EntityDeathEvent event)
+ public void onPlayerDeathEvent(final PlayerDeathEvent event)
{
- if (event instanceof PlayerDeathEvent)
+ final User user = ess.getUser(event.getEntity());
+ if (user.isAuthorized("essentials.back.ondeath") && !ess.getSettings().isCommandDisabled("back"))
{
- final PlayerDeathEvent pdevent = (PlayerDeathEvent)event;
- final User user = ess.getUser(pdevent.getEntity());
- if (user.isAuthorized("essentials.back.ondeath") && !ess.getSettings().isCommandDisabled("back"))
- {
- user.setLastLocation();
- user.sendMessage(_("backAfterDeath"));
- }
- if (!ess.getSettings().areDeathMessagesEnabled())
- {
- pdevent.setDeathMessage("");
- }
+ user.setLastLocation();
+ user.sendMessage(_("backAfterDeath"));
+ }
+ if (!ess.getSettings().areDeathMessagesEnabled())
+ {
+ event.setDeathMessage("");
}
}
- @EventHandler(priority = EventPriority.LOWEST)
- public void onFoodLevelChange(FoodLevelChangeEvent event)
+ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
+ public void onFoodLevelChange(final FoodLevelChangeEvent event)
{
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
@@ -112,8 +107,8 @@ public class EssentialsEntityListener implements Listener
}
}
- @EventHandler(priority = EventPriority.LOWEST)
- public void onEntityRegainHealth(EntityRegainHealthEvent event)
+ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
+ public void onEntityRegainHealth(final EntityRegainHealthEvent event)
{
if (event.getRegainReason() == RegainReason.SATIATED && event.getEntity() instanceof Player
&& ess.getUser(event.getEntity()).isAfk() && ess.getSettings().getFreezeAfkPlayers())
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
index 9b964364b..c1bd9bbe0 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
@@ -75,13 +75,9 @@ public class EssentialsPlayerListener implements Listener
}
}
- @EventHandler(priority = EventPriority.HIGH)
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerMove(final PlayerMoveEvent event)
{
- if (event.isCancelled())
- {
- return;
- }
final User user = ess.getUser(event.getPlayer());
if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers())
@@ -182,10 +178,16 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerLogin(final PlayerLoginEvent event)
{
- if (event.getResult() != Result.ALLOWED && event.getResult() != Result.KICK_FULL && event.getResult() != Result.KICK_BANNED)
+ switch (event.getResult())
{
+ case ALLOWED:
+ case KICK_FULL:
+ case KICK_BANNED:
+ break;
+ default:
return;
}
+
User user = ess.getUser(event.getPlayer());
user.setNPC(false);
@@ -194,7 +196,7 @@ public class EssentialsPlayerListener implements Listener
user.checkMuteTimeout(currentTime);
user.checkJailTimeout(currentTime);
- if (banExpired == false && (user.isBanned() || event.getResult() == Result.KICK_BANNED))
+ if (!banExpired && (user.isBanned() || event.getResult() == Result.KICK_BANNED))
{
final String banReason = user.getBanReason();
event.disallow(Result.KICK_BANNED, banReason != null && !banReason.isEmpty() && !banReason.equalsIgnoreCase("ban") ? banReason : _("defaultBanReason"));
@@ -225,29 +227,20 @@ public class EssentialsPlayerListener implements Listener
}
}
- @EventHandler(priority = EventPriority.HIGH)
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerTeleport(final PlayerTeleportEvent event)
{
- if (event.isCancelled())
- {
- return;
- }
- final User user = ess.getUser(event.getPlayer());
//There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports.
if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && ess.getSettings().registerBackInListener())
{
+ final User user = ess.getUser(event.getPlayer());
user.setLastLocation();
}
- if (ess.getSettings().changeDisplayName())
- {
- user.setDisplayNick();
- }
- updateCompass(user);
}
- @EventHandler(priority = EventPriority.HIGH)
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerEggThrow(final PlayerEggThrowEvent event)
{
final User user = ess.getUser(event.getPlayer());
@@ -259,7 +252,7 @@ public class EssentialsPlayerListener implements Listener
}
}
- @EventHandler(priority = EventPriority.HIGH)
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event)
{
final User user = ess.getUser(event.getPlayer());
@@ -277,20 +270,9 @@ public class EssentialsPlayerListener implements Listener
}
}
- @EventHandler(priority = EventPriority.NORMAL)
- public void onPlayerAnimation(final PlayerAnimationEvent event)
- {
- final User user = ess.getUser(event.getPlayer());
- user.updateActivity(true);
- }
-
- @EventHandler(priority = EventPriority.MONITOR)
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event)
{
- if (event.isCancelled())
- {
- return;
- }
final User user = ess.getUser(event.getPlayer());
final String cmd = event.getMessage().toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH);
final List<String> commands = Arrays.asList("msg", "r", "mail", "m", "t", "emsg", "tell", "er", "reply", "ereply", "email");
@@ -298,7 +280,7 @@ public class EssentialsPlayerListener implements Listener
{
for (Player player : ess.getServer().getOnlinePlayers())
{
- User spyer = ess.getUser(player);
+ final User spyer = ess.getUser(player);
if (spyer.isSocialSpyEnabled() && !user.equals(spyer))
{
player.sendMessage(user.getDisplayName() + " : " + event.getMessage());
@@ -314,9 +296,15 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChangedWorld(final PlayerChangedWorldEvent event)
{
+ final User user = ess.getUser(event.getPlayer());
+ if (ess.getSettings().changeDisplayName())
+ {
+ user.setDisplayNick();
+ }
+ updateCompass(user);
+
if (ess.getSettings().getNoGodWorlds().contains(event.getPlayer().getLocation().getWorld().getName()))
{
- User user = ess.getUser(event.getPlayer());
if (user.isGodModeEnabledRaw())
{
user.sendMessage(_("noGodWorldWarning"));
@@ -324,9 +312,11 @@ public class EssentialsPlayerListener implements Listener
}
}
- @EventHandler(priority = EventPriority.MONITOR)
+ @EventHandler(priority = EventPriority.NORMAL)
public void onPlayerInteract(final PlayerInteractEvent event)
{
+ final User user = ess.getUser(event.getPlayer());
+ user.updateActivity(true);
switch (event.getAction())
{
case RIGHT_CLICK_BLOCK:
@@ -341,7 +331,6 @@ public class EssentialsPlayerListener implements Listener
break;
case LEFT_CLICK_AIR:
case LEFT_CLICK_BLOCK:
- final User user = ess.getUser(event.getPlayer());
if (user.hasPowerTools() && user.arePowerToolsEnabled())
{
if (usePowertools(user))
@@ -399,10 +388,10 @@ public class EssentialsPlayerListener implements Listener
return used;
}
- @EventHandler(priority = EventPriority.LOW)
- public void onPlayerPickupItem(PlayerPickupItemEvent event)
+ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
+ public void onPlayerPickupItem(final PlayerPickupItemEvent event)
{
- if (event.isCancelled() || !ess.getSettings().getDisableItemPickupWhileAfk())
+ if (!ess.getSettings().getDisableItemPickupWhileAfk())
{
return;
}
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java
index f70f0c091..bc0de9fa4 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java
@@ -730,7 +730,7 @@ public class EssentialsUpgrade
doneFile.setProperty("updateSpawnsToNewSpawnsConfig", true);
doneFile.save();
}
-
+
private void updateJailsToNewJailsConfig()
{
if (doneFile.getBoolean("updateJailsToNewJailsConfig", false))
@@ -778,6 +778,17 @@ public class EssentialsUpgrade
doneFile.save();
}
+ private void warnMetrics()
+ {
+ if (doneFile.getBoolean("warnMetrics", false))
+ {
+ return;
+ }
+ ess.getSettings().setMetricsEnabled(false);
+ doneFile.setProperty("warnMetrics", true);
+ doneFile.save();
+ }
+
public void beforeSettings()
{
if (!ess.getDataFolder().exists())
@@ -800,5 +811,6 @@ public class EssentialsUpgrade
deleteOldItemsCsv();
updateSpawnsToNewSpawnsConfig();
updateJailsToNewJailsConfig();
+ warnMetrics();
}
}
diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java
index 20c6c300e..83c2e7325 100644
--- a/Essentials/src/com/earth2me/essentials/IEssentials.java
+++ b/Essentials/src/com/earth2me/essentials/IEssentials.java
@@ -1,6 +1,7 @@
package com.earth2me.essentials;
import com.earth2me.essentials.api.IJails;
+import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.perm.PermissionsHandler;
import com.earth2me.essentials.register.payment.Methods;
import org.bukkit.World;
@@ -9,6 +10,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitScheduler;
+
/**
* @deprecated This will be moved to the api package soon
*/
@@ -64,4 +66,9 @@ public interface IEssentials extends Plugin
ItemDb getItemDb();
UserMap getUserMap();
+
+ Metrics getMetrics();
+
+ void setMetrics(Metrics metrics);
+
}
diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java
index 6186736b4..c5773404e 100644
--- a/Essentials/src/com/earth2me/essentials/ISettings.java
+++ b/Essentials/src/com/earth2me/essentials/ISettings.java
@@ -20,6 +20,8 @@ public interface ISettings extends IConf
boolean getAnnounceNewPlayers();
+ String getNewPlayerKit();
+
String getBackupCommand();
long getBackupInterval();
@@ -115,11 +117,11 @@ public interface ISettings extends IConf
boolean warnOnSmite();
double getMaxMoney();
-
+
double getMinMoney();
boolean isEcoLogEnabled();
-
+
boolean isEcoLogUpdateEnabled();
boolean removeGodOnDisconnect();
@@ -161,4 +163,8 @@ public interface ISettings extends IConf
EventPriority getRespawnPriority();
long getTpaAcceptCancellation();
+
+ boolean isMetricsEnabled();
+
+ void setMetricsEnabled(boolean metricsEnabled);
}
diff --git a/Essentials/src/com/earth2me/essentials/Jails.java b/Essentials/src/com/earth2me/essentials/Jails.java
index 7217992ad..65f486f42 100644
--- a/Essentials/src/com/earth2me/essentials/Jails.java
+++ b/Essentials/src/com/earth2me/essentials/Jails.java
@@ -115,7 +115,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
acquireReadLock();
try
{
- if (!(user.getBase() instanceof OfflinePlayer))
+ if (user.isOnline())
{
Location loc = getJail(jail);
user.getTeleport().now(loc, false, TeleportCause.COMMAND);
@@ -146,10 +146,23 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
}
+ @Override
+ public int getCount()
+ {
+ try
+ {
+ return getList().size();
+ }
+ catch (Exception ex)
+ {
+ return 0;
+ }
+ }
+
private class JailBlockListener implements Listener
{
- @EventHandler(priority = EventPriority.LOW)
+ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockBreak(final BlockBreakEvent event)
{
final User user = ess.getUser(event.getPlayer());
@@ -159,7 +172,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
}
- @EventHandler(priority = EventPriority.LOW)
+ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event)
{
final User user = ess.getUser(event.getPlayer());
@@ -169,7 +182,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
}
- @EventHandler(priority = EventPriority.LOW)
+ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockDamage(final BlockDamageEvent event)
{
final User user = ess.getUser(event.getPlayer());
@@ -183,7 +196,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
private class JailPlayerListener implements Listener
{
- @EventHandler(priority = EventPriority.LOW)
+ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerInteract(final PlayerInteractEvent event)
{
final User user = ess.getUser(event.getPlayer());
diff --git a/Essentials/src/com/earth2me/essentials/Kit.java b/Essentials/src/com/earth2me/essentials/Kit.java
index 88816368c..cf39997ea 100644
--- a/Essentials/src/com/earth2me/essentials/Kit.java
+++ b/Essentials/src/com/earth2me/essentials/Kit.java
@@ -1,6 +1,7 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
+import static com.earth2me.essentials.I18n.capitalCase;
import com.earth2me.essentials.commands.NoChargeException;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import java.util.*;
@@ -22,7 +23,7 @@ public class Kit
{
if (user.isAuthorized("essentials.kit." + kiteItem.toLowerCase(Locale.ENGLISH)))
{
- list.append(" ").append(kiteItem);
+ list.append(" ").append(capitalCase(kiteItem));
}
}
return list.toString().trim();
@@ -60,11 +61,16 @@ public class Kit
}
}
- public static List<String> getItems(final User user, final Map<String, Object> els) throws Exception
+ public static List<String> getItems(final User user, final Map<String, Object> kit) throws Exception
{
+ if (kit == null)
+ {
+ throw new Exception(_("kitError2"));
+ }
+
try
{
- return (List<String>)els.get("items");
+ return (List<String>)kit.get("items");
}
catch (Exception e)
{
diff --git a/Essentials/src/com/earth2me/essentials/Mob.java b/Essentials/src/com/earth2me/essentials/Mob.java
index 7be698950..38c11a81a 100644
--- a/Essentials/src/com/earth2me/essentials/Mob.java
+++ b/Essentials/src/com/earth2me/essentials/Mob.java
@@ -1,6 +1,7 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
@@ -38,7 +39,9 @@ public enum Mob
BLAZE("Blaze", Enemies.ENEMY, EntityType.BLAZE),
MUSHROOMCOW("MushroomCow", Enemies.FRIENDLY, EntityType.MUSHROOM_COW),
MAGMACUBE("MagmaCube", Enemies.ENEMY, EntityType.MAGMA_CUBE),
- SNOWMAN("Snowman", Enemies.FRIENDLY, "", EntityType.SNOWMAN);
+ SNOWMAN("Snowman", Enemies.FRIENDLY, "", EntityType.SNOWMAN),
+ OCELOT("Ocelot", Enemies.NEUTRAL, EntityType.OCELOT),
+ IRONGOLEM("IronGolem", Enemies.NEUTRAL, EntityType.IRON_GOLEM);
public static final Logger logger = Logger.getLogger("Minecraft");
@@ -71,7 +74,7 @@ public enum Mob
}
public static Set<String> getMobList() {
- return hashMap.keySet();
+ return Collections.unmodifiableSet(hashMap.keySet());
}
public LivingEntity spawn(final Player player, final Server server, final Location loc) throws MobException
diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
index a1c46c3ea..6a88eb533 100644
--- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
+++ b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
@@ -7,6 +7,7 @@ import lombok.Delegate;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.conversations.Conversation;
+import org.bukkit.conversations.ConversationAbandonedEvent;
import org.bukkit.entity.*;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@@ -1027,4 +1028,16 @@ public class OfflinePlayer implements Player
{
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public boolean isBlocking()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void abandonConversation(Conversation arg0, ConversationAbandonedEvent arg1)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java
index 732b5485c..e0e2dd63b 100644
--- a/Essentials/src/com/earth2me/essentials/Settings.java
+++ b/Essentials/src/com/earth2me/essentials/Settings.java
@@ -13,6 +13,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.MemoryConfiguration;
import org.bukkit.event.EventPriority;
import org.bukkit.inventory.ItemStack;
@@ -22,6 +23,7 @@ public class Settings implements ISettings
private final transient EssentialsConf config;
private final static Logger logger = Logger.getLogger("Minecraft");
private final transient IEssentials ess;
+ private boolean metricsEnabled = true;
public Settings(IEssentials ess)
{
@@ -208,18 +210,22 @@ public class Settings implements ISettings
{
return config.getDouble("heal-cooldown", 0);
}
+ private ConfigurationSection kits;
- @Override
- public Map<String, Object> getKit(String name)
+ public ConfigurationSection _getKits()
{
- name = name.replace('.', '_').replace('/', '_');
if (config.isConfigurationSection("kits"))
{
- final ConfigurationSection kits = getKits();
- if (kits.isConfigurationSection(name))
+ final ConfigurationSection section = config.getConfigurationSection("kits");
+ final ConfigurationSection newSection = new MemoryConfiguration();
+ for (String kitItem : section.getKeys(false))
{
- return kits.getConfigurationSection(name).getValues(true);
+ if (section.isConfigurationSection(kitItem))
+ {
+ newSection.set(kitItem.toLowerCase(Locale.ENGLISH), section.getConfigurationSection(kitItem));
+ }
}
+ return newSection;
}
return null;
}
@@ -227,9 +233,20 @@ public class Settings implements ISettings
@Override
public ConfigurationSection getKits()
{
+ return kits;
+ }
+
+ @Override
+ public Map<String, Object> getKit(String name)
+ {
+ name = name.replace('.', '_').replace('/', '_');
if (config.isConfigurationSection("kits"))
{
- return config.getConfigurationSection("kits");
+ final ConfigurationSection kits = getKits();
+ if (kits.isConfigurationSection(name))
+ {
+ return kits.getConfigurationSection(name).getValues(true);
+ }
}
return null;
}
@@ -336,6 +353,12 @@ public class Settings implements ISettings
}
@Override
+ public String getNewPlayerKit()
+ {
+ return config.getString("newbies.kit", "");
+ }
+
+ @Override
public String getNewbieSpawn()
{
return config.getString("newbies.spawnpoint", "default");
@@ -358,8 +381,9 @@ public class Settings implements ISettings
{
config.load();
noGodWorlds = new HashSet<String>(config.getStringList("no-god-in-worlds"));
- enabledSigns = getEnabledSigns();
- itemSpawnBl = getItemSpawnBlacklist();
+ enabledSigns = _getEnabledSigns();
+ itemSpawnBl = _getItemSpawnBlacklist();
+ kits = _getKits();
chatFormats.clear();
}
private List<Integer> itemSpawnBl = new ArrayList<Integer>();
@@ -370,7 +394,7 @@ public class Settings implements ISettings
return itemSpawnBl;
}
- private List<Integer> getItemSpawnBlacklist()
+ private List<Integer> _getItemSpawnBlacklist()
{
final List<Integer> epItemSpwn = new ArrayList<Integer>();
if (ess.getItemDb() == null)
@@ -405,7 +429,7 @@ public class Settings implements ISettings
return enabledSigns;
}
- private List<EssentialsSign> getEnabledSigns()
+ private List<EssentialsSign> _getEnabledSigns()
{
List<EssentialsSign> newSigns = new ArrayList<EssentialsSign>();
@@ -559,7 +583,7 @@ public class Settings implements ISettings
{
return config.getBoolean("economy-log-enabled", false);
}
-
+
@Override
public boolean isEcoLogUpdateEnabled()
{
@@ -695,4 +719,16 @@ public class Settings implements ISettings
{
return config.getLong("tpa-accept-cancellation", 0);
}
+
+ @Override
+ public boolean isMetricsEnabled()
+ {
+ return metricsEnabled;
+ }
+
+ @Override
+ public void setMetricsEnabled(boolean metricsEnabled)
+ {
+ this.metricsEnabled = metricsEnabled;
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java b/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java
index 54e49ad5f..4187f835d 100644
--- a/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java
+++ b/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java
@@ -1,6 +1,5 @@
package com.earth2me.essentials;
-import com.earth2me.essentials.craftbukkit.FakeExplosion;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -46,8 +45,12 @@ public class TNTExplodeListener implements Listener, Runnable
{
return;
}
- FakeExplosion.createExplosion(event, ess.getServer(), ess.getServer().getOnlinePlayers());
+ if (event.blockList().size() < 1)
+ {
+ return;
+ }
event.setCancelled(true);
+ event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
}
@Override
diff --git a/Essentials/src/com/earth2me/essentials/Trade.java b/Essentials/src/com/earth2me/essentials/Trade.java
index 3594c3137..fbdc471bd 100644
--- a/Essentials/src/com/earth2me/essentials/Trade.java
+++ b/Essentials/src/com/earth2me/essentials/Trade.java
@@ -158,11 +158,9 @@ public class Trade
InventoryWorkaround.removeItem(user.getInventory(), true, true, getItemStack());
user.updateInventory();
}
- if (command != null && !command.isEmpty()
- && !user.isAuthorized("essentials.nocommandcost.all")
- && !user.isAuthorized("essentials.nocommandcost." + command))
+ if (command != null)
{
- final double cost = ess.getSettings().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command);
+ final double cost = getCommandCost(user);
if (!user.canAfford(cost) && cost > 0)
{
throw new ChargeException(_("notEnoughMoney"));
@@ -194,6 +192,18 @@ public class Trade
{
return exp;
}
+
+ public Double getCommandCost(final IUser user)
+ {
+ double cost = 0d;
+ if (command != null && !command.isEmpty()
+ && !user.isAuthorized("essentials.nocommandcost.all")
+ && !user.isAuthorized("essentials.nocommandcost." + command))
+ {
+ cost = ess.getSettings().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command);
+ }
+ return cost;
+ }
private static FileWriter fw = null;
public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess)
diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java
index ba34548fe..8f6196e31 100644
--- a/Essentials/src/com/earth2me/essentials/User.java
+++ b/Essentials/src/com/earth2me/essentials/User.java
@@ -71,7 +71,13 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
return false;
}
- return ess.getPermissionsHandler().hasPermission(base, node);
+ try {
+ return ess.getPermissionsHandler().hasPermission(base, node);
+ }
+ catch (Exception ex) {
+ ess.getLogger().log(Level.SEVERE, "Permission System Error: " + ess.getPermissionsHandler().getName() + " returned: " + ex.getMessage());
+ return false;
+ }
}
public void healCooldown() throws Exception
@@ -105,10 +111,10 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
return;
}
setMoney(getMoney() + value);
- sendMessage(_("addedToAccount", Util.formatCurrency(value, ess)));
+ sendMessage(_("addedToAccount", Util.displayCurrency(value, ess)));
if (initiator != null)
{
- initiator.sendMessage(_("addedToOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName(), Util.formatCurrency(getMoney(), ess)));
+ initiator.sendMessage(_("addedToOthersAccount", Util.displayCurrency(value, ess), this.getDisplayName(), Util.displayCurrency(getMoney(), ess)));
}
}
@@ -122,8 +128,8 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
{
setMoney(getMoney() - value);
reciever.setMoney(reciever.getMoney() + value);
- sendMessage(_("moneySentTo", Util.formatCurrency(value, ess), reciever.getDisplayName()));
- reciever.sendMessage(_("moneyRecievedFrom", Util.formatCurrency(value, ess), getDisplayName()));
+ sendMessage(_("moneySentTo", Util.displayCurrency(value, ess), reciever.getDisplayName()));
+ reciever.sendMessage(_("moneyRecievedFrom", Util.displayCurrency(value, ess), getDisplayName()));
}
else
{
@@ -144,10 +150,10 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
return;
}
setMoney(getMoney() - value);
- sendMessage(_("takenFromAccount", Util.formatCurrency(value, ess)));
+ sendMessage(_("takenFromAccount", Util.displayCurrency(value, ess)));
if (initiator != null)
{
- initiator.sendMessage(_("takenFromOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName(), Util.formatCurrency(getMoney(), ess)));
+ initiator.sendMessage(_("takenFromOthersAccount", Util.displayCurrency(value, ess), this.getDisplayName(), Util.displayCurrency(getMoney(), ess)));
}
}
@@ -249,7 +255,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
return teleportRequestHere;
}
- public String getNick(boolean addprefixsuffix)
+ public String getNick(final boolean addprefixsuffix)
{
final StringBuilder nickname = new StringBuilder();
final String nick = getNickname();
@@ -261,28 +267,32 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
{
nickname.append(ess.getSettings().getNicknamePrefix()).append(nick);
}
- if (isOp())
+
+ if (addprefixsuffix && isOp())
{
try
{
- nickname.insert(0, ess.getSettings().getOperatorColor().toString());
- nickname.append("§f");
+ final String opPrefix = ess.getSettings().getOperatorColor().toString();
+ if (opPrefix.length() > 0)
+ {
+ nickname.insert(0, opPrefix);
+ nickname.append("§f");
+ }
}
catch (Exception e)
{
}
}
-
if (addprefixsuffix && ess.getSettings().addPrefixSuffix())
{
if (!ess.getSettings().disablePrefix())
{
- final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName());
+ final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§');
nickname.insert(0, prefix);
}
if (!ess.getSettings().disableSuffix())
{
- final String suffix = ess.getPermissionsHandler().getSuffix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName());
+ final String suffix = ess.getPermissionsHandler().getSuffix(base).replace('&', '§');
nickname.append(suffix);
if (suffix.length() < 2 || !suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§"))
{
@@ -323,13 +333,14 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
@Override
public String getDisplayName()
{
- if (!(base instanceof OfflinePlayer) && ess.getSettings().changeDisplayName())
+ if (base.isOnline() && ess.getSettings().changeDisplayName())
{
setDisplayNick();
}
return super.getDisplayName() == null ? super.getName() : super.getDisplayName();
}
+ @Override
public Teleport getTeleport()
{
return teleport;
@@ -385,7 +396,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
catch (Throwable ex)
{
}
- }
+ }
super.setMoney(value);
Trade.log("Update", "Set", "API", getName(), new Trade(value, ess), null, null, null, ess);
}
diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java
index ea3201f28..3b6516277 100644
--- a/Essentials/src/com/earth2me/essentials/UserData.java
+++ b/Essentials/src/com/earth2me/essentials/UserData.java
@@ -1,5 +1,6 @@
package com.earth2me.essentials;
+import static com.earth2me.essentials.I18n._;
import java.io.File;
import java.util.*;
import java.util.logging.Logger;
@@ -44,7 +45,7 @@ public abstract class UserData extends PlayerExtension implements IConf
savedInventory = _getSavedInventory();
teleportEnabled = getTeleportEnabled();
ignoredPlayers = getIgnoredPlayers();
- godmode = getGodModeEnabled();
+ godmode = _getGodModeEnabled();
muted = getMuted();
muteTimeout = _getMuteTimeout();
jailed = getJailed();
@@ -58,6 +59,7 @@ public abstract class UserData extends PlayerExtension implements IConf
isNPC = _isNPC();
arePowerToolsEnabled = _arePowerToolsEnabled();
kitTimestamps = _getKitTimestamps();
+ nickname = _getNickname();
}
private double money;
@@ -175,8 +177,7 @@ public abstract class UserData extends PlayerExtension implements IConf
}
else
{
- //TODO: move this message to messages file
- throw new Exception("Home " + name + " doesn't exist");
+ throw new Exception(_("invalidHome", name));
}
}
@@ -189,13 +190,21 @@ public abstract class UserData extends PlayerExtension implements IConf
return false;
}
- public String getNickname()
+ private String nickname;
+
+ public String _getNickname()
{
return config.getString("nickname");
}
+
+ public String getNickname()
+ {
+ return nickname;
+ }
public void setNickname(String nick)
{
+ nickname = nick;
config.setProperty("nickname", nick);
config.save();
}
@@ -515,7 +524,7 @@ public abstract class UserData extends PlayerExtension implements IConf
}
private boolean godmode;
- private boolean getGodModeEnabled()
+ private boolean _getGodModeEnabled()
{
return config.getBoolean("godmode", false);
}
@@ -817,16 +826,12 @@ public abstract class UserData extends PlayerExtension implements IConf
private Map<String, Object> _getKitTimestamps()
{
- final Object map = config.getProperty("timestamps.kits");
- if (map instanceof Map)
+ if (config.isConfigurationSection("timestamps.kits"))
{
- return (Map<String, Object>)map;
- }
- else
- {
- return new HashMap<String, Object>();
+ return config.getConfigurationSection("timestamps.kits").getValues(false);
}
+ return new HashMap<String, Object>();
}
public Long getKitTimestamp(final String name)
diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java
index 3e3a7efd0..fbb8deb08 100644
--- a/Essentials/src/com/earth2me/essentials/Util.java
+++ b/Essentials/src/com/earth2me/essentials/Util.java
@@ -293,7 +293,7 @@ public class Util
while (isBlockUnsafe(world, x, y, z))
{
y += 1;
- if (y >= 127)
+ if (y >= world.getHighestBlockYAt(x, z))
{
x += 1;
break;
@@ -304,8 +304,8 @@ public class Util
y -= 1;
if (y <= 1)
{
- y = 127;
x += 1;
+ y = world.getHighestBlockYAt(x, z);
if (x - 32 > loc.getBlockX())
{
throw new Exception(_("holeInFloor"));
@@ -422,11 +422,11 @@ public class Util
}
return is;
}
- private static DecimalFormat df = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.US));
+ private static DecimalFormat dFormat = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.US));
- public static String formatCurrency(final double value, final IEssentials ess)
+ public static String formatAsCurrency(final double value)
{
- String str = ess.getSettings().getCurrencySymbol() + df.format(value);
+ String str = dFormat.format(value);
if (str.endsWith(".00"))
{
str = str.substring(0, str.length() - 3);
@@ -434,6 +434,16 @@ public class Util
return str;
}
+ public static String displayCurrency(final double value, final IEssentials ess)
+ {
+ return _("currency", ess.getSettings().getCurrencySymbol(), formatAsCurrency(value));
+ }
+
+ public static String shortCurrency(final double value, final IEssentials ess)
+ {
+ return ess.getSettings().getCurrencySymbol() + formatAsCurrency(value);
+ }
+
public static double roundDouble(final double d)
{
return Math.round(d * 100.0) / 100.0;
diff --git a/Essentials/src/com/earth2me/essentials/Warps.java b/Essentials/src/com/earth2me/essentials/Warps.java
index 57326b54a..ece987aba 100644
--- a/Essentials/src/com/earth2me/essentials/Warps.java
+++ b/Essentials/src/com/earth2me/essentials/Warps.java
@@ -1,6 +1,7 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
+import com.earth2me.essentials.commands.WarpNotFoundException;
import java.io.File;
import java.util.*;
import java.util.logging.Level;
@@ -48,7 +49,7 @@ public class Warps implements IConf
EssentialsConf conf = warpPoints.get(new StringIgnoreCase(warp));
if (conf == null)
{
- throw new Exception(_("warpNotExist"));
+ throw new WarpNotFoundException();
}
return conf.getLocation(null, server);
}
diff --git a/Essentials/src/com/earth2me/essentials/api/Economy.java b/Essentials/src/com/earth2me/essentials/api/Economy.java
index a1d421c38..6ed1829b3 100644
--- a/Essentials/src/com/earth2me/essentials/api/Economy.java
+++ b/Essentials/src/com/earth2me/essentials/api/Economy.java
@@ -249,7 +249,7 @@ public final class Economy
{
throw new RuntimeException(noCallBeforeLoad);
}
- return Util.formatCurrency(amount, ess);
+ return Util.displayCurrency(amount, ess);
}
/**
diff --git a/Essentials/src/com/earth2me/essentials/api/IJails.java b/Essentials/src/com/earth2me/essentials/api/IJails.java
index 18866d8e5..e19b76837 100644
--- a/Essentials/src/com/earth2me/essentials/api/IJails.java
+++ b/Essentials/src/com/earth2me/essentials/api/IJails.java
@@ -10,6 +10,8 @@ public interface IJails extends IReload
Collection<String> getList() throws Exception;
+ int getCount();
+
void removeJail(String jail) throws Exception;
void sendToJail(com.earth2me.essentials.IUser user, String jail) throws Exception;
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java
index 54277d466..968d0012c 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java
@@ -17,8 +17,11 @@ public class Commandantioch extends EssentialsCommand
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
- ess.broadcastMessage(user, "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,");
- ess.broadcastMessage(user, "who being naughty in My sight, shall snuff it.");
+ if (args.length > 0)
+ {
+ ess.broadcastMessage(user, "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,");
+ ess.broadcastMessage(user, "who being naughty in My sight, shall snuff it.");
+ }
final Location loc = Util.getTarget(user);
loc.getWorld().spawn(loc, TNTPrimed.class);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java b/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java
index 58f164ad6..15c3c9088 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java
@@ -21,7 +21,7 @@ public class Commandbalance extends EssentialsCommand
{
throw new NotEnoughArgumentsException();
}
- sender.sendMessage(_("balance", Util.formatCurrency(getPlayer(server, args, 0, true).getMoney(), ess)));
+ sender.sendMessage(_("balance", Util.displayCurrency(getPlayer(server, args, 0, true).getMoney(), ess)));
}
@Override
@@ -32,6 +32,6 @@ public class Commandbalance extends EssentialsCommand
|| user.isAuthorized("essentials.balance.other"))
? user
: getPlayer(server, args, 0, true)).getMoney();
- user.sendMessage(_("balance", Util.formatCurrency(bal, ess)));
+ user.sendMessage(_("balance", Util.displayCurrency(bal, ess)));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbalancetop.java b/Essentials/src/com/earth2me/essentials/commands/Commandbalancetop.java
index fffb69ea4..6c5e96b9f 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandbalancetop.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandbalancetop.java
@@ -130,11 +130,11 @@ public class Commandbalancetop extends EssentialsCommand
}
});
- cache.getLines().add(_("serverTotal", Util.formatCurrency(totalMoney, ess)));
+ cache.getLines().add(_("serverTotal", Util.displayCurrency(totalMoney, ess)));
int pos = 1;
for (Map.Entry<String, Double> entry : sortedEntries)
{
- cache.getLines().add(pos + ". " + entry.getKey() + ", " + Util.formatCurrency(entry.getValue(), ess));
+ cache.getLines().add(pos + ". " + entry.getKey() + ", " + Util.displayCurrency(entry.getValue(), ess));
pos++;
}
cacheage = System.currentTimeMillis();
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandban.java b/Essentials/src/com/earth2me/essentials/commands/Commandban.java
index d39419686..bc09cbba8 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandban.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandban.java
@@ -2,7 +2,6 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.Console;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
@@ -24,7 +23,7 @@ public class Commandban extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
final User user = getPlayer(server, args, 0, true);
- if (user.getBase() instanceof OfflinePlayer)
+ if (!user.isOnline())
{
if (sender instanceof Player
&& !ess.getUser(sender).isAuthorized("essentials.ban.offline"))
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java b/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java
index 2691ad4f2..a03c24264 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java
@@ -1,5 +1,6 @@
package com.earth2me.essentials.commands;
+import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
import org.bukkit.Material;
import org.bukkit.Server;
@@ -29,7 +30,7 @@ public class Commandbreak extends EssentialsCommand
}
if (block.getType() == Material.BEDROCK && !user.isAuthorized("essentials.break.bedrock"))
{
- throw new Exception("You are not allowed to destroy bedrock."); //TODO: Translation
+ throw new Exception(_("noBreakBedrock"));
}
final BlockBreakEvent event = new BlockBreakEvent(block, user.getBase());
server.getPluginManager().callEvent(event);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandeco.java b/Essentials/src/com/earth2me/essentials/commands/Commandeco.java
index b9694ee49..dd6d6ad0d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandeco.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandeco.java
@@ -34,7 +34,31 @@ public class Commandeco extends EssentialsCommand
throw new NotEnoughArgumentsException(ex);
}
- if (args[1].contentEquals("*"))
+ if (args[1].contentEquals("**"))
+ {
+ for (String sUser : ess.getUserMap().getAllUniqueUsers())
+ {
+ final User player = ess.getUser(sUser);
+ switch (cmd)
+ {
+ case GIVE:
+ player.giveMoney(amount);
+ break;
+
+ case TAKE:
+ if (player.canAfford(amount, false))
+ {
+ player.takeMoney(amount);
+ }
+ break;
+
+ case RESET:
+ player.setMoney(amount == 0 ? ess.getSettings().getStartingBalance() : amount);
+ break;
+ }
+ }
+ }
+ else if (args[1].contentEquals("*"))
{
for (Player onlinePlayer : server.getOnlinePlayers())
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java
index 14bbf5e02..bf1077c30 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java
@@ -2,13 +2,18 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Util;
+import com.earth2me.essentials.metrics.Metrics;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender;
+import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
@@ -35,6 +40,14 @@ public class Commandessentials extends EssentialsCommand
{
run_nya(server, sender, commandLabel, args);
}
+ else if (args[0].equalsIgnoreCase("moo"))
+ {
+ run_moo(server, sender, commandLabel, args);
+ }
+ else if (args[0].equalsIgnoreCase("opt-out"))
+ {
+ run_optout(server, sender, commandLabel, args);
+ }
else {
run_reload(server, sender, commandLabel, args);
}
@@ -112,7 +125,7 @@ public class Commandessentials extends EssentialsCommand
if (loc.getBlock().getTypeId() == 0)
{
noteBlocks.put(player, loc.getBlock());
- loc.getBlock().setType(Material.NOTE_BLOCK);
+ player.sendBlockChange(loc, Material.NOTE_BLOCK, (byte)0);
}
}
taskid = ess.scheduleSyncRepeatingTask(new Runnable()
@@ -144,7 +157,6 @@ public class Commandessentials extends EssentialsCommand
}
}
}, 20, 2);
- return;
}
private void stopTune()
@@ -159,4 +171,27 @@ public class Commandessentials extends EssentialsCommand
}
noteBlocks.clear();
}
+
+ private void run_moo(final Server server, final CommandSender sender, final String command, final String args[])
+ {
+ if(sender instanceof ConsoleCommandSender)
+ sender.sendMessage(new String[]{" (__)", " (oo)", " /------\\/", " / | ||", " * /\\---/\\", " ~~ ~~", "....\"Have you mooed today?\"..." } );
+ else
+ sender.sendMessage(new String[]{" (__)", " (oo)", " /------\\/", " / | | |", " * /\\---/\\", " ~~ ~~", "....\"Have you mooed today?\"..." } );
+ }
+
+ private void run_optout(final Server server, final CommandSender sender, final String command, final String args[])
+ {
+ final Metrics metrics = ess.getMetrics();
+ try
+ {
+ sender.sendMessage("Essentials collects simple metrics to highlight which features to concentrate work on in the future.");
+ metrics.setOptOut(!metrics.isOptOut());
+ sender.sendMessage("Annonmous Metrics are now: " + (metrics.isOptOut() ? "disabled" : "enabled"));
+ }
+ catch (IOException ex)
+ {
+ sender.sendMessage("Unable to modify 'plugins/PluginMetrics/config.yml': " + ex.getMessage());
+ }
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java
index d6e3d8f98..9db7d4da3 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java
@@ -1,5 +1,6 @@
package com.earth2me.essentials.commands;
+import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import com.earth2me.essentials.User;
import java.util.Locale;
@@ -19,7 +20,6 @@ public class Commandgive extends EssentialsCommand
super("give");
}
- //TODO: move these messages to message file
@Override
public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
@@ -39,7 +39,7 @@ public class Commandgive extends EssentialsCommand
: (!ess.getUser(sender).isAuthorized("essentials.itemspawn.exempt")
&& !ess.getUser(sender).canSpawnItem(stack.getTypeId()))))
{
- throw new Exception(ChatColor.RED + "You are not allowed to spawn the item " + itemname);
+ throw new Exception(_("cantSpawnItem", itemname));
}
final User giveTo = getPlayer(server, args, 0);
@@ -82,7 +82,7 @@ public class Commandgive extends EssentialsCommand
if (stack.getType() == Material.AIR)
{
- throw new Exception(ChatColor.RED + "You can't give air.");
+ throw new Exception(_("cantSpawnItem", "Air"));
}
final String itemName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java
index aee0af910..67f0fafd0 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java
@@ -38,7 +38,7 @@ public class Commandkit extends EssentialsCommand
{
throw new Exception(_("noKitPermission", "essentials.kit." + kitName));
}
-
+
final List<String> items = Kit.getItems(user, kit);
Kit.checkTime(user, kitName, kit);
@@ -47,7 +47,7 @@ public class Commandkit extends EssentialsCommand
charge.isAffordableFor(user);
Kit.expandItems(ess, user, items);
-
+
charge.charge(user);
user.sendMessage(_("kitGive", kitName));
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkittycannon.java b/Essentials/src/com/earth2me/essentials/commands/Commandkittycannon.java
new file mode 100644
index 000000000..9db608235
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandkittycannon.java
@@ -0,0 +1,44 @@
+package com.earth2me.essentials.commands;
+
+import com.earth2me.essentials.Mob;
+import com.earth2me.essentials.User;
+import java.util.Random;
+import org.bukkit.Location;
+import org.bukkit.Server;
+import org.bukkit.entity.Ocelot;
+
+
+public class Commandkittycannon extends EssentialsCommand
+{
+ private static Random random = new Random();
+
+ public Commandkittycannon()
+ {
+ super("kittycannon");
+ }
+
+ @Override
+ protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
+ {
+ final Mob cat = Mob.OCELOT;
+ final Ocelot ocelot = (Ocelot)cat.spawn(user, server, user.getEyeLocation());
+ if (ocelot == null)
+ {
+ return;
+ }
+ final int i = random.nextInt(Ocelot.Type.values().length);
+ ocelot.setCatType(Ocelot.Type.values()[i]);
+ ocelot.setTamed(true);
+ ocelot.setVelocity(user.getEyeLocation().getDirection().multiply(2));
+ ess.scheduleSyncDelayedTask(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ final Location loc = ocelot.getLocation();
+ ocelot.remove();
+ loc.getWorld().createExplosion(loc, 0F);
+ }
+ }, 20);
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java b/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java
index be9ac61f5..810ef0b33 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java
@@ -24,7 +24,7 @@ public class Commandlightning extends EssentialsCommand
{
user = ess.getUser(((Player)sender));
}
- if (args.length < 1 & user != null)
+ if ((args.length < 1 || !user.isAuthorized("essentials.lightning.others")) & user != null)
{
user.getWorld().strikeLightning(user.getTargetBlock(null, 600).getLocation());
return;
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java
index 92833a66c..77788c7c2 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java
@@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
+import com.earth2me.essentials.Util;
import java.util.*;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
@@ -72,7 +73,7 @@ public class Commandlist extends EssentialsCommand
for (String group : groups)
{
final StringBuilder groupString = new StringBuilder();
- groupString.append(group).append(": ");
+ groupString.append(_("listGroupTag",Util.replaceColor(group)));
final List<User> users = sort.get(group);
Collections.sort(users);
boolean first = true;
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java b/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java
index ac92110cd..60b1e3111 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java
@@ -51,7 +51,7 @@ public class Commandnuke extends EssentialsCommand
{
for (int z = -10; z <= 10; z += 5)
{
- final Location tntloc = new Location(world, loc.getBlockX() + x, 127, loc.getBlockZ() + z);
+ final Location tntloc = new Location(world, loc.getBlockX() + x, world.getHighestBlockYAt(loc) + 64, loc.getBlockZ() + z);
final TNTPrimed tnt = world.spawn(tntloc, TNTPrimed.class);
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java
index cf500e094..2783fb68e 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java
@@ -17,26 +17,37 @@ public class Commandseen extends EssentialsCommand
@Override
protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
+ seen(server,sender,args,true);
+ }
+
+ @Override
+ protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
+ {
+ seen(server,user,args,user.isAuthorized("essentials.seen.banreason"));
+ }
+
+ protected void seen (final Server server, final CommandSender sender, final String[] args, final boolean show) throws Exception
+ {
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
try
{
- User u = getPlayer(server, args, 0);
- sender.sendMessage(_("seenOnline", u.getDisplayName(), Util.formatDateDiff(u.getLastLogin())));
+ User player = getPlayer(server, args, 0);
+ sender.sendMessage(_("seenOnline", player.getDisplayName(), Util.formatDateDiff(player.getLastLogin())));
}
catch (NoSuchFieldException e)
{
- User u = ess.getOfflineUser(args[0]);
- if (u == null)
+ User player = ess.getOfflineUser(args[0]);
+ if (player == null)
{
throw new Exception(_("playerNotFound"));
}
- sender.sendMessage(_("seenOffline", u.getDisplayName(), Util.formatDateDiff(u.getLastLogout())));
- if (u.isBanned())
+ sender.sendMessage(_("seenOffline", player.getDisplayName(), Util.formatDateDiff(player.getLastLogout())));
+ if (player.isBanned())
{
- sender.sendMessage(_("whoisBanned", _("true")));
+ sender.sendMessage(_("whoisBanned", show ? player.getBanReason() : _("true")));
}
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java
index d59c09b1e..5958a5c0f 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java
@@ -160,8 +160,8 @@ public class Commandsell extends EssentialsCommand
user.updateInventory();
Trade.log("Command", "Sell", "Item", user.getName(), new Trade(ris, ess), user.getName(), new Trade(worth * amount, ess), user.getLocation(), ess);
user.giveMoney(worth * amount);
- user.sendMessage(_("itemSold", Util.formatCurrency(worth * amount, ess), amount, is.getType().toString().toLowerCase(Locale.ENGLISH), Util.formatCurrency(worth, ess)));
- logger.log(Level.INFO, _("itemSoldConsole", user.getDisplayName(), is.getType().toString().toLowerCase(Locale.ENGLISH), Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess)));
+ user.sendMessage(_("itemSold", Util.displayCurrency(worth * amount, ess), amount, is.getType().toString().toLowerCase(Locale.ENGLISH), Util.displayCurrency(worth, ess)));
+ logger.log(Level.INFO, _("itemSoldConsole", user.getDisplayName(), is.getType().toString().toLowerCase(Locale.ENGLISH), Util.displayCurrency(worth * amount, ess), amount, Util.displayCurrency(worth, ess)));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java
index 1a7d27b4b..42da62b85 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java
@@ -2,6 +2,8 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
+import com.earth2me.essentials.Util;
+import com.earth2me.essentials.Warps;
import org.bukkit.Location;
import org.bukkit.Server;
@@ -26,7 +28,25 @@ public class Commandsetwarp extends EssentialsCommand
}
final Location loc = user.getLocation();
- ess.getWarps().setWarp(args[0], loc);
+ final Warps warps = ess.getWarps();
+ Location warpLoc = null;
+
+ try
+ {
+ warpLoc = warps.getWarp(args[0]);
+ }
+ catch (Exception ex)
+ {
+ }
+
+ if (warpLoc == null || user.isAuthorized("essentials.warp.overwrite." + Util.sanitizeFileName(args[0])))
+ {
+ warps.setWarp(args[0], loc);
+ }
+ else
+ {
+ throw new Exception(_("warpOverwrite"));
+ }
user.sendMessage(_("warpSet", args[0]));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java
index 1d236b70a..734d9244d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java
@@ -3,6 +3,7 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
import org.bukkit.Server;
+import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack;
@@ -21,8 +22,34 @@ public class Commandsetworth extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
+ ItemStack stack;
+ String price;
+
+ if (args.length == 1)
+ {
+ stack = user.getInventory().getItemInHand();
+ price = args[0];
+ }
+ else
+ {
+ stack = ess.getItemDb().get(args[0]);
+ price = args[1];
+ }
+
+ ess.getWorth().setPrice(stack, Double.parseDouble(price));
+ user.sendMessage(_("worthSet"));
+ }
+
+ @Override
+ public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
+ {
+ if (args.length < 2)
+ {
+ throw new NotEnoughArgumentsException();
+ }
+
ItemStack stack = ess.getItemDb().get(args[0]);
ess.getWorth().setPrice(stack, Double.parseDouble(args[1]));
- user.sendMessage(_("worthSet"));
+ sender.sendMessage(_("worthSet"));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java
index 1cd65a743..d2b50137d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java
@@ -1,10 +1,7 @@
package com.earth2me.essentials.commands;
+import com.earth2me.essentials.*;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.Mob;
-import com.earth2me.essentials.Trade;
-import com.earth2me.essentials.User;
-import com.earth2me.essentials.Util;
import java.util.Locale;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -34,34 +31,34 @@ public class Commandspawner extends EssentialsCommand
throw new Exception(_("mobSpawnTarget"));
}
+ String name = args[0];
+
+ Mob mob = null;
+ mob = Mob.fromName(name);
+ if (mob == null)
+ {
+ throw new Exception(_("invalidMob"));
+ }
+ if (ess.getSettings().getProtectPreventSpawn(mob.getType().toString().toLowerCase(Locale.ENGLISH)))
+ {
+ throw new Exception(_("disabledToSpawnMob"));
+ }
+ if (!user.isAuthorized("essentials.spawner." + mob.name.toLowerCase(Locale.ENGLISH)))
+ {
+ throw new Exception(_("noPermToSpawnMob"));
+ }
+ final Trade charge = new Trade("spawner-" + mob.name.toLowerCase(Locale.ENGLISH), ess);
+ charge.isAffordableFor(user);
try
{
- String name = args[0];
-
- Mob mob = null;
- mob = Mob.fromName(name);
- if (mob == null)
- {
- user.sendMessage(_("invalidMob"));
- return;
- }
- if (ess.getSettings().getProtectPreventSpawn(mob.getType().toString().toLowerCase(Locale.ENGLISH)))
- {
- throw new Exception(_("unableToSpawnMob"));
- }
- if (!user.isAuthorized("essentials.spawner." + mob.name.toLowerCase(Locale.ENGLISH)))
- {
- throw new Exception(_("unableToSpawnMob"));
- }
- final Trade charge = new Trade("spawner-" + mob.name.toLowerCase(Locale.ENGLISH), ess);
- charge.isAffordableFor(user);
((CreatureSpawner)target.getBlock().getState()).setSpawnedType(mob.getType());
- charge.charge(user);
- user.sendMessage(_("setSpawner", mob.name));
}
catch (Throwable ex)
{
throw new Exception(_("mobSpawnError"), ex);
}
+ charge.charge(user);
+ user.sendMessage(_("setSpawner", mob.name));
+
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
index 4971c7922..8d716106f 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
@@ -5,9 +5,7 @@ import com.earth2me.essentials.Mob;
import com.earth2me.essentials.Mob.MobException;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
-import java.util.Locale;
-import java.util.Random;
-import java.util.Set;
+import java.util.*;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.Server;
@@ -27,12 +25,13 @@ public class Commandspawnmob extends EssentialsCommand
{
if (args.length < 1)
{
- Set<String> availableList = Mob.getMobList();
- for (String mob : availableList)
+ final Set<String> mobList = Mob.getMobList();
+ final Set<String> availableList = new HashSet<String>();
+ for (String mob : mobList)
{
- if (!user.isAuthorized("essentials.spawnmob." + mob.toLowerCase()))
+ if (user.isAuthorized("essentials.spawnmob." + mob.toLowerCase()))
{
- availableList.remove(mob);
+ availableList.add(mob);
}
}
if (availableList.isEmpty())
@@ -176,7 +175,7 @@ public class Commandspawnmob extends EssentialsCommand
changeMobData(mobMount.getType(), spawnedMount, mountData, user);
}
}
- user.sendMessage(args[1] + " " + mob.name.toLowerCase(Locale.ENGLISH) + mob.suffix + " " + _("spawned"));
+ user.sendMessage(mobCount + " " + mob.name.toLowerCase(Locale.ENGLISH) + mob.suffix + " " + _("spawned"));
}
catch (MobException e1)
{
@@ -197,8 +196,9 @@ public class Commandspawnmob extends EssentialsCommand
}
}
- private void changeMobData(final EntityType type, final Entity spawned, final String data, final User user) throws Exception
+ private void changeMobData(final EntityType type, final Entity spawned, String data, final User user) throws Exception
{
+ data = data.toLowerCase(Locale.ENGLISH);
if (type == EntityType.SLIME || type == EntityType.MAGMA_CUBE)
{
try
@@ -215,23 +215,20 @@ public class Commandspawnmob extends EssentialsCommand
|| type == EntityType.MUSHROOM_COW
|| type == EntityType.CHICKEN
|| type == EntityType.PIG
+ || type == EntityType.VILLAGER
+ || type == EntityType.OCELOT
|| type == EntityType.WOLF)
- && data.equalsIgnoreCase("baby"))
+ && data.contains("baby"))
{
- ((Animals)spawned).setAge(-24000);
+ ((Animals)spawned).setBaby();
return;
}
if (type == EntityType.SHEEP)
{
- if (data.toLowerCase(Locale.ENGLISH).contains("baby"))
- {
- ((Sheep)spawned).setAge(-24000);
- }
final String color = data.toUpperCase(Locale.ENGLISH).replace("BABY", "");
try
{
-
- if (color.equalsIgnoreCase("random"))
+ if (color.equals("RANDOM"))
{
Random rand = new Random();
((Sheep)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]);
@@ -246,30 +243,37 @@ public class Commandspawnmob extends EssentialsCommand
throw new Exception(_("sheepMalformedColor"), e);
}
}
- if (type == EntityType.WOLF
- && data.toLowerCase(Locale.ENGLISH).startsWith("tamed"))
+ if ((type == EntityType.WOLF
+ || type == EntityType.OCELOT)
+ && data.contains("tamed"))
{
- final Wolf wolf = ((Wolf)spawned);
- wolf.setTamed(true);
- wolf.setOwner(user);
- wolf.setSitting(true);
- if (data.equalsIgnoreCase("tamedbaby"))
- {
- ((Animals)spawned).setAge(-24000);
- }
+ final Tameable tameable = ((Tameable)spawned);
+ tameable.setTamed(true);
+ tameable.setOwner(user.getBase());
}
if (type == EntityType.WOLF
- && data.toLowerCase(Locale.ENGLISH).startsWith("angry"))
+ && data.contains("angry"))
{
((Wolf)spawned).setAngry(true);
- if (data.equalsIgnoreCase("angrybaby"))
- {
- ((Animals)spawned).setAge(-24000);
- }
}
- if (type == EntityType.CREEPER && data.equalsIgnoreCase("powered"))
+ if (type == EntityType.CREEPER && data.contains("powered"))
{
((Creeper)spawned).setPowered(true);
}
+ if (type == EntityType.OCELOT)
+ {
+ if (data.contains("siamese"))
+ {
+ ((Ocelot)spawned).setCatType(Ocelot.Type.SIAMESE_CAT);
+ }
+ if (data.contains("red"))
+ {
+ ((Ocelot)spawned).setCatType(Ocelot.Type.RED_CAT);
+ }
+ if (data.contains("black"))
+ {
+ ((Ocelot)spawned).setCatType(Ocelot.Type.BLACK_CAT);
+ }
+ }
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java b/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java
index d43d486b9..23083fa3d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java
@@ -1,5 +1,6 @@
package com.earth2me.essentials.commands;
+import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
@@ -30,14 +31,12 @@ public class Commandsudo extends EssentialsCommand
System.arraycopy(args, 2, arguments, 0, args.length - 2);
}
- //TODO: Translate this.
if (user.isAuthorized("essentials.sudo.exempt"))
{
- throw new Exception("You cannot sudo this user");
+ throw new Exception(_("sudoExempt"));
}
- //TODO: Translate this.
- sender.sendMessage("Forcing " + user.getDisplayName() + " to run: /" + command + " " + getFinalArg(arguments, 0));
+ sender.sendMessage(_("sudoRun", user.getDisplayName(), command, getFinalArg(arguments, 0)));
final PluginCommand execCommand = ess.getServer().getPluginCommand(command);
if (execCommand != null)
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java b/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java
index 144d19d15..25c457a20 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java
@@ -2,7 +2,6 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.Console;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
@@ -25,7 +24,7 @@ public class Commandtempban extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
final User user = getPlayer(server, args, 0, true);
- if (user.getBase() instanceof OfflinePlayer)
+ if (!user.isOnline())
{
if (sender instanceof Player
&& !ess.getUser(sender).isAuthorized("essentials.tempban.offline"))
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java
index f98343311..3240b73a9 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java
@@ -1,7 +1,6 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
@@ -28,7 +27,7 @@ public class Commandtogglejail extends EssentialsCommand
if (args.length >= 2 && !player.isJailed())
{
- if (player.getBase() instanceof OfflinePlayer)
+ if (!player.isOnline())
{
if (sender instanceof Player
&& !ess.getUser(sender).isAuthorized("essentials.togglejail.offline"))
@@ -45,7 +44,7 @@ public class Commandtogglejail extends EssentialsCommand
return;
}
}
- if (!(player.getBase() instanceof OfflinePlayer))
+ if (player.isOnline())
{
ess.getJails().sendToJail(player, args[1]);
}
@@ -96,7 +95,7 @@ public class Commandtogglejail extends EssentialsCommand
player.setJailTimeout(0);
player.sendMessage(_("jailReleasedPlayerNotify"));
player.setJail(null);
- if (!(player.getBase() instanceof OfflinePlayer))
+ if (player.isOnline())
{
player.getTeleport().back();
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java
index 7ea3f0541..72739966b 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java
@@ -30,6 +30,11 @@ public class Commandtp extends EssentialsCommand
{
throw new Exception(_("teleportDisabled", player.getDisplayName()));
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().getIsWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + player.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + player.getWorld().getName()));
+ }
user.sendMessage(_("teleporting"));
final Trade charge = new Trade(this.getName(), ess);
charge.isAffordableFor(user);
@@ -37,10 +42,9 @@ public class Commandtp extends EssentialsCommand
throw new NoChargeException();
default:
- if (!user.isAuthorized("essentials.tpohere"))
+ if (!user.isAuthorized("essentials.tp.others"))
{
- //TODO: Translate this
- throw new Exception("You need access to /tpohere to teleport other players.");
+ throw new Exception(_("noPerm", "essentials.tp.others"));
}
user.sendMessage(_("teleporting"));
final User target = getPlayer(server, args, 0);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java
index 34195d51a..97fa15d5c 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java
@@ -36,6 +36,11 @@ public class Commandtpa extends EssentialsCommand
player.sendMessage(_("teleportRequestTimeoutInfo", ess.getSettings().getTpaAcceptCancellation()));
}
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().getIsWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + player.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + player.getWorld().getName()));
+ }
user.sendMessage(_("requestSent", player.getDisplayName()));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java
index 891742043..449ae7489 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java
@@ -1,7 +1,6 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import org.bukkit.Server;
@@ -21,7 +20,7 @@ public class Commandtpaccept extends EssentialsCommand
final User target = user.getTeleportRequest();
if (target == null
- || target.getBase() instanceof OfflinePlayer
+ || !target.isOnline()
|| (user.isTeleportRequestHere() && !target.isAuthorized("essentials.tpahere"))
|| (!user.isTeleportRequestHere() && !target.isAuthorized("essentials.tpa") && !target.isAuthorized("essentials.tpaall"))
)
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java
index 7c13b80d4..5edbe274d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java
@@ -1,7 +1,6 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import org.bukkit.Server;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@@ -25,7 +24,7 @@ public class Commandtpo extends EssentialsCommand
//Just basically the old tp command
final User player = getPlayer(server, args, 0, true);
// Check if user is offline
- if (player.getBase() instanceof OfflinePlayer)
+ if (!player.isOnline())
{
throw new NoSuchFieldException(_("playerNotFound"));
}
@@ -33,6 +32,11 @@ public class Commandtpo extends EssentialsCommand
// Verify permission
if (!player.isHidden() || user.isAuthorized("essentials.teleport.hidden"))
{
+ if (user.getWorld() != player.getWorld() && ess.getSettings().getIsWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + player.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + player.getWorld().getName()));
+ }
user.getTeleport().now(player, false, TeleportCause.COMMAND);
user.sendMessage(_("teleporting"));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java
index e226f0702..6183bcf74 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java
@@ -1,7 +1,6 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import org.bukkit.Server;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@@ -26,7 +25,7 @@ public class Commandtpohere extends EssentialsCommand
final User player = getPlayer(server, args, 0, true);
// Check if user is offline
- if (player.getBase() instanceof OfflinePlayer)
+ if (!player.isOnline())
{
throw new NoSuchFieldException(_("playerNotFound"));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java
index 62641172b..84df12900 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java
@@ -115,7 +115,10 @@ public class Commandwarp extends EssentialsCommand
private void warpUser(final User owner, final User user, final String name) throws Exception
{
- final Trade charge = new Trade("warp-" + name.toLowerCase(Locale.ENGLISH).replace('_', '-'), ess);
+ final Trade chargeWarp = new Trade("warp-" + name.toLowerCase(Locale.ENGLISH).replace('_', '-'), ess);
+ final Trade chargeCmd = new Trade(this.getName(), ess);
+ final double fullCharge = chargeWarp.getCommandCost(user) + chargeCmd.getCommandCost(user);
+ final Trade charge = new Trade(fullCharge, ess);
charge.isAffordableFor(owner);
if (ess.getSettings().getPerWarpPermission() && !owner.isAuthorized("essentials.warp." + name))
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java
index 7e211455e..8adc4c95c 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java
@@ -3,6 +3,7 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
+import com.earth2me.essentials.craftbukkit.SetExpFix;
import java.util.Locale;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
@@ -54,14 +55,20 @@ public class Commandwhois extends EssentialsCommand
sender.sendMessage("");
sender.sendMessage(_("whoisIs", user.getDisplayName(), user.getName()));
sender.sendMessage(_("whoisHealth", user.getHealth()));
+ sender.sendMessage(_("whoisExp", SetExpFix.getTotalExperience(user), user.getLevel()));
sender.sendMessage(_("whoisOP", (user.isOp() ? _("true") : _("false"))));
sender.sendMessage(_("whoisGod", (user.isGodModeEnabled() ? _("true") : _("false"))));
sender.sendMessage(_("whoisGamemode", _(user.getGameMode().toString().toLowerCase(Locale.ENGLISH))));
sender.sendMessage(_("whoisLocation", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ()));
if (!ess.getSettings().isEcoDisabled())
{
- sender.sendMessage(_("whoisMoney", Util.formatCurrency(user.getMoney(), ess)));
+ sender.sendMessage(_("whoisMoney", Util.displayCurrency(user.getMoney(), ess)));
}
+ sender.sendMessage(_("whoisJail", (user.isJailed()
+ ? user.getJailTimeout() > 0
+ ? Util.formatDateDiff(user.getJailTimeout())
+ : _("true")
+ : _("false"))));
sender.sendMessage(user.isAfk()
? _("whoisStatusAway")
: _("whoisStatusAvailable"));
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandworld.java b/Essentials/src/com/earth2me/essentials/commands/Commandworld.java
index 41554c8ce..c160e0a7a 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandworld.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandworld.java
@@ -54,13 +54,9 @@ public class Commandworld extends EssentialsCommand
}
}
- if (ess.getSettings().getIsWorldTeleportPermissions())
+ if (ess.getSettings().getIsWorldTeleportPermissions() && !user.isAuthorized("essentials.world." + world.getName()))
{
- if (!user.isAuthorized("essentials.world." + world.getName()))
- {
- user.sendMessage(_("invalidWorld")); //TODO: Make a "world teleport denied" translation
- throw new NoChargeException();
- }
+ throw new Exception(_("noPerm", "essentials.world." + world.getName()));
}
double factor;
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java
index 586b31873..c8573ba25 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java
@@ -51,14 +51,14 @@ public class Commandworth extends EssentialsCommand
? _("worthMeta",
iStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""),
iStack.getDurability(),
- Util.formatCurrency(worth * amount, ess),
+ Util.displayCurrency(worth * amount, ess),
amount,
- Util.formatCurrency(worth, ess))
+ Util.displayCurrency(worth, ess))
: _("worth",
iStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""),
- Util.formatCurrency(worth * amount, ess),
+ Util.displayCurrency(worth * amount, ess),
amount,
- Util.formatCurrency(worth, ess)));
+ Util.displayCurrency(worth, ess)));
}
@Override
@@ -95,14 +95,14 @@ public class Commandworth extends EssentialsCommand
? _("worthMeta",
iStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""),
iStack.getDurability(),
- Util.formatCurrency(worth * amount, ess),
+ Util.displayCurrency(worth * amount, ess),
amount,
- Util.formatCurrency(worth, ess))
+ Util.displayCurrency(worth, ess))
: _("worth",
iStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""),
- Util.formatCurrency(worth * amount, ess),
+ Util.displayCurrency(worth * amount, ess),
amount,
- Util.formatCurrency(worth, ess)));
+ Util.displayCurrency(worth, ess)));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java
index 13328e1b5..6bc0649e9 100644
--- a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java
+++ b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java
@@ -3,7 +3,6 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.IEssentialsModule;
-import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import java.util.List;
@@ -31,7 +30,7 @@ public abstract class EssentialsCommand implements IEssentialsCommand
{
this.ess = ess;
}
-
+
@Override
public void setEssentialsModule(final IEssentialsModule module)
{
@@ -62,7 +61,7 @@ public abstract class EssentialsCommand implements IEssentialsCommand
final User user = ess.getUser(args[pos]);
if (user != null)
{
- if (!getOffline && (user.getBase() instanceof OfflinePlayer || user.isHidden()))
+ if (!getOffline && (!user.isOnline() || user.isHidden()))
{
throw new NoSuchFieldException(_("playerNotFound"));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/WarpNotFoundException.java b/Essentials/src/com/earth2me/essentials/commands/WarpNotFoundException.java
new file mode 100644
index 000000000..bfba73818
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/commands/WarpNotFoundException.java
@@ -0,0 +1,16 @@
+package com.earth2me.essentials.commands;
+
+import static com.earth2me.essentials.I18n._;
+
+public class WarpNotFoundException extends Exception
+{
+ public WarpNotFoundException()
+ {
+ super(_("warpNotExist"));
+ }
+
+ public WarpNotFoundException(String message)
+ {
+ super(message);
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeExplosion.java b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeExplosion.java
deleted file mode 100644
index 934d94fa2..000000000
--- a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeExplosion.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.earth2me.essentials.craftbukkit;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import net.minecraft.server.ChunkPosition;
-import net.minecraft.server.Packet60Explosion;
-import org.bukkit.Location;
-import org.bukkit.Server;
-import org.bukkit.block.Block;
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityExplodeEvent;
-
-
-public class FakeExplosion
-{
- public static void createExplosion(final EntityExplodeEvent event, final Server server, final Player[] players)
- {
- try
- {
- final Set<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
- final List<ChunkPosition> blocksUnderPlayers = new ArrayList<ChunkPosition>(players.length);
- final Location loc = event.getLocation();
- for (Player player : players)
- {
- if (player.getWorld().equals(loc.getWorld()))
- {
- blocksUnderPlayers.add(new ChunkPosition(player.getLocation().getBlockX(), player.getLocation().getBlockY() - 1, player.getLocation().getBlockZ()));
- }
- }
- for (Block block : event.blockList())
- {
- final ChunkPosition cp = new ChunkPosition(block.getX(), block.getY(), block.getZ());
- if (!blocksUnderPlayers.contains(cp))
- {
- set.add(cp);
- }
- }
- ((CraftServer)server).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0F, set));
- }
- catch (Throwable ex)
- {
- Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
- }
- }
-}
diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java
index 91e5d5239..fee9d41e3 100644
--- a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java
+++ b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java
@@ -627,4 +627,10 @@ public class FakeWorld implements World
{
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public void setBiome(int arg0, int arg1, Biome arg2)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java b/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java
index 5b1161851..70d15b856 100644
--- a/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java
+++ b/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java
@@ -5,6 +5,8 @@ import org.bukkit.entity.Player;
public class SetExpFix
{
+ //This method is used to update both the recorded total experience and displayed total experience.
+ //We reset both types to prevent issues.
public static void setTotalExperience(final Player player, final int exp)
{
if (exp < 0)
@@ -14,6 +16,9 @@ public class SetExpFix
player.setExp(0);
player.setLevel(0);
player.setTotalExperience(0);
+
+ //This following code is technically redundant now, as bukkit now calulcates levels more or less correctly
+ //At larger numbers however... player.getExp(3000), only seems to give 2999, putting the below calculations off.
int amount = exp;
while (amount > 0)
{
@@ -44,6 +49,8 @@ public class SetExpFix
return 7 + (level * 7 >> 1);
}
+ //This method is required because the bukkit player.getTotalExperience() method, shows exp that has been 'spent'.
+ //Without this people would be able to use exp and then still sell it.
public static int getTotalExperience(final Player player)
{
int exp = (int) (getExpToLevel(player) * player.getExp());
diff --git a/Essentials/src/com/earth2me/essentials/metrics/Metrics.java b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java
new file mode 100644
index 000000000..a5de7816c
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java
@@ -0,0 +1,539 @@
+package com.earth2me.essentials.metrics;
+
+/*
+ * Copyright 2011 Tyler Blair. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+ * following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+ * disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the authors and contributors and
+ * should not be interpreted as representing official policies, either expressed or implied, of anybody else.
+ */
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginDescriptionFile;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.Proxy;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.UUID;
+
+
+/**
+ * <p> The metrics class obtains data about a plugin and submits statistics about it to the metrics backend. </p> <p>
+ * Public methods provided by this class: </p>
+ * <code>
+ * Graph createGraph(String name); <br/>
+ * void addCustomData(Metrics.Plotter plotter); <br/>
+ * void start(); <br/>
+ * </code>
+ */
+public class Metrics
+{
+ /**
+ * The current revision number
+ */
+ private final static int REVISION = 5;
+ /**
+ * The base url of the metrics domain
+ */
+ private static final String BASE_URL = "http://metrics.essentials3.net";
+ /**
+ * The url used to report a server's status
+ */
+ private static final String REPORT_URL = "/report/%s";
+ /**
+ * The file where guid and opt out is stored in
+ */
+ private static final String CONFIG_FILE = "plugins/PluginMetrics/config.yml";
+ /**
+ * The separator to use for custom data. This MUST NOT change unless you are hosting your own version of metrics and
+ * want to change it.
+ */
+ private static final String CUSTOM_DATA_SEPARATOR = "~~";
+ /**
+ * Interval of time to ping (in minutes)
+ */
+ private final static int PING_INTERVAL = 10;
+ /**
+ * The plugin this metrics submits for
+ */
+ private final Plugin plugin;
+ /**
+ * All of the custom graphs to submit to metrics
+ */
+ private final Set<Graph> graphs = Collections.synchronizedSet(new HashSet<Graph>());
+ /**
+ * The default graph, used for addCustomData when you don't want a specific graph
+ */
+ private final Graph defaultGraph = new Graph("Default");
+ /**
+ * The plugin configuration file
+ */
+ private final YamlConfiguration configuration;
+ /**
+ * The plugin configuration file
+ */
+ private final File configurationFile;
+ /**
+ * Unique server id
+ */
+ private final String guid;
+
+ public Metrics(Plugin plugin) throws IOException
+ {
+ if (plugin == null)
+ {
+ throw new IllegalArgumentException("Plugin cannot be null");
+ }
+
+ this.plugin = plugin;
+
+ // load the config
+ configurationFile = new File(CONFIG_FILE);
+ configuration = YamlConfiguration.loadConfiguration(configurationFile);
+
+ // add some defaults
+ configuration.addDefault("opt-out", false);
+ configuration.addDefault("guid", UUID.randomUUID().toString());
+
+ // Do we need to create the file?
+ if (configuration.get("guid", null) == null)
+ {
+ configuration.options().header("http://metrics.griefcraft.com").copyDefaults(true);
+ configuration.save(configurationFile);
+ }
+
+ // Load the guid then
+ guid = configuration.getString("guid");
+ }
+
+ /**
+ * Construct and create a Graph that can be used to separate specific plotters to their own graphs on the metrics
+ * website. Plotters can be added to the graph object returned.
+ *
+ * @param name
+ * @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given
+ */
+ public Graph createGraph(String name)
+ {
+ if (name == null)
+ {
+ throw new IllegalArgumentException("Graph name cannot be null");
+ }
+
+ // Construct the graph object
+ Graph graph = new Graph(name);
+
+ // Now we can add our graph
+ graphs.add(graph);
+
+ // and return back
+ return graph;
+ }
+
+ /**
+ * Adds a custom data plotter to the default graph
+ *
+ * @param plotter
+ */
+ public void addCustomData(Plotter plotter)
+ {
+ if (plotter == null)
+ {
+ throw new IllegalArgumentException("Plotter cannot be null");
+ }
+
+ // Add the plotter to the graph o/
+ defaultGraph.addPlotter(plotter);
+
+ // Ensure the default graph is included in the submitted graphs
+ graphs.add(defaultGraph);
+ }
+
+ public boolean isOptOut()
+ {
+ return configuration.getBoolean("opt-out", false);
+ }
+
+ public void setOptOut(final boolean toggle) throws IOException
+ {
+ configuration.set("opt-out", toggle);
+ configuration.save(configurationFile);
+ }
+
+ /**
+ * Start measuring statistics. This will immediately create an async repeating task as the plugin and send the
+ * initial data to the metrics backend, and then after that it will post in increments of PING_INTERVAL * 1200
+ * ticks.
+ */
+ public void start()
+ {
+ // Did we opt out?
+ if (configuration.getBoolean("opt-out", false))
+ {
+ return;
+ }
+
+ // Begin hitting the server with glorious data
+ plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable()
+ {
+ private boolean firstPost = true;
+
+ public void run()
+ {
+ try
+ {
+ // We use the inverse of firstPost because if it is the first time we are posting,
+ // it is not a interval ping, so it evaluates to FALSE
+ // Each time thereafter it will evaluate to TRUE, i.e PING!
+ postPlugin(!firstPost);
+
+ // After the first post we set firstPost to false
+ // Each post thereafter will be a ping
+ firstPost = false;
+ }
+ catch (IOException e)
+ {
+ System.err.println("[Metrics] " + e.getMessage());
+ }
+ }
+ }, 0, PING_INTERVAL * 1200);
+ }
+
+ /**
+ * Generic method that posts a plugin to the metrics website
+ */
+ private void postPlugin(boolean isPing) throws IOException
+ {
+ // The plugin's description file containg all of the plugin data such as name, version, author, etc
+ PluginDescriptionFile description = plugin.getDescription();
+
+ // Construct the post data
+ String data = encode("guid") + '=' + encode(guid)
+ + encodeDataPair("version", description.getVersion())
+ + encodeDataPair("server", Bukkit.getVersion())
+ + encodeDataPair("players", Integer.toString(Bukkit.getServer().getOnlinePlayers().length))
+ + encodeDataPair("revision", String.valueOf(REVISION));
+
+ // If we're pinging, append it
+ if (isPing)
+ {
+ data += encodeDataPair("ping", "true");
+ }
+
+ // Acquire a lock on the graphs, which lets us make the assumption we also lock everything
+ // inside of the graph (e.g plotters)
+ synchronized (graphs)
+ {
+ Iterator<Graph> iter = graphs.iterator();
+
+ while (iter.hasNext())
+ {
+ Graph graph = iter.next();
+
+ // Because we have a lock on the graphs set already, it is reasonable to assume
+ // that our lock transcends down to the individual plotters in the graphs also.
+ // Because our methods are private, no one but us can reasonably access this list
+ // without reflection so this is a safe assumption without adding more code.
+ for (Plotter plotter : graph.getPlotters())
+ {
+ // The key name to send to the metrics server
+ // The format is C-GRAPHNAME-PLOTTERNAME where separator - is defined at the top
+ // Legacy (R4) submitters use the format Custom%s, or CustomPLOTTERNAME
+ String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), CUSTOM_DATA_SEPARATOR, plotter.getColumnName());
+
+ // The value to send, which for the foreseeable future is just the string
+ // value of plotter.getValue()
+ String value = Integer.toString(plotter.getValue());
+
+ // Add it to the http post data :)
+ data += encodeDataPair(key, value);
+ }
+ }
+ }
+
+ // Create the url
+ URL url = new URL(BASE_URL + String.format(REPORT_URL, description.getName()));
+
+ // Connect to the website
+ URLConnection connection;
+
+ // Mineshafter creates a socks proxy, so we can safely bypass it
+ // It does not reroute POST requests so we need to go around it
+ if (isMineshafterPresent())
+ {
+ connection = url.openConnection(Proxy.NO_PROXY);
+ }
+ else
+ {
+ connection = url.openConnection();
+ }
+
+ connection.setDoOutput(true);
+
+ // Write the data
+ OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
+ writer.write(data);
+ writer.flush();
+
+ // Now read the response
+ BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ String response = reader.readLine();
+
+ // close resources
+ writer.close();
+ reader.close();
+
+ if (response.startsWith("ERR"))
+ {
+ throw new IOException(response); //Throw the exception
+ }
+ else
+ {
+ // Is this the first update this hour?
+ if (response.contains("OK This is your first update this hour"))
+ {
+ synchronized (graphs)
+ {
+ Iterator<Graph> iter = graphs.iterator();
+
+ while (iter.hasNext())
+ {
+ Graph graph = iter.next();
+
+ for (Plotter plotter : graph.getPlotters())
+ {
+ plotter.reset();
+ }
+ }
+ }
+ }
+ }
+ //if (response.startsWith("OK")) - We should get "OK" followed by an optional description if everything goes right
+ }
+
+ /**
+ * Check if mineshafter is present. If it is, we need to bypass it to send POST requests
+ *
+ * @return
+ */
+ private boolean isMineshafterPresent()
+ {
+ try
+ {
+ Class.forName("mineshafter.MineServer");
+ return true;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+ }
+
+ /**
+ * <p>Encode a key/value data pair to be used in a HTTP post request. This INCLUDES a & so the first key/value pair
+ * MUST be included manually, e.g:</p>
+ * <code>
+ * String httpData = encode("guid") + '=' + encode("1234") + encodeDataPair("authors") + "..";
+ * </code>
+ *
+ * @param key
+ * @param value
+ * @return
+ */
+ private static String encodeDataPair(String key, String value) throws UnsupportedEncodingException
+ {
+ return '&' + encode(key) + '=' + encode(value);
+ }
+
+ /**
+ * Encode text as UTF-8
+ *
+ * @param text
+ * @return
+ */
+ private static String encode(String text) throws UnsupportedEncodingException
+ {
+ return URLEncoder.encode(text, "UTF-8");
+ }
+
+
+ /**
+ * Represents a custom graph on the website
+ */
+ public static class Graph
+ {
+ /**
+ * The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is
+ * rejected
+ */
+ private final String name;
+ /**
+ * The set of plotters that are contained within this graph
+ */
+ private final Set<Plotter> plotters = new LinkedHashSet<Plotter>();
+
+ private Graph(String name)
+ {
+ this.name = name;
+ }
+
+ /**
+ * Gets the graph's name
+ *
+ * @return
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * Add a plotter to the graph, which will be used to plot entries
+ *
+ * @param plotter
+ */
+ public void addPlotter(Plotter plotter)
+ {
+ plotters.add(plotter);
+ }
+
+ /**
+ * Remove a plotter from the graph
+ *
+ * @param plotter
+ */
+ public void removePlotter(Plotter plotter)
+ {
+ plotters.remove(plotter);
+ }
+
+ /**
+ * Gets an <b>unmodifiable</b> set of the plotter objects in the graph
+ *
+ * @return
+ */
+ public Set<Plotter> getPlotters()
+ {
+ return Collections.unmodifiableSet(plotters);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object object)
+ {
+ if (!(object instanceof Graph))
+ {
+ return false;
+ }
+
+ Graph graph = (Graph)object;
+ return graph.name.equals(name);
+ }
+ }
+
+
+ /**
+ * Interface used to collect custom data for a plugin
+ */
+ public static abstract class Plotter
+ {
+ /**
+ * The plot's name
+ */
+ private final String name;
+
+ /**
+ * Construct a plotter with the default plot name
+ */
+ public Plotter()
+ {
+ this("Default");
+ }
+
+ /**
+ * Construct a plotter with a specific plot name
+ *
+ * @param name
+ */
+ public Plotter(String name)
+ {
+ this.name = name;
+ }
+
+ /**
+ * Get the current value for the plotted point
+ *
+ * @return
+ */
+ public abstract int getValue();
+
+ /**
+ * Get the column name for the plotted point
+ *
+ * @return the plotted point's column name
+ */
+ public String getColumnName()
+ {
+ return name;
+ }
+
+ /**
+ * Called after the website graphs have been updated
+ */
+ public void reset()
+ {
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return getColumnName().hashCode() + getValue();
+ }
+
+ @Override
+ public boolean equals(Object object)
+ {
+ if (!(object instanceof Plotter))
+ {
+ return false;
+ }
+
+ Plotter plotter = (Plotter)object;
+ return plotter.name.equals(name) && plotter.getValue() == getValue();
+ }
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/metrics/MetricsListener.java b/Essentials/src/com/earth2me/essentials/metrics/MetricsListener.java
new file mode 100644
index 000000000..4af8f9173
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/metrics/MetricsListener.java
@@ -0,0 +1,40 @@
+package com.earth2me.essentials.metrics;
+
+import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.User;
+import java.util.logging.Level;
+import org.bukkit.Server;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+
+
+public class MetricsListener implements Listener
+{
+ private final transient Server server;
+ private final transient IEssentials ess;
+ private final transient MetricsStarter starter;
+
+ public MetricsListener(final IEssentials parent, final MetricsStarter starter)
+ {
+ this.ess = parent;
+ this.server = parent.getServer();
+ this.starter = starter;
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerJoin(final PlayerJoinEvent event)
+ {
+ final User player = ess.getUser(event.getPlayer());
+ if (ess.getSettings().isMetricsEnabled() == false && (player.isAuthorized("essentials.essentials") || player.isAuthorized("bukkit.broadcast.admin")))
+ {
+ player.sendMessage("PluginMetrics collects minimal statistic data, starting in about 5 minutes.");
+ player.sendMessage("To opt out, run /essentials opt-out");
+ ess.getLogger().log(Level.INFO, "[Metrics] Admin join - Starting 5 minute opt-out period.");
+ ess.getSettings().setMetricsEnabled(true);
+ ess.getScheduler().scheduleAsyncDelayedTask(ess, starter, 5 * 1200);
+ }
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java b/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java
new file mode 100644
index 000000000..d5f7d634a
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java
@@ -0,0 +1,196 @@
+package com.earth2me.essentials.metrics;
+
+import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.metrics.Metrics.Graph;
+import com.earth2me.essentials.metrics.Metrics.Plotter;
+import com.earth2me.essentials.register.payment.Method;
+import java.util.Locale;
+import java.util.logging.Level;
+
+
+public class MetricsStarter implements Runnable
+{
+ private final IEssentials ess;
+ private transient Boolean start;
+
+
+ private enum Modules
+ {
+ Essentials,
+ EssentialsChat,
+ EssentialsSpawn,
+ EssentialsProtect,
+ EssentialsGeoIP,
+ EssentialsXMPP
+ };
+
+ public MetricsStarter(final IEssentials plugin)
+ {
+ ess = plugin;
+ try
+ {
+
+ final Metrics metrics = new Metrics(ess);
+ ess.setMetrics(metrics);
+
+ if (!metrics.isOptOut())
+ {
+ if (ess.getSettings().isMetricsEnabled())
+ {
+ start = true;
+ }
+ else
+ {
+ ess.getLogger().info("This plugin collects minimal statistic data and sends it to http://metrics.essentials3.net.");
+ ess.getLogger().info("You can opt out by running /essentials opt-out");
+ ess.getLogger().info("This will start 5 minutes after the first admin/op joins.");
+ start = false;
+ }
+ return;
+ }
+ }
+ catch (Exception ex)
+ {
+ metricsError(ex);
+ }
+ }
+
+ @Override
+ public void run()
+ {
+ try
+ {
+ final Metrics metrics = ess.getMetrics();
+
+ final Graph moduleGraph = metrics.createGraph("Modules Used");
+ for (Modules module : Modules.values())
+ {
+ final String moduleName = module.toString();
+ if (ess.getServer().getPluginManager().isPluginEnabled(moduleName))
+ {
+ moduleGraph.addPlotter(new SimplePlotter(moduleName));
+ }
+ }
+
+ final Graph localeGraph = metrics.createGraph("Locale");
+ localeGraph.addPlotter(new SimplePlotter(ess.getI18n().getCurrentLocale().getDisplayLanguage(Locale.ENGLISH)));
+
+ final Graph featureGraph = metrics.createGraph("Features");
+ featureGraph.addPlotter(new Plotter("Unique Accounts")
+ {
+ @Override
+ public int getValue()
+ {
+ return ess.getUserMap().getUniqueUsers();
+ }
+ });
+ featureGraph.addPlotter(new Plotter("Jails")
+ {
+ @Override
+ public int getValue()
+ {
+ return ess.getJails().getCount();
+ }
+ });
+ featureGraph.addPlotter(new Plotter("Kits")
+ {
+ @Override
+ public int getValue()
+ {
+ return ess.getSettings().getKits().getKeys(false).size();
+ }
+ });
+ featureGraph.addPlotter(new Plotter("Warps")
+ {
+ @Override
+ public int getValue()
+ {
+ return ess.getWarps().getWarpNames().size();
+ }
+ });
+
+ final Graph enabledGraph = metrics.createGraph("EnabledFeatures");
+ enabledGraph.addPlotter(new SimplePlotter("Total"));
+ final String BKcommand = ess.getSettings().getBackupCommand();
+ if (BKcommand != null && !"".equals(BKcommand))
+ {
+ enabledGraph.addPlotter(new SimplePlotter("Backup"));
+ }
+ if (ess.getJails().getCount() > 0)
+ {
+ enabledGraph.addPlotter(new SimplePlotter("Jails"));
+ }
+ if (ess.getSettings().getKits().getKeys(false).size() > 0)
+ {
+ enabledGraph.addPlotter(new SimplePlotter("Kits"));
+ }
+ if (ess.getWarps().getWarpNames().size() > 0)
+ {
+ enabledGraph.addPlotter(new SimplePlotter("Warps"));
+ }
+ if (!ess.getSettings().areSignsDisabled())
+ {
+ enabledGraph.addPlotter(new SimplePlotter("Signs"));
+ }
+ if (ess.getSettings().getAutoAfk() > 0)
+ {
+ enabledGraph.addPlotter(new SimplePlotter("AutoAFK"));
+ }
+ if (ess.getSettings().changeDisplayName())
+ {
+ enabledGraph.addPlotter(new SimplePlotter("DisplayName"));
+ }
+ if (ess.getSettings().getChatRadius() >= 1)
+ {
+ enabledGraph.addPlotter(new SimplePlotter("LocalChat"));
+ }
+
+ final Graph depGraph = metrics.createGraph("Dependencies");
+ Method method = ess.getPaymentMethod().getMethod();
+ if (method != null)
+ {
+ depGraph.addPlotter(new SimplePlotter(method.getName() + " " + method.getVersion()));
+ }
+ depGraph.addPlotter(new SimplePlotter(ess.getPermissionsHandler().getName()));
+
+ metrics.start();
+
+ }
+ catch (Exception ex)
+ {
+ metricsError(ex);
+ }
+ }
+
+ public void metricsError(final Exception ex)
+ {
+ if (ess.getSettings().isDebug())
+ {
+ ess.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage(), ex);
+ }
+ else
+ {
+ ess.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage());
+ }
+ }
+
+ public Boolean getStart()
+ {
+ return start;
+ }
+
+
+ private class SimplePlotter extends Plotter
+ {
+ public SimplePlotter(final String name)
+ {
+ super(name);
+ }
+
+ @Override
+ public int getValue()
+ {
+ return 1;
+ }
+ }
+} \ No newline at end of file
diff --git a/Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java b/Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java
index 8c3cdf1e2..23fe142b2 100644
--- a/Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java
+++ b/Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java
@@ -3,6 +3,7 @@ package com.earth2me.essentials.perm;
import java.util.Arrays;
import java.util.List;
import org.anjocaido.groupmanager.GroupManager;
+import org.anjocaido.groupmanager.dataholder.worlds.WorldsHolder;
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
@@ -20,7 +21,7 @@ public class GroupManagerHandler implements IPermissionsHandler
@Override
public String getGroup(final Player base)
{
- final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
+ final AnjoPermissionsHandler handler = getHandler(base);
if (handler == null)
{
return null;
@@ -31,7 +32,7 @@ public class GroupManagerHandler implements IPermissionsHandler
@Override
public List<String> getGroups(final Player base)
{
- final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
+ final AnjoPermissionsHandler handler = getHandler(base);
if (handler == null)
{
return null;
@@ -42,7 +43,7 @@ public class GroupManagerHandler implements IPermissionsHandler
@Override
public boolean canBuild(final Player base, final String group)
{
- final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
+ final AnjoPermissionsHandler handler = getHandler(base);
if (handler == null)
{
return false;
@@ -53,7 +54,7 @@ public class GroupManagerHandler implements IPermissionsHandler
@Override
public boolean inGroup(final Player base, final String group)
{
- AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
+ AnjoPermissionsHandler handler = getHandler(base);
if (handler == null)
{
return false;
@@ -64,7 +65,7 @@ public class GroupManagerHandler implements IPermissionsHandler
@Override
public boolean hasPermission(final Player base, final String node)
{
- AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
+ AnjoPermissionsHandler handler = getHandler(base);
if (handler == null)
{
return false;
@@ -75,7 +76,7 @@ public class GroupManagerHandler implements IPermissionsHandler
@Override
public String getPrefix(final Player base)
{
- AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
+ AnjoPermissionsHandler handler = getHandler(base);
if (handler == null)
{
return null;
@@ -86,11 +87,21 @@ public class GroupManagerHandler implements IPermissionsHandler
@Override
public String getSuffix(final Player base)
{
- AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
+ AnjoPermissionsHandler handler = getHandler(base);
if (handler == null)
{
return null;
}
return handler.getUserSuffix(base.getName());
}
+
+ private AnjoPermissionsHandler getHandler(final Player base)
+ {
+ final WorldsHolder holder = groupManager.getWorldsHolder();
+ if (holder == null)
+ {
+ return null;
+ }
+ return holder.getWorldPermissions(base);
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java
index a344968c2..e1bf13d10 100644
--- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java
+++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java
@@ -210,4 +210,9 @@ public class PermissionsHandler implements IPermissionsHandler
{
this.useSuperperms = useSuperperms;
}
+
+ public String getName()
+ {
+ return handler.getClass().getSimpleName().replace("Handler", "");
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
index b0df73a42..21e70516e 100644
--- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
+++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
@@ -266,7 +266,7 @@ public class EssentialsSign
final Double money = trade.getMoney();
if (money != null)
{
- sign.setLine(index, Util.formatCurrency(money, ess));
+ sign.setLine(index, Util.shortCurrency(money, ess));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignDisposal.java b/Essentials/src/com/earth2me/essentials/signs/SignDisposal.java
index 77e6164e5..f44c6177a 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignDisposal.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignDisposal.java
@@ -2,7 +2,6 @@ package com.earth2me.essentials.signs;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
-import org.bukkit.event.inventory.InventoryType;
public class SignDisposal extends EssentialsSign
@@ -15,7 +14,7 @@ public class SignDisposal extends EssentialsSign
@Override
protected boolean onSignInteract(final ISign sign, final User player, final String username, final IEssentials ess)
{
- player.getBase().openInventory(ess.getServer().createInventory(player, InventoryType.CHEST));
+ player.getBase().openInventory(ess.getServer().createInventory(player, 36));
return true;
}
}
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignFree.java b/Essentials/src/com/earth2me/essentials/signs/SignFree.java
index a69b4155f..52e2b9540 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignFree.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignFree.java
@@ -4,6 +4,7 @@ import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
+import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
@@ -33,8 +34,8 @@ public class SignFree extends EssentialsSign
throw new SignException(_("cantSpawnItem", "Air"));
}
- item.setAmount(item.getType().getMaxStackSize() * 9 * 4);
- Inventory i = ess.getServer().createInventory(player, InventoryType.CHEST);
+ item.setAmount(item.getType().getMaxStackSize() * 36);
+ Inventory i = ess.getServer().createInventory(player, 36);
i.addItem(item);
player.openInventory(i);
Trade.log("Sign", "Free", "Interact", username, null, username, new Trade(item, ess), sign.getBlock().getLocation(), ess);
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignKit.java b/Essentials/src/com/earth2me/essentials/signs/SignKit.java
index 32a169592..102bd01b9 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignKit.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignKit.java
@@ -17,7 +17,7 @@ public class SignKit extends EssentialsSign
protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException
{
validateTrade(sign, 3, ess);
-
+
final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH);
if (kitName.isEmpty())
@@ -56,10 +56,9 @@ public class SignKit extends EssentialsSign
charge.isAffordableFor(player);
try
{
- final Object kit = ess.getSettings().getKit(kitName);
- final Map<String, Object> els = (Map<String, Object>)kit;
- final List<String> items = Kit.getItems(player, els);
- Kit.expandItems(ess, player, items);
+ final Map<String, Object> kit = ess.getSettings().getKit(kitName);
+ final List<String> items = Kit.getItems(player, kit);
+ Kit.expandItems(ess, player, items);
charge.charge(player);
}
catch (Exception ex)
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java
index 6b47ebc76..6ea4f5e80 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java
@@ -135,11 +135,11 @@ public class SignTrade extends EssentialsSign
final Double money = getMoney(split[0]);
if (money != null)
{
- if (Util.formatCurrency(money, ess).length() * 2 > 15)
+ if (Util.shortCurrency(money, ess).length() * 2 > 15)
{
throw new SignException("Line can be too long!");
}
- sign.setLine(index, Util.formatCurrency(money, ess) + ":0");
+ sign.setLine(index, Util.shortCurrency(money, ess) + ":0");
return;
}
}
@@ -155,7 +155,7 @@ public class SignTrade extends EssentialsSign
{
throw new SignException(_("moreThanZero"));
}
- sign.setLine(index, Util.formatCurrency(money, ess) + ":" + Util.formatCurrency(amount, ess).substring(1));
+ sign.setLine(index, Util.shortCurrency(money, ess) + ":" + Util.shortCurrency(amount, ess).substring(1));
return;
}
}
@@ -313,7 +313,7 @@ public class SignTrade extends EssentialsSign
final Double amount = getDouble(split[1]);
if (money != null && amount != null)
{
- final String newline = Util.formatCurrency(money, ess) + ":" + Util.formatCurrency(amount + value, ess).substring(1);
+ final String newline = Util.shortCurrency(money, ess) + ":" + Util.shortCurrency(amount + value, ess).substring(1);
if (newline.length() > 15)
{
throw new SignException("This sign is full: Line too long!");
diff --git a/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java b/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java
index efe66d585..6d4efd811 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java
@@ -50,7 +50,7 @@ public class HelpInput implements IText
final String node = "essentials." + k.getKey();
if (!ess.getSettings().isCommandDisabled(k.getKey()) && user.isAuthorized(node))
{
- lines.add("§c" + k.getKey() + "§7: " + k.getValue().get(DESCRIPTION));
+ lines.add(_("helpLine", k.getKey(), k.getValue().get(DESCRIPTION)));
}
}
else
@@ -69,7 +69,7 @@ public class HelpInput implements IText
}
if (user.isAuthorized("essentials.help." + pluginName))
{
- lines.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION));
+ lines.add(_("helpLine", k.getKey(), value.get(DESCRIPTION)));
}
else if (permissions instanceof List && !((List<Object>)permissions).isEmpty())
{
@@ -84,21 +84,21 @@ public class HelpInput implements IText
}
if (enabled)
{
- lines.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION));
+ lines.add(_("helpLine", k.getKey(), value.get(DESCRIPTION)));
}
}
else if (permissions instanceof String && !"".equals(permissions))
{
if (user.isAuthorized(permissions.toString()))
{
- lines.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION));
+ lines.add(_("helpLine", k.getKey(), value.get(DESCRIPTION)));
}
}
else
{
if (!ess.getSettings().hidePermissionlessHelp())
{
- lines.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION));
+ lines.add(_("helpLine", k.getKey(), value.get(DESCRIPTION)));
}
}
}
diff --git a/Essentials/src/com/earth2me/essentials/textreader/TextInput.java b/Essentials/src/com/earth2me/essentials/textreader/TextInput.java
index 316a0b576..6e9256b4c 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/TextInput.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/TextInput.java
@@ -74,7 +74,7 @@ public class TextInput implements IText
}
if (line.length() > 0 && line.charAt(0) == '#')
{
- bookmarks.put(line.substring(1).toLowerCase(Locale.ENGLISH).replaceAll("&[0-9a-f]", ""), lineNumber);
+ bookmarks.put(line.substring(1).toLowerCase(Locale.ENGLISH).replaceAll("&[0-9a-fk]", ""), lineNumber);
chapters.add(line.substring(1).replace('&', '§').replace("§§", "&"));
}
lines.add(line.replace('&', '§').replace("§§", "&"));
diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml
index 81d911c82..2bbb87afc 100644
--- a/Essentials/src/config.yml
+++ b/Essentials/src/config.yml
@@ -83,7 +83,7 @@ warn-on-smite: true
overridden-commands:
- god
-# Disabled commands will be completelly unavailable on the server.
+# Disabled commands will be completely unavailable on the server.
disabled-commands:
# - nick
@@ -158,12 +158,19 @@ player-commands:
# All kit names should be lower case, and will be treated as lower in permissions/costs.
# Times are measured in seconds.
kits:
- tools:
+ dtools:
delay: 10
items:
- 277 1
- 278 1
- 279 1
+ tools:
+ delay: 10
+ items:
+ - 272 1
+ - 273 1
+ - 274 1
+ - 275 1
# Essentials Sign Control
# See http://ess.khhq.net/wiki/Sign_Tutorial for instructions on how to use these.
@@ -243,7 +250,7 @@ death-messages: true
no-god-in-worlds:
# - world_nether
-# Set to true to enable per-world permissions for teleporting with /world
+# Set to true to enable per-world permissions for teleporting with /world, /tp ,/tpa and /tpo.
# Give someone permission to teleport to a world with essentials.world.<worldname>
world-teleport-permissions: false
@@ -319,9 +326,9 @@ currency-symbol: '$'
# The amount is always limited to 10 trillions because of the limitations of a java double
max-money: 10000000000000
-# Set the minimum amount of money a player can have
-# Setting this to 0, will disable overdrafts/loans compeltely. Users need 'essentials.eco.loan' perm to go below 0.
-min-money: -10000000000000
+# Set the minimum amount of money a player can have (must be above the negitive of max-money).
+# Setting this to 0, will disable overdrafts/loans completely. Users need 'essentials.eco.loan' perm to go below 0.
+min-money: -10000
# Enable this to log all interactions with trade/buy/sell signs and sell command
economy-log-enabled: false
@@ -547,6 +554,11 @@ newbies:
# When we spawn for the first time, which spawnpoint do we use?
# Set to "none" if you want to use the spawn point of the world.
spawnpoint: newbies
+
+ # Do we want to give users anything on first join? Set to '' to disable
+ # This kit will be given reguardless of cost, and permissions.
+ #kit: ''
+ kit: tools
# Set this to lowest, if you want Multiverse to handle the respawning
# Set this to high, if you want EssentialsSpawn to handle the respawning
diff --git a/Essentials/src/info.txt b/Essentials/src/info.txt
index efc629923..cfc037040 100644
--- a/Essentials/src/info.txt
+++ b/Essentials/src/info.txt
@@ -8,9 +8,12 @@ Name it info_username.txt or info_groupname.txt
This also works with motd and rules.
Extra pages:
-Type /info Colours
+Type /info Colors
Type /info Tags
+If you have problem viewing this file ingame, try using /einfo.
+If this works, it means another command is blocking /info.
+
It can contain chapters like the Chapter1 below:
#Chapter1
@@ -26,6 +29,7 @@ Minecraft colors:
&4 &&4 &5 &&5 &6 &&6 &7 &&7
&8 &&8 &9 &&9 &a &&a &b &&b
&c &&c &d &&d &e &&e &f &&f
+&&k &k Magic!
#Tags
PLAYER: {PLAYER}
diff --git a/Essentials/src/items.csv b/Essentials/src/items.csv
index 98c25c327..acec277cc 100644
--- a/Essentials/src/items.csv
+++ b/Essentials/src/items.csv
@@ -1461,6 +1461,9 @@ dragonegg,122,0
degg,122,0
bossegg,122,0
begg,122,0
+redstonelamp,123,0
+redlamp,123,0
+rslamp,123,0
ironshovel,256,0
ironspade,256,0
ishovel,256,0
@@ -2452,7 +2455,14 @@ squidegg,383,94
wolfegg,383,95
mooshroomegg,383,96
mushroomcowegg,383,96
+snowgolemegg,383,97
+ocelotegg,383,98
+irongolemegg,383,99
villageregg,383,120
+bottleofenchanting,384,0
+enchantingbottle,384,0
+expbottle,384,0
+xpbottle,384,0
goldmusicrecord,2256,0
goldmusicdisk,2256,0
goldmusiccd,2256,0
diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties
index f7958319d..02598c9cb 100644
--- a/Essentials/src/messages.properties
+++ b/Essentials/src/messages.properties
@@ -11,9 +11,9 @@ alertPlaced=placed:
alertUsed=used:
autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath=\u00a77Use the /back command to return to your death point.
+backUsageMsg=\u00a77Returning to previous location.
backupFinished=Backup finished
backupStarted=Backup started
-backUsageMsg=\u00a77Returning to previous location.
balance=\u00a77Balance: {0}
balanceTop=\u00a77Top balances ({0})
banExempt=\u00a7cYou can not ban that player.
@@ -49,6 +49,7 @@ couldNotFindTemplate=Could not find template {0}
creatingConfigFromTemplate=Creating config from template: {0}
creatingEmptyConfig=Creating empty config: {0}
creative=creative
+currency={0}{1}
day=day
days=days
defaultBanReason=The Ban Hammer has spoken!
@@ -64,14 +65,14 @@ depth=\u00a77You are at sea level.
depthAboveSea=\u00a77You are {0} block(s) above sea level.
depthBelowSea=\u00a77You are {0} block(s) below sea level.
destinationNotSet=Destination not set
+disableUnlimited=\u00a77Disabled unlimited placing of {0} for {1}.
disabled=disabled
disabledToSpawnMob=Spawning this mob was disabled in the config file.
-disableUnlimited=\u00a77Disabled unlimited placing of {0} for {1}.
dontMoveMessage=\u00a77Teleportation will commence in {0}. Don''t move.
downloadingGeoIp=Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB)
duplicatedUserdata=Duplicated userdata: {0} and {1}
-enabled=enabled
enableUnlimited=\u00a77Giving unlimited amount of {0} to {1}.
+enabled=enabled
enchantmentApplied = \u00a77The enchantment {0} has been applied to your item in hand.
enchantmentNotFound = \u00a7cEnchantment not found
enchantmentPerm = \u00a7cYou do not have the permission for {0}
@@ -99,9 +100,9 @@ gcentities= entities
gcfree=Free memory: {0} MB
gcmax=Maximum memory: {0} MB
gctotal=Allocated memory: {0} MB
-geoipJoinFormat=Player {0} comes from {1}
geoIpUrlEmpty=GeoIP download url is empty.
geoIpUrlInvalid=GeoIP download url is invalid.
+geoipJoinFormat=Player {0} comes from {1}
godDisabledFor=disabled for {0}
godEnabledFor=enabled for {0}
godMode=\u00a77God mode {0}.
@@ -109,12 +110,13 @@ haveBeenReleased=\u00a77You have been released
heal=\u00a77You have been healed.
healOther=\u00a77Healed {0}.
helpConsole=To view help from the console, type ?.
+helpLine=\u00a76/{0}\u00a7f: {1}
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
holeInFloor=Hole in floor
-homes=Homes: {0}
homeSet=\u00a77Home set.
homeSetToBed=\u00a77Your home is now set to this bed.
+homes=Homes: {0}
hour=hour
hours=hours
ignorePlayer=You ignore player {0} from now on.
@@ -124,28 +126,29 @@ infoChapterPages=Chapter {0}, page \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f:
infoFileDoesNotExist=File info.txt does not exist. Creating one for you.
infoPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
infoUnknownChapter=Unknown chapter.
+invBigger=The other users inventory is bigger than yours.
+invRestored=Your inventory has been restored.
+invSee=You see the inventory of {0}.
+invSeeHelp=Use /invsee to restore your inventory.
invalidCharge=\u00a7cInvalid charge.
+invalidHome=Home {0} doesn't exist
invalidMob=Invalid mob type.
invalidServer=Invalid server!
invalidSignLine=Line {0} on sign is invalid.
invalidWorld=\u00a7cInvalid world.
-invBigger=The other users inventory is bigger than yours.
inventoryCleared=\u00a77Inventory Cleared.
inventoryClearedOthers=\u00a77Inventory of \u00a7c{0}\u00a77 cleared.
-invRestored=Your inventory has been restored.
-invSee=You see the inventory of {0}.
-invSeeHelp=Use /invsee to restore your inventory.
is=is
itemCannotBeSold=That item cannot be sold to the server.
itemMustBeStacked=Item must be traded in stacks. A quantity of 2s would be two stacks, etc.
itemNotEnough1=\u00a7cYou do not have enough of that item to sell.
itemNotEnough2=\u00a77If you meant to sell all of your items of that type, use /sell itemname
itemNotEnough3=\u00a77/sell itemname -1 will sell all but one item, etc.
-itemsCsvNotLoaded=Could not load items.csv.
itemSellAir=You really tried to sell Air? Put an item in your hand.
itemSold=\u00a77Sold for \u00a7c{0} \u00a77({1} {2} at {3} each)
itemSoldConsole={0} sold {1} for \u00a77{2} \u00a77({3} items at {4} each)
itemSpawn=\u00a77Giving {0} of {1}
+itemsCsvNotLoaded=Could not load items.csv.
jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailMessage=\u00a7cYou do the crime, you do the time.
jailNotExist=That jail does not exist.
@@ -162,22 +165,23 @@ kitError=\u00a7cThere are no valid kits.
kitErrorHelp=\u00a7cPerhaps an item is missing a quantity in the configuration?
kitGive=\u00a77Giving kit {0}.
kitInvFull=\u00a7cYour inventory was full, placing kit on the floor
-kits=\u00a77Kits: {0}
kitTimed=\u00a7cYou can''t use that kit again for another {0}.
+kits=\u00a77Kits: {0}
lightningSmited=\u00a77You have just been smited
lightningUse=\u00a77Smiting {0}
listAfkTag = \u00a77[AFK]\u00a7f
listAmount = \u00a79There are \u00a7c{0}\u00a79 out of maximum \u00a7c{1}\u00a79 players online.
listAmountHidden = \u00a79There are \u00a7c{0}\u00a77/{1}\u00a79 out of maximum \u00a7c{2}\u00a79 players online.
+listGroupTag={0}\u00a7f:
listHiddenTag = \u00a77[HIDDEN]\u00a7f
loadWarpError=Failed to load warp {0}
localFormat=Local: <{0}> {1}
mailClear=\u00a7cTo mark your mail as read, type /mail clear
mailCleared=\u00a77Mail Cleared!
mailSent=\u00a77Mail sent!
+markMailAsRead=\u00a7cTo mark your mail as read, type /mail clear
markedAsAway=\u00a77You are now marked as away.
markedAsNotAway=\u00a77You are no longer marked as away.
-markMailAsRead=\u00a7cTo mark your mail as read, type /mail clear
maxHomes=You cannot set more than {0} homes.
mayNotJail=\u00a7cYou may not jail that person
me=me
@@ -185,10 +189,10 @@ minute=minute
minutes=minutes
missingItems=You do not have {0}x {1}.
missingPrefixSuffix=Missing a prefix or suffix for {0}
-mobsAvailable=\u00a77Mobs: {0}
mobSpawnError=Error while changing mob spawner.
mobSpawnLimit=Mob quantity limited to server limit
mobSpawnTarget=Target block must be a mob spawner.
+mobsAvailable=\u00a77Mobs: {0}
moneyRecievedFrom=\u00a7a{0} has been received from {1}
moneySentTo=\u00a7a{0} has been sent to {1}
moneyTaken={0} taken from your bank account.
@@ -196,12 +200,11 @@ month=month
months=months
moreThanZero=Quantities must be greater than 0.
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
+muteExempt=\u00a7cYou may not mute that player.
mutedPlayer=Player {0} muted.
mutedPlayerFor=Player {0} muted for {1}.
mutedUserSpeaks={0} tried to speak, but is muted.
-muteExempt=\u00a7cYou may not mute that player.
nearbyPlayers=Players nearby: {0}
-needTpohere=You need access to /tpohere to teleport other players.
negativeBalanceError=User is not allowed to have a negative balance.
nickChanged=Nickname changed.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
@@ -212,6 +215,7 @@ nickOthersPermission=\u00a7cYou do not have permission to change the nickname of
nickSet=\u00a77Your nickname is now \u00a7c{0}
noAccessCommand=\u00a7cYou do not have access to that command.
noAccessPermission=\u00a7cYou do not have permission to access that {0}.
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cYou do not have permission to destroy that {0}.
noGodWorldWarning=\u00a7cWarning! God mode in this world disabled.
noHelpFound=\u00a7cNo matching commands.
@@ -221,7 +225,6 @@ noKitPermission=\u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit
noKits=\u00a77There are no kits available yet
noMail=You do not have any mail
noMotd=\u00a7cThere is no message of the day.
-none=none
noNewMail=\u00a77You have no new mail.
noPendingRequest=You do not have a pending request.
noPerm=\u00a7cYou do not have the \u00a7f{0}\u00a7c permission.
@@ -229,21 +232,30 @@ noPermToSpawnMob=\u00a7cYou don''t have permission to spawn this mob.
noPlacePermission=\u00a7cYou do not have permission to place a block near that sign.
noPowerTools=You have no power tools assigned.
noRules=\u00a7cThere are no rules specified yet.
+noWarpsDefined=No warps defined
+none=none
notAllowedToQuestion=\u00a7cYou are not authorized to use question.
notAllowedToShout=\u00a7cYou are not authorized to shout.
notEnoughExperience=You do not have enough experience.
notEnoughMoney=You do not have sufficient funds.
-nothingInHand = \u00a7cYou have nothing in your hand.
notRecommendedBukkit= * ! * Bukkit version is not the recommended build for Essentials.
notSupportedYet=Not supported yet.
+nothingInHand = \u00a7cYou have nothing in your hand.
now=now
-noWarpsDefined=No warps defined
nuke=May death rain upon them
numberRequired=A number goes there, silly.
onlyDayNight=/time only supports day/night.
onlyPlayers=Only in-game players can use {0}.
onlySunStorm=/weather only supports sun/storm.
orderBalances=Ordering balances of {0} users, please wait ...
+pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
+pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
+pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
+pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
+pTimePlayers=These players have their own time:
+pTimeReset=Player time has been reset for: \u00a7e{0}
+pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
+pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError=Error parsing {0} on line {1}
pendingTeleportCancelled=\u00a7cPending teleportation request cancelled.
permissionsError=Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled.
@@ -271,14 +283,6 @@ powerToolRemoveAll=All commands removed from {0}.
powerToolsDisabled=All of your power tools have been disabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Protection owner: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
-pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
-pTimePlayers=These players have their own time:
-pTimeReset=Player time has been reset for: \u00a7e{0}
-pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
-pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Question]\u00a7f {0}
readNextPage=Type /{0} {1} to read the next page
reloadAllPlugins=\u00a77Reloaded all plugins.
@@ -294,7 +298,7 @@ requestDenied=\u00a77Teleport request denied.
requestDeniedFrom=\u00a77{0} denied your teleport request.
requestSent=\u00a77Request sent to {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=second
seconds=seconds
@@ -312,8 +316,10 @@ signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
similarWarpExist=A warp with a similar name already exists.
slimeMalformedSize=Malformed size.
soloMob=That mob likes to be alone
-spawned=spawned
spawnSet=\u00a77Spawn location set for group {0}.
+spawned=spawned
+sudoExempt=You cannot sudo this user
+sudoRun=Forcing {0} to run: /{1} {2}
suicideMessage=\u00a77Goodbye Cruel World...
suicideSuccess= \u00a77{0} took their own life
survival=survival
@@ -321,20 +327,20 @@ takenFromAccount=\u00a7c{0} has been taken from your account.
takenFromOthersAccount=\u00a7c{0} taken from {1}\u00a7c account. New balance: {2}
teleportAAll=\u00a77Teleporting request sent to all players...
teleportAll=\u00a77Teleporting all players...
-teleportationCommencing=\u00a77Teleportation commencing...
-teleportationDisabled=\u00a77Teleportation disabled.
-teleportationEnabled=\u00a77Teleportation enabled.
teleportAtoB=\u00a77{0}\u00a77 teleported you to {1}\u00a77.
teleportDisabled={0} has teleportation disabled.
teleportHereRequest=\u00a7c{0}\u00a7c has requested that you teleport to them.
-teleporting=\u00a77Teleporting...
-teleportingPortal=\u00a77Teleporting via portal.
teleportNewPlayerError=Failed to teleport new player
teleportRequest=\u00a7c{0}\u00a7c has requested to teleport to you.
teleportRequestTimeoutInfo=\u00a77This request will timeout after {0} seconds.
teleportTop=\u00a77Teleporting to top.
-tempbanExempt=\u00a77You may not tempban that player
+teleportationCommencing=\u00a77Teleportation commencing...
+teleportationDisabled=\u00a77Teleportation disabled.
+teleportationEnabled=\u00a77Teleportation enabled.
+teleporting=\u00a77Teleporting...
+teleportingPortal=\u00a77Teleporting via portal.
tempBanned=Temporarily banned from server for {0}
+tempbanExempt=\u00a77You may not tempban that player
thunder= You {0} thunder in your world
thunderDuration=You {0} thunder in your world for {1} seconds.
timeBeforeHeal=Time before next heal: {0}
@@ -365,36 +371,39 @@ unlimitedItemPermission=\u00a7cNo permission for unlimited item {0}.
unlimitedItems=Unlimited items:
unmutedPlayer=Player {0} unmuted.
upgradingFilesError=Error while upgrading the files
-userdataMoveBackError=Failed to move userdata/{0}.tmp to userdata/{1}
-userdataMoveError=Failed to move userdata/{0} to userdata/{1}.tmp
userDoesNotExist=The user {0} does not exist.
userIsAway={0} is now AFK
userIsNotAway={0} is no longer AFK
userJailed=\u00a77You have been jailed
userUsedPortal={0} used an existing exit portal.
+userdataMoveBackError=Failed to move userdata/{0}.tmp to userdata/{1}
+userdataMoveError=Failed to move userdata/{0} to userdata/{1}.tmp
usingTempFolderForTesting=Using temp folder for testing:
versionMismatch=Version mismatch! Please update {0} to the same version.
versionMismatchAll=Version mismatch! Please update all Essentials jars to the same version.
voiceSilenced=\u00a77Your voice has been silenced
warpDeleteError=Problem deleting the warp file.
-warpingTo=\u00a77Warping to {0}.
warpListPermission=\u00a7cYou do not have Permission to list warps.
warpNotExist=That warp does not exist.
-warps=Warps: {0}
-warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
+warpOverwrite=\u00a7cYou cannot overwrite that warp.
warpSet=\u00a77Warp {0} set.
warpUsePermission=\u00a7cYou do not have Permission to use that warp.
+warpingTo=\u00a77Warping to {0}.
+warps=Warps: {0}
+warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherStorm=\u00a77You set the weather to storm in {0}
weatherStormFor=\u00a77You set the weather to storm in {0} for {1} seconds
weatherSun=\u00a77You set the weather to sun in {0}
weatherSunFor=\u00a77You set the weather to sun in {0} for {1} seconds
whoisBanned=\u00a79 - Banned: {0}
+whoisExp=\u00a79 - Exp: {0} (Level {1})
whoisGamemode=\u00a79 - Gamemode: {0}
whoisGeoLocation=\u00a79 - Location: {0}
whoisGod=\u00a79 - God mode: {0}
whoisHealth=\u00a79 - Health: {0}/20
whoisIPAddress=\u00a79 - IP Address: {0}
whoisIs={0} is {1}
+whoisJail=\u00a79 - Jail: {0}
whoisLocation=\u00a79 - Location: ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Money: {0}
whoisOP=\u00a79 - OP: {0}
diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties
index 0d8260947..fd4803d3f 100644
--- a/Essentials/src/messages_da.properties
+++ b/Essentials/src/messages_da.properties
@@ -11,9 +11,9 @@ alertPlaced=placerede:
alertUsed=brugte:
autoAfkKickReason=Du er blevet kicked for at idle mere end {0} minutter.
backAfterDeath=\u00a77Brug /back kommandoen for at teleportere til dit d\u00f8dspunkt.
+backUsageMsg=\u00a77Teleporterer til tidligere placering.
backupFinished=Backup sluttet
backupStarted=Backup startet
-backUsageMsg=\u00a77Teleporterer til tidligere placering.
balance=\u00a77Saldo: {0}
balanceTop=\u00a77Top saldoer ({0})
banExempt=\u00a7cDu kan ikke banne den p\u00e5g\u00e6ldende spiller.
@@ -49,6 +49,7 @@ couldNotFindTemplate=Kunne ikke finde skabelon {0}
creatingConfigFromTemplate=Opretter config fra skabelon: {0}
creatingEmptyConfig=Opretter tom config: {0}
creative=creative
+currency={0}{1}
day=dag
days=dage
defaultBanReason=Banhammeren har talt!
@@ -64,14 +65,14 @@ depth=\u00a77Du er ved havoverfladen.
depthAboveSea=\u00a77Du er {0} blok(ke) over havets overflade.
depthBelowSea=\u00a77Du er {0} blok(ke) under havets overflade.
destinationNotSet=Destination ikke sat
+disableUnlimited=\u00a77Deaktiverede ubergr\u00e6nset placering af {0} for {1}.
disabled=deaktiveret
disabledToSpawnMob=Skabelse af denne mob er deaktiveret i configfilen.
-disableUnlimited=\u00a77Deaktiverede ubergr\u00e6nset placering af {0} for {1}.
dontMoveMessage=\u00a77Teleportering vil begynde om {0}. Bev\u00e6g dig ikke.
downloadingGeoIp=Downloader GeoIP database... det her kan tage et stykke tid (land: 0.6 MB, by: 27MB)
duplicatedUserdata=Duplikerede userdata: {0} og {1}
-enabled=aktiveret
enableUnlimited=\u00a77Giver ubegr\u00e6nset m\u00e6ngde af {0} til {1}.
+enabled=aktiveret
enchantmentApplied = \u00a77Enchantment {0} er blevet tilf\u00c3\u00b8jet til tingen i din h\u00c3\u00a5nd.
enchantmentNotFound = \u00a7cEnchantment ikke fundet.
enchantmentPerm = \u00a7cDu har ikke tilladelse til at {0}
@@ -99,9 +100,9 @@ gcentities= entities
gcfree=Free memory: {0} MB
gcmax=Maximum memory: {0} MB
gctotal=Allocated memory: {0} MB
-geoipJoinFormat=Spilleren {0} kommer fra {1}
geoIpUrlEmpty=GeoIP download url er tom.
geoIpUrlInvalid=GeoIP download url er ugyldig.
+geoipJoinFormat=Spilleren {0} kommer fra {1}
godDisabledFor=deaktiveret for {0}
godEnabledFor=aktiveret for {0}
godMode=\u00a77Gud mode {0}.
@@ -109,12 +110,13 @@ haveBeenReleased=\u00a77Du er blevet l\u00f8sladt
heal=\u00a77Du er blevet healed.
healOther=\u00a77Healed {0}.
helpConsole=For at se hj\u00e6lp fra konsolen, skriv ?.
+helpLine=\u00a76/{0}\u00a7f: {1}
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f:
holeInFloor=Hul i gulv
-homes=Hjem: {0}
homeSet=\u00a77Hjem sat.
homeSetToBed=\u00a77Dit hjem er nu sat til denne seng.
+homes=Hjem: {0}
hour=time
hours=timer
ignorePlayer=Du ignorerer spiller {0} fra nu af.
@@ -124,28 +126,29 @@ infoChapterPages=Kapitel {0}, side \u00a7c{1}\u00a7f af \u00a7c{2}\u00a7f:
infoFileDoesNotExist=Fil info.txt eksisterer ikke. Fixer liiige en for dig.
infoPages=Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f:
infoUnknownChapter=Ukendt kapitel.
+invBigger=Den anden brugers inventory er st\u00f8rre end din.
+invRestored=Din inventory er blevet genoprettet.
+invSee=Du ser {0}''s inventory.
+invSeeHelp=Brug /invsee for at genoprette din inventory.
invalidCharge=\u00a7cUgyldig opladning (korrekt oversat?).
+invalidHome=Home {0} doesn't exist
invalidMob=Ugyldig mob type.
invalidServer=Ugyldig server!
invalidSignLine=Linje {0} p\u00e5 skilt er ugyldig.
invalidWorld=\u00a7cUgyldig verden.
-invBigger=Den anden brugers inventory er st\u00f8rre end din.
inventoryCleared=\u00a77Inventory ryddet.
inventoryClearedOthers=\u00a7c{0}\u00a77''s inventory ryddet.
-invRestored=Din inventory er blevet genoprettet.
-invSee=Du ser {0}''s inventory.
-invSeeHelp=Brug /invsee for at genoprette din inventory.
is=er
itemCannotBeSold=Denne ting kan ikke s\u00e6lges til serveren.
itemMustBeStacked=Tingen skal handles i stakke. En m\u00e6ngde af 2s ville v\u00e6re to stakke, osv.
itemNotEnough1=\u00a7cDu har ikke nok af denne ting til at kunne s\u00e6lge.
itemNotEnough2=\u00a77Hvis du mente, at du ville s\u00c3\u00a6lge alle ting af den type, brug da /sell tingens-navn
itemNotEnough3=\u00a77/sell ting-navn -1 vil s\u00e6lge alle enheder, undtagen \u00c3\u00a9n, osv.
-itemsCsvNotLoaded=Kunne ikke loade items.csv.
itemSellAir=Fors\u00f8gte du virkelig at s\u00e6lge luft? Kom en ting i h\u00e5nden, hattemand.
itemSold=\u00a77Solgte til \u00a7c{0} \u00a77({1} {2} ting for {3} pr. stk.)
itemSoldConsole={0} solgte {1} til \u00a77{2} \u00a77({3} ting for {4} pr. stk.)
itemSpawn=\u00a77Giver {0} af {1}
+itemsCsvNotLoaded=Kunne ikke loade items.csv.
jailAlreadyIncarcerated=\u00a7cSpilleren er allerede i f\u00c3\u00a6ngsel: {0}
jailMessage=\u00a7cDu bryder reglerne, du tager straffen.
jailNotExist=Det f\u00e6ngsel eksisterer ikke.
@@ -162,22 +165,23 @@ kitError=\u00a7cDer er ikke nogen gyldige kits.
kitErrorHelp=\u00a7cM\u00e5ske mangler en ting en m\u00e6ngde i konfigurationen? Eller m\u00c3\u00a5ske er der nisser p\u00c3\u00a5 spil?
kitGive=\u00a77Giver kit til {0} (oversat korrekt?).
kitInvFull=\u00a7cDin inventory er fuld, placerer kit p\u00e5 gulvet.
-kits=\u00a77Kits: {0}
kitTimed=\u00a7cDu kan ikke benytte dette kit igen i {0}.
+kits=\u00a77Kits: {0}
lightningSmited=\u00a77Du er blevet ramt af Guds vrede (din admin)
lightningUse=\u00a77Kaster lyn efter {0}
listAfkTag = \u00a77[AFK]\u00a7f
listAmount = \u00a79Der er \u00a7c{0}\u00a79 ud af maksimum\u00a7c{1}\u00a79 spillere online.
listAmountHidden = \u00a79Der er \u00a7c{0}\u00a77/{1}\u00a79 ud af maksimum \u00a7c{2}\u00a79 spillere online.
+listGroupTag={0}\u00a7f:
listHiddenTag = \u00a77[HIDDEN]\u00a7f
loadWarpError=Kunne ikke l\u00c3\u00a6se warp {0}
localFormat=Local: <{0}> {1}
mailClear=\u00a7cFor at markere din flaskepost som l\u00e6st, skriv /mail clear
mailCleared=\u00a77Flaskepot ryddet!
mailSent=\u00a77Flaskepot sendt!
+markMailAsRead=\u00a7cFor at markere din flaskepost som l\u00e6st, skriv /mail clear
markedAsAway=\u00a77Du er nu markeret som v\u00c3\u00a6rende ikke tilstede.
markedAsNotAway=\u00a77Du er ikke l\u00e6ngere markeret som v\u00c3\u00a6rende ikke tilstede.
-markMailAsRead=\u00a7cFor at markere din flaskepost som l\u00e6st, skriv /mail clear
maxHomes=Du kan ikke have mere end {0} hjem.
mayNotJail=\u00a7cDu kan ikke smide denne person i f\u00c3\u00a6ngsel.
me=mig
@@ -185,10 +189,10 @@ minute=minut
minutes=minutter
missingItems=Du har ikke {0}x {1}.
missingPrefixSuffix=Mangler et pr\u00e6fiks eller suffiks for {0}
-mobsAvailable=\u00a77Mobs: {0}
mobSpawnError=Fejl ved \u00e6ndring af mob spawner.
mobSpawnLimit=Mob m\u00e6ngde begr\u00e6nset til serverens fastsatte gr\u00e6nse.
mobSpawnTarget=M\u00e5l blok skal v\u00e6re en mob spawner.
+mobsAvailable=\u00a77Mobs: {0}
moneyRecievedFrom=\u00a7a{0} er modtaget fra {1}
moneySentTo=\u00a7a{0} er sendt til {1}
moneyTaken={0} blev taget fra din bankkonto.
@@ -196,12 +200,11 @@ month=m\u00e5nede
months=m\u00e5neder
moreThanZero=M\u00e6ngder skal v\u00e6re st\u00f8rre end 0.
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
+muteExempt=\u00a7cDu kan ikke mute denne spiller.
mutedPlayer=Spiller {0} muted.
mutedPlayerFor=Spiller {0} muted i {1}.
mutedUserSpeaks={0} pr\u00f8vede at snakke, men er muted.
-muteExempt=\u00a7cDu kan ikke mute denne spiller.
nearbyPlayers=Spillere i n\u00c3\u00a6rheden: {0}
-needTpohere=Du skal have adgang til /tpohere for at teleportere andre spillere.
negativeBalanceError=Brugeren har ikke tilladelse til at have en negativ saldo.
nickChanged=Nickname \u00e6ndret.
nickDisplayName=\u00a77Du bliver n\u00c3\u00b8dt til at aktivere change-displayname i Essentials config.
@@ -212,6 +215,7 @@ nickOthersPermission=\u00a7cDu har ikke tilladelse til at \u00e6ndre en andens n
nickSet=\u00a77Dit nickname er nu \u00a7c{0}
noAccessCommand=\u00a7cDu har ikke adgang til denne kommando.
noAccessPermission=\u00a7cDu har ikke tilladelse til at f\u00e5 adgang til {0}.
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cDu har ikke tilladelse til at \u00f8del\u00e6gge {0}.
noGodWorldWarning=\u00a7cAdvarsel! God mode er sl\u00c3\u00a5et fra i denne verden.
noHelpFound=\u00a7cIngen matchende kommandoer.
@@ -221,7 +225,6 @@ noKitPermission=\u00a7cDu har brug for \u00a7c{0}\u00a7c permission for at bruge
noKits=\u00a77Der er ikke nogen kits tilg\u00e6ngelige endnu
noMail=Du har ikke noget flaskepost.
noMotd=\u00a7cDer er ingen Message of the day.
-none=ingen
noNewMail=\u00a77Du har ingen ny flaskepost.
noPendingRequest=Du har ikke en ventende anmodning.
noPerm=\u00a7cDu har ikke \u00a7f{0}\u00a7c permission.
@@ -229,21 +232,30 @@ noPermToSpawnMob=\u00a7cDu har ikke tilladelse til at spawne denne mob.
noPlacePermission=\u00a7cDu har ikke tiladelse til at placere en block n\u00c3\u00a6r det skilt.
noPowerTools= Du har ingen power tools tilf\u00c3\u00b8jet.
noRules=\u00a7cDer er ingen regler endnu. ANARKI!
+noWarpsDefined=Ingen warps er defineret
+none=ingen
notAllowedToQuestion=\u00a7cDu har ikke tilladelse til at bruge sp\u00f8rgsm\u00e5l.
notAllowedToShout=\u00a7cDu har ikke tilladelse til at r\u00e5be.
notEnoughExperience=You do not have enough experience.
notEnoughMoney=Du har ikke tilstr\u00e6kkeligt med penge.
-nothingInHand = \u00a7cDu har intet i din h\u00c3\u00a5nd.
notRecommendedBukkit=* ! * Bukkit version er ikke den anbefalede build til Essentials.
notSupportedYet=Ikke underst\u00f8ttet endnu.
+nothingInHand = \u00a7cDu har intet i din h\u00c3\u00a5nd.
now=nu
-noWarpsDefined=Ingen warps er defineret
nuke=May death rain upon them
numberRequired=Et nummer skal v\u00e6re, din tardo.
onlyDayNight=/time underst\u00f8tter kun day/night.
onlyPlayers=Kun in-game spillere kan bruge {0}.
onlySunStorm=/weather underst\u00c3\u00b8tter kun sun/storm.
orderBalances=Tjekker saldoer af {0} spillere, vent venligst...
+pTimeCurrent=\u00a7e{0}''s\u00a7f Tiden er {1}.
+pTimeCurrentFixed=\u00a7e{0}''s\u00a7f Tiden er fastsat til {1}.
+pTimeNormal=\u00a7e{0}''s\u00a7f Tiden er normal og matcher serveren.
+pTimeOthersPermission=\u00a7cDu har ikke tilladelse til at \u00c3\u00a6ndre andre spilleres tid.
+pTimePlayers=Disse spillere har deres egen tid:
+pTimeReset=Spiler-tid er blevet nulstillet for: \u00a7e{0} (oversat korrekt?)
+pTimeSet=Spiller-tid er blevet sat til \u00a73{0}\u00a7f for: \u00a7e{1} (oversat korrekt?)
+pTimeSetFixed=Spiller-tid er fastsat til \u00a73{0}\u00a7f for: \u00a7e{1}
parseError=Fejl ved parsing af {0} p\u00e5 linje {1}
pendingTeleportCancelled=\u00a7cAnmodning om teleport er blevet afvist.
permissionsError=Mangler Permissions/GroupManager; chat pr\u00e6fikser/suffikser vil v\u00e6re deaktiveret.
@@ -271,14 +283,6 @@ powerToolRemoveAll=Alle kommandoer fjernet fra {0}.
powerToolsDisabled= Alle dine power tools er blevet deaktiveret.
powerToolsEnabled= Alle dine power tools er blevet aktiveret.
protectionOwner=\u00a76[EssentialsProtect] Protection owner: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f Tiden er {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f Tiden er fastsat til {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f Tiden er normal og matcher serveren.
-pTimeOthersPermission=\u00a7cDu har ikke tilladelse til at \u00c3\u00a6ndre andre spilleres tid.
-pTimePlayers=Disse spillere har deres egen tid:
-pTimeReset=Spiler-tid er blevet nulstillet for: \u00a7e{0} (oversat korrekt?)
-pTimeSet=Spiller-tid er blevet sat til \u00a73{0}\u00a7f for: \u00a7e{1} (oversat korrekt?)
-pTimeSetFixed=Spiller-tid er fastsat til \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Sp\u00f8rgsm\u00e5l]\u00a7f {0}
readNextPage=Skriv /{0} {1} for at l\u00c3\u00a6se n\u00c3\u00a6ste side.
reloadAllPlugins=\u00a77Reload alle plugins.
@@ -294,7 +298,7 @@ requestDenied=\u00a77Anmodning om teleport afvist.
requestDeniedFrom=\u00a77{0} afviste din anmodning om teleport.
requestSent=\u00a77Anmodning sendt til {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=sekund
seconds=sekunder
@@ -312,8 +316,10 @@ signProtectInvalidLocation=\u00a74Du har ikke tilladelse til at lave et skilt he
similarWarpExist=En warp med dette navn eksisterer allerede.
slimeMalformedSize=Forkert st\u00f8rrelse. (Korrekt oversat?)
soloMob=Denne mob kan godt lide at v\u00e6re alene. Den hygger sig.
-spawned=spawnet
spawnSet=\u00a77Spawnplacering fastsat for gruppe: {0}.
+spawned=spawnet
+sudoExempt=You cannot sudo this user
+sudoRun=Forcing {0} to run: /{1} {2}
suicideMessage=\u00a77Farvel grusomme verden...
suicideSuccess= \u00a77{0} tog sit eget liv
survival=survival
@@ -321,20 +327,20 @@ takenFromAccount=\u00a7c{0} er blevet taget fra din konto.
takenFromOthersAccount=\u00a7c{0} taken from {1}\u00a7c account. New balance: {2}
teleportAAll=\u00a77Anmodning om teleport er sendt til alle spillere.
teleportAll=\u00a77Teleporterer alle spillere...
-teleportationCommencing=\u00a77Teleport begynder...
-teleportationDisabled=\u00a77Teleport deaktiveret.
-teleportationEnabled=\u00a77Teleport aktiveret.
teleportAtoB=\u00a77{0}\u00a77 teleporterede dig til {1}\u00a77.
teleportDisabled={0} har ikke teleportation aktiveret.
teleportHereRequest=\u00a7c{0}\u00a7c har anmodet om, at du teleporterer dig til ham/hende.
-teleporting=\u00a77Teleporterer...
-teleportingPortal=\u00a77Teleporterede via portal.
teleportNewPlayerError=Fejlede ved teleportering af ny spiller
teleportRequest=\u00a7c{0}\u00a7c har anmodet om at teleportere til dig.
teleportRequestTimeoutInfo=\u00a77This request will timeout after {0} seconds.
teleportTop=\u00a77Teleporterer til toppen.
-tempbanExempt=\u00a77Du m\u00c3\u00a5 ikke tempbanne denne spiller! Slemme, slemme du!
+teleportationCommencing=\u00a77Teleport begynder...
+teleportationDisabled=\u00a77Teleport deaktiveret.
+teleportationEnabled=\u00a77Teleport aktiveret.
+teleporting=\u00a77Teleporterer...
+teleportingPortal=\u00a77Teleporterede via portal.
tempBanned=Midlertidigt bannet fra serveren for {0}
+tempbanExempt=\u00a77Du m\u00c3\u00a5 ikke tempbanne denne spiller! Slemme, slemme du!
thunder= Du har nu {0} torden i din verden
thunderDuration=Du har nu {0} torden i din verden i {1} sekunder.
timeBeforeHeal=Tid f\u00c3\u00b8r du kan heale igen: {0}
@@ -365,36 +371,39 @@ unlimitedItemPermission=\u00a7cIngen tilladelse til ubegr\u00e6nset ting {0}.
unlimitedItems=Ubegr\u00c3\u00a6nsede ting:
unmutedPlayer=Spilleren {0} unmuted.
upgradingFilesError=Fejl under opgradering af filerne.
-userdataMoveBackError=Kunne ikke flytte userdata/{0}.tmp til userdata/{1}
-userdataMoveError=Kunne ikke flytte userdata/{0} til userdata/{1}.tmp
userDoesNotExist=Brugeren {0} eksisterer ikke.
userIsAway={0} er nu AFK. Skub ham i havet eller bur ham inde!
userIsNotAway={0} er ikke l\u00e6ngere AFK.
userJailed=\u00a77Du er blevet f\u00e6ngslet.
userUsedPortal={0} brugte en eksisterende udgangsportal.
+userdataMoveBackError=Kunne ikke flytte userdata/{0}.tmp til userdata/{1}
+userdataMoveError=Kunne ikke flytte userdata/{0} til userdata/{1}.tmp
usingTempFolderForTesting=Bruger temp-mappe til testing:
versionMismatch=Versioner matcher ikke! Opdater venligst {0} til den nyeste version.
versionMismatchAll=Versioner matcher ikke! Opdater venligst alle Essentials jar-filer til samme version.
voiceSilenced=\u00a77Din stemme er blevet gjort stille.
warpDeleteError=Ah, shit; kunne sgu ikke fjerne warp-filen. Jeg giver en \u00c3\u00b8l i lufthavnen.
-warpingTo=\u00a77Warper til {0}.
warpListPermission=\u00a7cDu har ikke tilladelse til at vise listen over warps.
warpNotExist=Den warp eksisterer ikke.
-warps=Warps: {0}
-warpsCount=\u00a77Der er {0} warps. Viser side {1} af {2}.
+warpOverwrite=\u00a7cYou cannot overwrite that warp.
warpSet=\u00a77Warp {0} sat.
warpUsePermission=\u00a7cDu har ikke tilladelse til at benytte den warp.
+warpingTo=\u00a77Warper til {0}.
+warps=Warps: {0}
+warpsCount=\u00a77Der er {0} warps. Viser side {1} af {2}.
weatherStorm=\u00a77Du har sat vejret til ''storm'' i {0}
weatherStormFor=\u00a77Du har sat vejret til ''storm'' i {0} i {1} sekunder
weatherSun=\u00a77Du har sat vejret til ''sol'' i {0}
weatherSunFor=\u00a77Du har sat vejret til ''sol'' i {0} i {1} sekunder
whoisBanned=\u00a79 - Banned: {0}
+whoisExp=\u00a79 - Exp: {0} (Level {1})
whoisGamemode=\u00a79 - Gamemode: {0}
whoisGeoLocation=\u00a79 - Placering: {0}
whoisGod=\u00a79 - God mode: {0}
whoisHealth=\u00a79 - Health: {0}/20
whoisIPAddress=\u00a79 - IP-Adresse: {0}
whoisIs={0} er {1}
+whoisJail=\u00a79 - Jail: {0}
whoisLocation=\u00a79 - Placering: ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Saldo: {0}
whoisOP=\u00a79 - OP: {0}
diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties
index 815972f03..767f028fd 100644
--- a/Essentials/src/messages_de.properties
+++ b/Essentials/src/messages_de.properties
@@ -49,6 +49,7 @@ couldNotFindTemplate=Vorlage {0} konnte nicht gefunden werden.
creatingConfigFromTemplate=Erstelle Konfiguration aus Vorlage: {0}
creatingEmptyConfig=Erstelle leere Konfiguration: {0}
creative=creative
+currency={0}{1}
day=Tag
days=Tage
defaultBanReason=Der Bann-Hammer hat gesprochen!
@@ -109,6 +110,7 @@ haveBeenReleased=\u00a77Du wurdest frei gelassen.
heal=\u00a77Du wurdest geheilt.
healOther=\u00a77{0} geheilt.
helpConsole=Um die Hilfe der Konsole zu sehen, schreibe ?.
+helpLine=\u00a76/{0}\u00a7f: {1}
helpOp=\u00a7c[Hilfe]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f:
holeInFloor=Loch im Boden
@@ -129,6 +131,7 @@ invRestored=Dein Inventar wurde wieder hergestellt.
invSee=Du siehst das Inventar von {0}.
invSeeHelp=Benutze /invsee um dein Inventar wiederherzustellen.
invalidCharge=\u00a7cUng\u00fcltige Verf\u00fcgung.
+invalidHome=Home {0} doesn't exist
invalidMob=Ung\u00fcltiger Monstername.
invalidServer=Ung\u00fcltiger Server!
invalidSignLine=Die Zeile {0} auf dem Schild ist falsch.
@@ -169,6 +172,7 @@ lightningUse=\u00a77Peinige {0}
listAfkTag = \u00a77[Inaktiv]\u00a7f
listAmount = \u00a79Es sind \u00a7c{0}\u00a79 von maximal \u00a7c{1}\u00a79 Spielern online.
listAmountHidden = \u00a79Es sind \u00a7c{0}\u00a77/{1}\u00a79 von maximal \u00a7c{2}\u00a79 Spielern online.
+listGroupTag={0}\u00a7f:
listHiddenTag = \u00a77[Versteckt]\u00a7f
loadWarpError=Fehler beim Laden von Warp-Punkt {0}
localFormat=Lokal: <{0}> {1}
@@ -201,7 +205,6 @@ mutedPlayer=Player {0} ist nun stumm.
mutedPlayerFor=Player {0} ist nun stumm f\u00fcr {1}.
mutedUserSpeaks={0} versuchte zu sprechen, aber ist stumm geschaltet.
nearbyPlayers=Players nearby: {0}
-needTpohere=Du brauchst Zugriff auf /tpohere um andere Spieler teleportieren zu k\u00f6nnen.
negativeBalanceError=Spieler darf keine Schulden machen.
nickChanged=Nickname ge\u00e4ndert.
nickDisplayName=\u00a77Du musst \u00a7fchange-displayname\u00a7c in der Essentials-Config aktivieren.
@@ -212,6 +215,7 @@ nickOthersPermission=\u00a7cDu hast keine Rechte um den Nicknamen von anderen zu
nickSet=\u00a77Dein Nickname ist nun \u00a7c{0}
noAccessCommand=\u00a7cDu hast keinen Zugriff auf diesen Befehl.
noAccessPermission=\u00a7cDu hast keine Rechte, den Block {0} zu \u00f6ffnen.
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cDu hast keine Rechte, den Block {0} zu zerst\u00f6ren.
noGodWorldWarning=\u00a7cWarning! God mode in this world disabled.
noHelpFound=\u00a7cKeine \u00fcbereinstimmenden Kommandos.
@@ -294,7 +298,7 @@ requestDenied=\u00a77Teleportierungsanfrage verweigert.
requestDeniedFrom=\u00a77{0} hat deine Teleportierungsanfrage abgelehnt.
requestSent=\u00a77Anfrage gesendet an {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=Sekunde
seconds=Sekunden
@@ -314,6 +318,8 @@ slimeMalformedSize=Ung\u00fcltige Gr\u00f6sse.
soloMob=Das Monster m\u00f6chte allein sein.
spawnSet=\u00a77Spawn-Punkt gesetzt f\u00fcr Gruppe {0}.
spawned=erzeugt
+sudoExempt=You cannot sudo this user
+sudoRun=Forcing {0} to run: /{1} {2}
suicideMessage=\u00a77Lebewohl grausame Welt...
suicideSuccess= \u00a77{0} hat sich das Leben genommen.
survival=survival
@@ -379,6 +385,7 @@ voiceSilenced=\u00a77Du bist stumm
warpDeleteError=Fehler beim L\u00f6schen der Warp-Datei.
warpListPermission=\u00a7cDu hast keine Berechtigung, die Warp-Punkte anzuzeigen.
warpNotExist=Warp-Punkt existiert nicht.
+warpOverwrite=\u00a7cYou cannot overwrite that warp.
warpSet=\u00a77Warp-Punkt {0} wurde erstellt.
warpUsePermission=\u00a7cDu hast keinen Zugriff f\u00fcr diesen Warp-Punkt.
warpingTo=\u00a77Teleportiere zu Warp-Punkt {0}.
@@ -395,6 +402,7 @@ whoisGod=\u00a79 - God mode: {0}
whoisHealth=\u00a79 - Gesundheit: {0}/20
whoisIPAddress=\u00a79 - IP-Adresse: {0}
whoisIs={0} ist {1}
+whoisJail=\u00a79 - Jail: {0}
whoisLocation=\u00a79 - Position: ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Geldb\u00f6rse: {0}
whoisOP=\u00a79 - OP: {0}
@@ -407,3 +415,4 @@ year=Jahr
years=Jahre
youAreHealed=\u00a77Du wurdest geheilt.
youHaveNewMail=\u00a7cDu hast {0} Nachrichten!\u00a7f Schreibe \u00a77/mail read\u00a7f um deine Nachrichten anzuzeigen.
+whoisExp=\u00a79 - Exp: {0} (Level {1})
diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties
index dfc7600dc..0a64b2308 100644
--- a/Essentials/src/messages_en.properties
+++ b/Essentials/src/messages_en.properties
@@ -11,9 +11,9 @@ alertPlaced=placed:
alertUsed=used:
autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath=\u00a77Use the /back command to return to your death point.
+backUsageMsg=\u00a77Returning to previous location.
backupFinished=Backup finished
backupStarted=Backup started
-backUsageMsg=\u00a77Returning to previous location.
balance=\u00a77Balance: {0}
balanceTop=\u00a77Top balances ({0})
banExempt=\u00a7cYou can not ban that player.
@@ -49,6 +49,7 @@ couldNotFindTemplate=Could not find template {0}
creatingConfigFromTemplate=Creating config from template: {0}
creatingEmptyConfig=Creating empty config: {0}
creative=creative
+currency={0}{1}
day=day
days=days
defaultBanReason=The Ban Hammer has spoken!
@@ -64,14 +65,14 @@ depth=\u00a77You are at sea level.
depthAboveSea=\u00a77You are {0} block(s) above sea level.
depthBelowSea=\u00a77You are {0} block(s) below sea level.
destinationNotSet=Destination not set
+disableUnlimited=\u00a77Disabled unlimited placing of {0} for {1}.
disabled=disabled
disabledToSpawnMob=Spawning this mob was disabled in the config file.
-disableUnlimited=\u00a77Disabled unlimited placing of {0} for {1}.
dontMoveMessage=\u00a77Teleportation will commence in {0}. Don''t move.
downloadingGeoIp=Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB)
duplicatedUserdata=Duplicated userdata: {0} and {1}
-enabled=enabled
enableUnlimited=\u00a77Giving unlimited amount of {0} to {1}.
+enabled=enabled
enchantmentApplied = \u00a77The enchantment {0} has been applied to your item in hand.
enchantmentNotFound = \u00a7cEnchantment not found
enchantmentPerm = \u00a7cYou do not have the permission for {0}
@@ -99,9 +100,9 @@ gcentities= entities
gcfree=Free memory: {0} MB
gcmax=Maximum memory: {0} MB
gctotal=Allocated memory: {0} MB
-geoipJoinFormat=Player {0} comes from {1}
geoIpUrlEmpty=GeoIP download url is empty.
geoIpUrlInvalid=GeoIP download url is invalid.
+geoipJoinFormat=Player {0} comes from {1}
godDisabledFor=disabled for {0}
godEnabledFor=enabled for {0}
godMode=\u00a77God mode {0}.
@@ -109,12 +110,13 @@ haveBeenReleased=\u00a77You have been released
heal=\u00a77You have been healed.
healOther=\u00a77Healed {0}.
helpConsole=To view help from the console, type ?.
+helpLine=\u00a76/{0}\u00a7f: {1}
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
holeInFloor=Hole in floor
-homes=Homes: {0}
homeSet=\u00a77Home set.
homeSetToBed=\u00a77Your home is now set to this bed.
+homes=Homes: {0}
hour=hour
hours=hours
ignorePlayer=You ignore player {0} from now on.
@@ -124,28 +126,29 @@ infoChapterPages=Chapter {0}, page \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f:
infoFileDoesNotExist=File info.txt does not exist. Creating one for you.
infoPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
infoUnknownChapter=Unknown chapter.
+invBigger=The other users inventory is bigger than yours.
+invRestored=Your inventory has been restored.
+invSee=You see the inventory of {0}.
+invSeeHelp=Use /invsee to restore your inventory.
invalidCharge=\u00a7cInvalid charge.
+invalidHome=Home {0} doesn't exist
invalidMob=Invalid mob type.
invalidServer=Invalid server!
invalidSignLine=Line {0} on sign is invalid.
invalidWorld=\u00a7cInvalid world.
-invBigger=The other users inventory is bigger than yours.
inventoryCleared=\u00a77Inventory Cleared.
inventoryClearedOthers=\u00a77Inventory of \u00a7c{0}\u00a77 cleared.
-invRestored=Your inventory has been restored.
-invSee=You see the inventory of {0}.
-invSeeHelp=Use /invsee to restore your inventory.
is=is
itemCannotBeSold=That item cannot be sold to the server.
itemMustBeStacked=Item must be traded in stacks. A quantity of 2s would be two stacks, etc.
itemNotEnough1=\u00a7cYou do not have enough of that item to sell.
itemNotEnough2=\u00a77If you meant to sell all of your items of that type, use /sell itemname
itemNotEnough3=\u00a77/sell itemname -1 will sell all but one item, etc.
-itemsCsvNotLoaded=Could not load items.csv.
itemSellAir=You really tried to sell Air? Put an item in your hand.
itemSold=\u00a77Sold for \u00a7c{0} \u00a77({1} {2} at {3} each)
itemSoldConsole={0} sold {1} for \u00a77{2} \u00a77({3} items at {4} each)
itemSpawn=\u00a77Giving {0} of {1}
+itemsCsvNotLoaded=Could not load items.csv.
jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailMessage=\u00a7cYou do the crime, you do the time.
jailNotExist=That jail does not exist.
@@ -162,22 +165,23 @@ kitError=\u00a7cThere are no valid kits.
kitErrorHelp=\u00a7cPerhaps an item is missing a quantity in the configuration?
kitGive=\u00a77Giving kit {0}.
kitInvFull=\u00a7cYour inventory was full, placing kit on the floor
-kits=\u00a77Kits: {0}
kitTimed=\u00a7cYou can''t use that kit again for another {0}.
+kits=\u00a77Kits: {0}
lightningSmited=\u00a77You have just been smited
lightningUse=\u00a77Smiting {0}
listAfkTag = \u00a77[AFK]\u00a7f
listAmount = \u00a79There are \u00a7c{0}\u00a79 out of maximum \u00a7c{1}\u00a79 players online.
listAmountHidden = \u00a79There are \u00a7c{0}\u00a77/{1}\u00a79 out of maximum \u00a7c{2}\u00a79 players online.
+listGroupTag={0}\u00a7f:
listHiddenTag = \u00a77[HIDDEN]\u00a7f
loadWarpError=Failed to load warp {0}
localFormat=Local: <{0}> {1}
mailClear=\u00a7cTo mark your mail as read, type /mail clear
mailCleared=\u00a77Mail Cleared!
mailSent=\u00a77Mail sent!
+markMailAsRead=\u00a7cTo mark your mail as read, type /mail clear
markedAsAway=\u00a77You are now marked as away.
markedAsNotAway=\u00a77You are no longer marked as away.
-markMailAsRead=\u00a7cTo mark your mail as read, type /mail clear
maxHomes=You cannot set more than {0} homes.
mayNotJail=\u00a7cYou may not jail that person
me=me
@@ -185,10 +189,10 @@ minute=minute
minutes=minutes
missingItems=You do not have {0}x {1}.
missingPrefixSuffix=Missing a prefix or suffix for {0}
-mobsAvailable=\u00a77Mobs: {0}
mobSpawnError=Error while changing mob spawner.
mobSpawnLimit=Mob quantity limited to server limit
mobSpawnTarget=Target block must be a mob spawner.
+mobsAvailable=\u00a77Mobs: {0}
moneyRecievedFrom=\u00a7a{0} has been received from {1}
moneySentTo=\u00a7a{0} has been sent to {1}
moneyTaken={0} taken from your bank account.
@@ -196,12 +200,11 @@ month=month
months=months
moreThanZero=Quantities must be greater than 0.
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
+muteExempt=\u00a7cYou may not mute that player.
mutedPlayer=Player {0} muted.
mutedPlayerFor=Player {0} muted for {1}.
mutedUserSpeaks={0} tried to speak, but is muted.
-muteExempt=\u00a7cYou may not mute that player.
nearbyPlayers=Players nearby: {0}
-needTpohere=You need access to /tpohere to teleport other players.
negativeBalanceError=User is not allowed to have a negative balance.
nickChanged=Nickname changed.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
@@ -212,6 +215,7 @@ nickOthersPermission=\u00a7cYou do not have permission to change the nickname of
nickSet=\u00a77Your nickname is now \u00a7c{0}
noAccessCommand=\u00a7cYou do not have access to that command.
noAccessPermission=\u00a7cYou do not have permission to access that {0}.
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cYou do not have permission to destroy that {0}.
noGodWorldWarning=\u00a7cWarning! God mode in this world disabled.
noHelpFound=\u00a7cNo matching commands.
@@ -221,7 +225,6 @@ noKitPermission=\u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit
noKits=\u00a77There are no kits available yet
noMail=You do not have any mail
noMotd=\u00a7cThere is no message of the day.
-none=none
noNewMail=\u00a77You have no new mail.
noPendingRequest=You do not have a pending request.
noPerm=\u00a7cYou do not have the \u00a7f{0}\u00a7c permission.
@@ -229,21 +232,30 @@ noPermToSpawnMob=\u00a7cYou don''t have permission to spawn this mob.
noPlacePermission=\u00a7cYou do not have permission to place a block near that sign.
noPowerTools=You have no power tools assigned.
noRules=\u00a7cThere are no rules specified yet.
+noWarpsDefined=No warps defined
+none=none
notAllowedToQuestion=\u00a7cYou are not authorized to use question.
notAllowedToShout=\u00a7cYou are not authorized to shout.
notEnoughExperience=You do not have enough experience.
notEnoughMoney=You do not have sufficient funds.
-nothingInHand = \u00a7cYou have nothing in your hand.
notRecommendedBukkit=* ! * Bukkit version is not the recommended build for Essentials.
notSupportedYet=Not supported yet.
+nothingInHand = \u00a7cYou have nothing in your hand.
now=now
-noWarpsDefined=No warps defined
nuke=May death rain upon them
numberRequired=A number goes there, silly.
onlyDayNight=/time only supports day/night.
onlyPlayers=Only in-game players can use {0}.
onlySunStorm=/weather only supports sun/storm.
orderBalances=Ordering balances of {0} users, please wait ...
+pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
+pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
+pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
+pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
+pTimePlayers=These players have their own time:
+pTimeReset=Player time has been reset for: \u00a7e{0}
+pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
+pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError=Error parsing {0} on line {1}
pendingTeleportCancelled=\u00a7cPending teleportation request cancelled.
permissionsError=Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled.
@@ -271,14 +283,6 @@ powerToolRemoveAll=All commands removed from {0}.
powerToolsDisabled=All of your power tools have been enabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Protection owner: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
-pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
-pTimePlayers=These players have their own time:
-pTimeReset=Player time has been reset for: \u00a7e{0}
-pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
-pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Question]\u00a7f {0}
readNextPage=Type /{0} {1} to read the next page
reloadAllPlugins=\u00a77Reloaded all plugins.
@@ -294,7 +298,7 @@ requestDenied=\u00a77Teleport request denied.
requestDeniedFrom=\u00a77{0} denied your teleport request
requestSent=\u00a77Request sent to {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=second
seconds=seconds
@@ -312,8 +316,10 @@ signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
similarWarpExist=A warp with a similar name already exists.
slimeMalformedSize=Malformed size.
soloMob=That mob likes to be alone
-spawned=spawned
spawnSet=\u00a77Spawn location set for group {0}.
+spawned=spawned
+sudoExempt=You cannot sudo this user
+sudoRun=Forcing {0} to run: /{1} {2}
suicideMessage=\u00a77Goodbye Cruel World...
suicideSuccess= \u00a77{0} took their own life
survival=survival
@@ -321,20 +327,20 @@ takenFromAccount=\u00a7c{0} has been taken from your account.
takenFromOthersAccount=\u00a7c{0} taken from {1}\u00a7c account. New balance: {2}
teleportAAll=\u00a77Teleporting request sent to all players...
teleportAll=\u00a77Teleporting all players...
-teleportationCommencing=\u00a77Teleportation commencing...
-teleportationDisabled=\u00a77Teleportation disabled.
-teleportationEnabled=\u00a77Teleportation enabled.
teleportAtoB=\u00a77{0}\u00a77 teleported you to {1}\u00a77.
teleportDisabled={0} has teleportation disabled.
teleportHereRequest=\u00a7c{0}\u00a7c has requested that you teleport to them.
-teleporting=\u00a77Teleporting...
-teleportingPortal=\u00a77Teleporting via portal.
teleportNewPlayerError=Failed to teleport new player
teleportRequest=\u00a7c{0}\u00a7c has requested to teleport to you.
teleportRequestTimeoutInfo=\u00a77This request will timeout after {0} seconds.
teleportTop=\u00a77Teleporting to top.
-tempbanExempt=\u00a77You may not tempban that player
+teleportationCommencing=\u00a77Teleportation commencing...
+teleportationDisabled=\u00a77Teleportation disabled.
+teleportationEnabled=\u00a77Teleportation enabled.
+teleporting=\u00a77Teleporting...
+teleportingPortal=\u00a77Teleporting via portal.
tempBanned=Temporarily banned from server for {0}
+tempbanExempt=\u00a77You may not tempban that player
thunder= You {0} thunder in your world
thunderDuration=You {0} thunder in your world for {1} seconds.
timeBeforeHeal=Time before next heal: {0}
@@ -365,36 +371,39 @@ unlimitedItemPermission=\u00a7cNo permission for unlimited item {0}.
unlimitedItems=Unlimited items:
unmutedPlayer=Player {0} unmuted.
upgradingFilesError=Error while upgrading the files
-userdataMoveBackError=Failed to move userdata/{0}.tmp to userdata/{1}
-userdataMoveError=Failed to move userdata/{0} to userdata/{1}.tmp
userDoesNotExist=The user {0} does not exist.
userIsAway={0} is now AFK
userIsNotAway={0} is no longer AFK
userJailed=\u00a77You have been jailed
userUsedPortal={0} used an existing exit portal.
+userdataMoveBackError=Failed to move userdata/{0}.tmp to userdata/{1}
+userdataMoveError=Failed to move userdata/{0} to userdata/{1}.tmp
usingTempFolderForTesting=Using temp folder for testing:
versionMismatch=Version mismatch! Please update {0} to the same version.
versionMismatchAll=Version mismatch! Please update all Essentials jars to the same version.
voiceSilenced=\u00a77Your voice has been silenced
warpDeleteError=Problem deleting the warp file.
-warpingTo=\u00a77Warping to {0}.
warpListPermission=\u00a7cYou do not have Permission to list that warps.
warpNotExist=That warp does not exist.
-warps=Warps: {0}
-warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
+warpOverwrite=\u00a7cYou cannot overwrite that warp.
warpSet=\u00a77Warp {0} set.
warpUsePermission=\u00a7cYou do not have Permission to use that warp.
+warpingTo=\u00a77Warping to {0}.
+warps=Warps: {0}
+warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherStorm=\u00a77You set the weather to storm in {0}
weatherStormFor=\u00a77You set the weather to storm in {0} for {1} seconds
weatherSun=\u00a77You set the weather to sun in {0}
weatherSunFor=\u00a77You set the weather to sun in {0} for {1} seconds
whoisBanned=\u00a79 - Banned: {0}
+whoisExp=\u00a79 - Exp: {0} (Level {1})
whoisGamemode=\u00a79 - Gamemode: {0}
whoisGeoLocation=\u00a79 - Location: {0}
whoisGod=\u00a79 - God mode: {0}
whoisHealth=\u00a79 - Health: {0}/20
whoisIPAddress=\u00a79 - IP Address: {0}
whoisIs={0} is {1}
+whoisJail=\u00a79 - Jail: {0}
whoisLocation=\u00a79 - Location: ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Money: {0}
whoisOP=\u00a79 - OP: {0}
diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties
index 909ec7434..6356bfbff 100644
--- a/Essentials/src/messages_es.properties
+++ b/Essentials/src/messages_es.properties
@@ -11,9 +11,9 @@ alertPlaced=situado:
alertUsed=usado:
autoAfkKickReason=Has sido echado por ausentarte mas de {0} minutos.
backAfterDeath=\u00a77Usa el comando /back para volver al punto en el que moriste.
+backUsageMsg=\u00a77Volviendo a la localizacion anterior.
backupFinished=Copia de seguridad completada
backupStarted=Comenzando copia de seguridad
-backUsageMsg=\u00a77Volviendo a la localizacion anterior.
balance=\u00a77Cantidad: {0}
balanceTop=\u00a77Top cantidades ({0})
banExempt=\u00a7cNo puedes banear a ese jugador
@@ -49,6 +49,7 @@ couldNotFindTemplate=No se puede encontrar el template {0}
creatingConfigFromTemplate=Creando configuracion desde el template: {0}
creatingEmptyConfig=Creando configuracion vacia: {0}
creative=creative
+currency={0}{1}
day=dia
days=dias
defaultBanReason=Baneado por incumplir las normas!
@@ -64,14 +65,14 @@ depth=\u00a77Estas al nivel del mar.
depthAboveSea=\u00a77Estas {0} bloque(s) por encima del mar.
depthBelowSea=\u00a77Estas {0} bloque(s) por debajo del mar.
destinationNotSet=Destino no establecido.
+disableUnlimited=\u00a77Desactivando colocacion ilimitada de {0} para {1}.
disabled=desactivado
disabledToSpawnMob=Spawning this mob was disabled in the config file.
-disableUnlimited=\u00a77Desactivando colocacion ilimitada de {0} para {1}.
dontMoveMessage=\u00a77Teletransporte comenzara en {0}. No te muevas.
downloadingGeoIp=Descargando base de datos de GeoIP ... puede llevar un tiempo (pais: 0.6 MB, ciudad: 20MB)
duplicatedUserdata=Datos de usuario duplicados: {0} y {1}
-enabled=activado
enableUnlimited=\u00a77Dando cantidad ilimitada de {0} a {1}.
+enabled=activado
enchantmentApplied = \u00a77The enchantment {0} has been applied to your item in hand.
enchantmentNotFound = \u00a7cEnchantment not found
enchantmentPerm = \u00a7cYou do not have the permission for {0}
@@ -99,9 +100,9 @@ gcentities= entidades
gcfree=Memoria libre: {0} MB
gcmax=Memoria maxima: {0} MB
gctotal=Memoria localizada: {0} MB
-geoipJoinFormat=El jugador {0} viene de {1}
geoIpUrlEmpty=Link para descargar GeoIP esta vacio.
geoIpUrlInvalid=Link para descargar GeoIP es invalido.
+geoipJoinFormat=El jugador {0} viene de {1}
godDisabledFor=Desactivado para {0}
godEnabledFor=Activado para {0}
godMode=\u00a77Modo Dios {0}.
@@ -109,12 +110,13 @@ haveBeenReleased=\u00a77Has sido liberado
heal=\u00a77Has sido curado.
healOther=\u00a77Has curado a {0}.
helpConsole=Para obtener ayuda de la consola, escribe ?.
+helpLine=\u00a76/{0}\u00a7f: {1}
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Pagina \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f:
holeInFloor=Agujero en el suelo
-homes=Hogares: {0}
homeSet=\u00a77Hogar establecido.
homeSetToBed=\u00a77Tu hogar esta ahora establecido a esta cama.
+homes=Hogares: {0}
hour=hora
hours=horas
ignorePlayer=A partir de ahora ignoras al jugador {0}.
@@ -124,28 +126,29 @@ infoChapterPages=Seccion {0}, pagina \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f:
infoFileDoesNotExist=El archivo info.txt no existe. Creando uno para ti.
infoPages=Pagina \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f:
infoUnknownChapter=Seccion desconocida.
+invBigger=El inventario del otro usuario es mas grande que el tuyo
+invRestored=Tu inventario ha sido recuperado.
+invSee=Estas viendo el inventario de {0}.
+invSeeHelp=Usa /invsee para recuperar tu inventario.
invalidCharge=\u00a7cCargo invalido.
+invalidHome=Home {0} doesn't exist
invalidMob=Mob invalido.
invalidServer=Servidor invalido!
invalidSignLine=Linea {0} en el signo es invalida.
invalidWorld=\u00a7cMundo invalido.
-invBigger=El inventario del otro usuario es mas grande que el tuyo
inventoryCleared=\u00a77Inventario limpiado.
inventoryClearedOthers=\u00a77Inventario de \u00a7c{0}\u00a77 limpiado.
-invRestored=Tu inventario ha sido recuperado.
-invSee=Estas viendo el inventario de {0}.
-invSeeHelp=Usa /invsee para recuperar tu inventario.
is=es
itemCannotBeSold=Ese objeto no puede ser vendido al servidor.
itemMustBeStacked=El objeto tiene que ser intercambiado en pilas. Una cantidad de 2s seria de dos pilas, etc.
itemNotEnough1=\u00a7cNo tienes suficientes ejemplares de ese objeto para venderlo.
itemNotEnough2=\u00a77Si pensabas en vender todos tus objetos de ese tipo, usa /sell nombredeobjeto
itemNotEnough3=\u00a77/sell nombredeobjeto -1 vendera todos excepto un objeto, etc.
-itemsCsvNotLoaded=Error al leer items.csv.
itemSellAir=Realmente has intentado vender Aire? Pon un objeto en tu mano!
itemSold=\u00a77Vendido para \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}
+itemsCsvNotLoaded=Error al leer items.csv.
jailAlreadyIncarcerated=\u00a7cLa persona ya esta en la carcel: {0}
jailMessage=\u00a7cPor hacer el mal, tiempo en la carcel estaras.
jailNotExist=Esa carcel no existe.
@@ -162,22 +165,23 @@ kitError=\u00a7cNo hay ningun kit valido.
kitErrorHelp=\u00a7cPerhaps an item is missing a quantity in the configuration?
kitGive=\u00a77Dando kit a {0}.
kitInvFull=\u00a7cTu inventario esta lleno, su kit se pondra en el suelo
-kits=\u00a77Kits: {0}
kitTimed=\u00a7c No puedes usar ese kit de nuevo para otro{0}.
+kits=\u00a77Kits: {0}
lightningSmited=\u00a77Acabas de ser golpeado
lightningUse=\u00a77Golpeando a {0}
listAfkTag = \u00a77[AFK]\u00a7f
listAmount = \u00a79There are \u00a7c{0}\u00a79 out of maximum \u00a7c{1}\u00a79 players online.
listAmountHidden = \u00a79There are \u00a7c{0}\u00a77/{1}\u00a79 out of maximum \u00a7c{2}\u00a79 players online.
+listGroupTag={0}\u00a7f:
listHiddenTag = \u00a77[HIDDEN]\u00a7f
loadWarpError=Error al cargar el tenetransporte {0}
localFormat=Local: <{0}> {1}
mailClear=\u00a7cPara marcar tu email como leido, escribe /mail clear
mailCleared=\u00a77Email limpiado!
mailSent=\u00a77Email enviado!!
+markMailAsRead=\u00a7cPara marcar tu email como leido, escribe /mail clear
markedAsAway=\u00a77Has sido puesto como AFK.
markedAsNotAway=\u00a77Ya no estas AFK.
-markMailAsRead=\u00a7cPara marcar tu email como leido, escribe /mail clear
maxHomes=No puedes establecer mas de {0} hogares.
mayNotJail=\u00a7cNo puedes encarcelar a esa persona
me=yo
@@ -185,10 +189,10 @@ minute=minuto
minutes=minutos
missingItems=No tienes {0}x de {1}.
missingPrefixSuffix=Falta un prefijo o un sufijo para {0}
-mobsAvailable=\u00a77Mobs: {0}
mobSpawnError=Error al cambiar la localizacion para el nacimiento de los mobs.
mobSpawnLimit=Cantidad de Mobs limitados al limite del server
mobSpawnTarget=El block seleccionado sera el lugar donde van a nacer los mobs.
+mobsAvailable=\u00a77Mobs: {0}
moneyRecievedFrom=\u00a7a{0} ha sido recivido de {1}
moneySentTo=\u00a7a{0} ha sido enviado a {1}
moneyTaken={0} han sido sacados de tu cuenta bancaria.
@@ -196,12 +200,11 @@ month=mes
months=meses
moreThanZero=Las cantidades han de ser mayores que 0.
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
+muteExempt=\u00a7cNo puedes silenciar a ese jugador.
mutedPlayer=Player {0} silenciado.
mutedPlayerFor=Player {0} silenciado durante {1}.
mutedUserSpeaks={0} intento hablar, pero esta silenciado.
-muteExempt=\u00a7cNo puedes silenciar a ese jugador.
nearbyPlayers=Players nearby: {0}
-needTpohere=Necesitas acceso a /tpohere para teletransportar a otros jugadores.
negativeBalanceError=El usuario no tiene permitido tener un saldo negativo.
nickChanged=Nombre de jugador cambiado.
nickDisplayName=\u00a77Tienes que habilitar cambio de nombre de usuario en la configuracion de Essentials.
@@ -212,6 +215,7 @@ nickOthersPermission=\u00a7cNo tienes permiso para cambiar el nombre de usuario
nickSet=\u00a77Tu nombre es ahora \u00a7c{0}
noAccessCommand=\u00a7cNo tienes acceso a ese comando.
noAccessPermission=\u00a7cNo tienes permisos para hacer eso {0}.
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cNo tienes permisos para destrozar eso {0}.
noGodWorldWarning=\u00a7cWarning! God mode in this world disabled.
noHelpFound=\u00a7cNo hay comandos relacionados.
@@ -221,7 +225,6 @@ noKitPermission=\u00a7cNecesitas los \u00a7c{0}\u00a7c permisos para usar ese ki
noKits=\u00a77No hay kits disponibles todavia
noMail=No tienes ningun email recivido
noMotd=\u00a7cNo hay ningun mensaje del dia.
-none=ninguno
noNewMail=\u00a77No tienes ningun correo nuevo.
noPendingRequest=No tienes ninguna peticion pendiente.
noPerm=\u00a7cNo tienes el permiso de \u00a7f{0}\u00a7c.
@@ -229,21 +232,30 @@ noPermToSpawnMob=\u00a7cYou don''t have permission to spawn this mob.
noPlacePermission=\u00a7cNo tienes permiso para situar ese bloque en ese lugar.
noPowerTools=You have no power tools assigned.
noRules=\u00a7cNo hay reglas especificadas todavia.
+noWarpsDefined=No hay teletransportes definidos aun
+none=ninguno
notAllowedToQuestion=\u00a7cYou estas autorizado para usar las preguntas.
notAllowedToShout=\u00a7cNo estas autorizado para gritar.
notEnoughExperience=You do not have enough experience.
notEnoughMoney=No tienes el dinero suficiente.
-nothingInHand = \u00a7cYou have nothing in your hand.
notRecommendedBukkit=* ! * La version de bukkit no es la recomendada para esta version de Essentials.
notSupportedYet=No esta soportado aun.
+nothingInHand = \u00a7cYou have nothing in your hand.
now=ahora
-noWarpsDefined=No hay teletransportes definidos aun
nuke=May death rain upon them
numberRequired=Un numero es necesario, amigo.
onlyDayNight=/time solo soporta day/night. (dia/noche)
onlyPlayers=Solo los jugadores conectados pueden usar {0}.
onlySunStorm=/weather solo soporta sun/storm. (sol/tormenta)
orderBalances=Ordering balances of {0} users, please wait ...
+pTimeCurrent=\u00a7e{0}''s\u00a7f la hora es {1}.
+pTimeCurrentFixed=\u00a7e{0}''s\u00a7f la hora ha sido cambiada a {1}.
+pTimeNormal=\u00a7e{0}''s\u00a7f el tiempo es normal y coincide con el servidor.
+pTimeOthersPermission=\u00a7cNo estas autorizado para especificar'' la hora de otros usuarios.
+pTimePlayers=Estos usuarios tienen su propia hora:
+pTimeReset=La hora del usuario ha sido reiniciada a las: \u00a7e{0}
+pTimeSet=La hora del jugador ha sido cambiada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
+pTimeSetFixed=La hora del jugador ha sido arreglada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
parseError=error analizando {0} en la linea {1}
pendingTeleportCancelled=\u00a7cPeticion de teletransporte pendiente cancelado.
permissionsError=Falta el plugin Permissions/GroupManager; Los prefijos/sufijos de chat seran desactivados.
@@ -271,14 +283,6 @@ powerToolRemoveAll=Todos los comandos borrados desde {0}.
powerToolsDisabled=All of your power tools have been disabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Due&ntilde;o de la proteccion: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f la hora es {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f la hora ha sido cambiada a {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f el tiempo es normal y coincide con el servidor.
-pTimeOthersPermission=\u00a7cNo estas autorizado para especificar'' la hora de otros usuarios.
-pTimePlayers=Estos usuarios tienen su propia hora:
-pTimeReset=La hora del usuario ha sido reiniciada a las: \u00a7e{0}
-pTimeSet=La hora del jugador ha sido cambiada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
-pTimeSetFixed=La hora del jugador ha sido arreglada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Pregunta]\u00a7f {0}
readNextPage=Type /{0} {1} to read the next page
reloadAllPlugins=\u00a77Todos los plugins recargados.
@@ -294,7 +298,7 @@ requestDenied=\u00a77Peticion de teletransporte denegada.
requestDeniedFrom=\u00a77{0} ha denegado tu peticion de teletransporte.
requestSent=\u00a77Peticion enviada a {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=segundo
seconds=segundos
@@ -312,8 +316,10 @@ signProtectInvalidLocation=\u00a74No puedes poner carteles en ese sitio.
similarWarpExist=Ya existe un teletransporte con ese nombre.
slimeMalformedSize=Medidas malformadas.
soloMob=A este mob le gusta estar solo
-spawned=nacido
spawnSet=\u00a77El lugar de nacimiento ha sido puesto para el grupo {0}.
+spawned=nacido
+sudoExempt=You cannot sudo this user
+sudoRun=Forcing {0} to run: /{1} {2}
suicideMessage=\u00a77Adios mundo cruel...
suicideSuccess= \u00a77{0} se quito su propia vida
survival=survival
@@ -321,20 +327,20 @@ takenFromAccount=\u00a7c{0} ha sido sacado de tu cuenta.
takenFromOthersAccount=\u00a7c{0} taken from {1}\u00a7c account. New balance: {2}
teleportAAll=\u00a77Peticion de teletransporte enviada a todos los jugadores...
teleportAll=\u00a77Teletransportando a todos los jugadores...
-teleportationCommencing=\u00a77Comenzando teletransporte...
-teleportationDisabled=\u00a77Teletransporte desactivado.
-teleportationEnabled=\u00a77Teletransporte activado.
teleportAtoB=\u00a77{0}\u00a77 te teletransporto a {1}\u00a77.
teleportDisabled={0} tiene desactivado los teletransportes.
teleportHereRequest=\u00a7c{0}\u00a7c ha pedido que te teletransportes con el.
-teleporting=\u00a77Teletransportando...
-teleportingPortal=\u00a77Teletransportando via portal.
teleportNewPlayerError=Error al teletransportar al nuevo jugador
teleportRequest=\u00a7c{0}\u00a7c te ha pedido teletransportarse contigo.
teleportRequestTimeoutInfo=\u00a77This request will timeout after {0} seconds.
teleportTop=\u00a77Teletransportandote a la cima.
-tempbanExempt=\u00a77No puedes banear temporalmente a ese jugador
+teleportationCommencing=\u00a77Comenzando teletransporte...
+teleportationDisabled=\u00a77Teletransporte desactivado.
+teleportationEnabled=\u00a77Teletransporte activado.
+teleporting=\u00a77Teletransportando...
+teleportingPortal=\u00a77Teletransportando via portal.
tempBanned=Baneado temporalmente del servidor por {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.
timeBeforeHeal=Tiempo antes de la siguiente curacion: {0}
@@ -365,36 +371,39 @@ unlimitedItemPermission=\u00a7cNo tienes permiso para objetos ilimitados {0}.
unlimitedItems=Objetos ilimitados.
unmutedPlayer=Jugador {0} desmuteado.
upgradingFilesError=Error mientras se actualizaban los archivos
-userdataMoveBackError=Error al mover userdata/{0}.tmp a userdata/{1}
-userdataMoveError=Error al mover userdata/{0} a userdata/{1}.tmp
userDoesNotExist=El usuario {0} no existe
userIsAway={0} esta ahora ausente!
userIsNotAway={0} ya no esta ausente!
userJailed=\u00a77Has sido encarcelado!
userUsedPortal={0} uso un portal de salida existente.
+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:
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
warpDeleteError=Problema al borrar el archivo de teletransporte.
-warpingTo=\u00a77Teletransportandote a {0}.
warpListPermission=\u00a7cNo tienes permiso para listar esos teletransportes.
warpNotExist=Ese teletransporte no existe.
-warps=Warps: {0}
-warpsCount=\u00a77Hay {0} teletransportes. Mostrando pagina {1} de {2}.
+warpOverwrite=\u00a7cYou cannot overwrite that warp.
warpSet=\u00a77Teletransporte {0} establecido.
warpUsePermission=\u00a7cNo tienes permisos para usar ese teletransporte.
+warpingTo=\u00a77Teletransportandote a {0}.
+warps=Warps: {0}
+warpsCount=\u00a77Hay {0} teletransportes. Mostrando pagina {1} de {2}.
weatherStorm=\u00a77Has establecido el tiempo a tormenta en este mundo.
weatherStormFor=\u00a77Has establecido el tiempo a tormenta en este {1} durante {0} segundos.
weatherSun=\u00a77Has establecido el tiempo a sol en este mundo.
weatherSunFor=\u00a77Has establecido el tiempo a sol en este {1} durante {0} segundos.
whoisBanned=\u00a79 - Banned: {0}
+whoisExp=\u00a79 - Exp: {0} (Level {1})
whoisGamemode=\u00a79 - Gamemode: {0}
whoisGeoLocation=\u00a79 - Localizacion: {0}
whoisGod=\u00a79 - God mode: {0}
whoisHealth=\u00a79 - Salud: {0}/20
whoisIPAddress=\u00a79 - Direccion IP: {0}
whoisIs={0} es {1}
+whoisJail=\u00a79 - Jail: {0}
whoisLocation=\u00a79 - Localizacion: ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Dinero: {0}
whoisOP=\u00a79 - OP: {0}
diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties
index a74be475b..e92efb181 100644
--- a/Essentials/src/messages_fr.properties
+++ b/Essentials/src/messages_fr.properties
@@ -11,9 +11,9 @@ alertPlaced=a plac\u00e9 :
alertUsed=a utilis\u00e9 :
autoAfkKickReason=Vous avez \u00e9t\u00e9 \u00e9ject\u00e9 pour inactivit\u00e9e sup\u00e9rieure \u00e0 {0} minutes.
backAfterDeath=\u00a77Utilisez la commande /back pour retourner \u00e0 l''endroit ou vous \u00eates mort.
+backUsageMsg=\u00a77Retour \u00e0 votre emplacement pr\u00e9c\u00c3\u00a8dent.
backupFinished=Sauvegarde termin\u00e9
backupStarted=D\u00e9but de la sauvegarde...
-backUsageMsg=\u00a77Retour \u00e0 votre emplacement pr\u00e9c\u00c3\u00a8dent.
balance=\u00a77Solde : {0}
balanceTop=\u00a77Meilleurs soldes au ({0})
banExempt=\u00a77Vous ne pouvez pas bannir ce joueur.
@@ -49,6 +49,7 @@ couldNotFindTemplate=Le mod\u00c3\u00a8le {0} est introuvable
creatingConfigFromTemplate=Cr\u00e9ation de la configuration \u00e0 partir du mod\u00c3\u00a8le : {0}
creatingEmptyConfig=Cr\u00e9ation d''une configuration vierge : {0}
creative=cr\u00e9atif
+currency={0}{1}
day=jour
days=jours
defaultBanReason=Le marteau du bannissement a frapp\u00e9 !
@@ -64,14 +65,14 @@ depth=\u00a77Vous \u00eates au niveau de la mer.
depthAboveSea=\u00a77Vous \u00eates \u00e0 {0} bloc(s) au-dessus du niveau de la mer.
depthBelowSea=\u00a77Vous \u00eates \u00e0 {0} bloc(s) en-dessous du niveau de la mer.
destinationNotSet=Destination non d\u00e9finie
+disableUnlimited=\u00a77D\u00e9sactivation du placement illimit\u00e9 de {0} pour {1}.
disabled=d\u00e9sactiv\u00e9
disabledToSpawnMob=Spawning this mob was disabled in the config file.
-disableUnlimited=\u00a77D\u00e9sactivation du placement illimit\u00e9 de {0} pour {1}.
dontMoveMessage=\u00a77La t\u00e9l\u00e9portation commence dans {0}. Ne bougez pas.
downloadingGeoIp=T\u00e9l\u00e9chargement de la base de donn\u00e9es GeoIP ... Cela peut prendre un moment (Pays : 0.6 Mo, villes : 20Mo)
duplicatedUserdata=Donn\u00e9e utilisateur dupliqu\u00e9e : {0} et {1}
-enabled=activ\u00e9
enableUnlimited=\u00a77Quantit\u00e9 illimit\u00e9e de {0} \u00e0 {1}.
+enabled=activ\u00e9
enchantmentApplied = \u00a77L''enchantement {0} a \u00e9t\u00e9 appliqu\u00e9 \u00e0 l''objet dans votre main.
enchantmentNotFound = \u00a7cEnchantement non-trouv\u00e9
enchantmentPerm = \u00a7cVous n''avez pas les droits pour {0}.
@@ -99,9 +100,9 @@ gcentities=entit\u00e9s
gcfree=M\u00e9moire libre : {0} Mo
gcmax=M\u00e9moire maximale : {0} Mo
gctotal=M\u00e9moire utilis\u00e9e : {0} Mo
-geoipJoinFormat=Joueur {0} vient de {1}
geoIpUrlEmpty=L''URL de t\u00e9l\u00e9chargement de GeoIP est vide.
geoIpUrlInvalid=L''URL de t\u00e9l\u00e9chargement de GeoIP est invalide.
+geoipJoinFormat=Joueur {0} vient de {1}
godDisabledFor=d\u00e9sactiv\u00e9 pour {0}
godEnabledFor=activ\u00e9 pour {0}
godMode=\u00a77Mode Dieu {0}.
@@ -109,12 +110,13 @@ haveBeenReleased=\u00a77Vous avez \u00e9t\u00e9 lib\u00e9r\u00e9.
heal=\u00a77Vous avez \u00e9t\u00e9 soign\u00e9.
healOther=\u00a77{0} a \u00e9t\u00e9 soign\u00e9.
helpConsole=Pour voir l''aide tapez ?
+helpLine=\u00a76/{0}\u00a7f: {1}
helpOp=\u00a7c[Aide Admin]\u00a7f \u00a77{0} : \u00a7f {1}
helpPages=Page \u00a7c{0}\u00a7f sur \u00a7c{1}\u00a7f.
holeInFloor=Trou dans le Sol.
-homes=R\u00e9sidences : {0}
homeSet=\u00a77R\u00e9sidence d\u00e9finie.
homeSetToBed=\u00a77Votre r\u00e9sidence est d\u00e9sormais li\u00e9e \u00e0 ce lit.
+homes=R\u00e9sidences : {0}
hour=heure
hours=heures
ignorePlayer=Vous ignorez d\u00e9sormais {0}.
@@ -124,28 +126,29 @@ infoChapterPages=Chapitre {0}, page \u00a7c{1}\u00a7f sur \u00a7c{2}\u00a7f:
infoFileDoesNotExist=Le fichier info.txt n'existe pas. Le fichier est en cours de cr\u00e9ation pour vous.
infoPages=Page \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f.
infoUnknownChapter=Chapitre inconnu.
+invBigger=Les inventaires des autres joueurs sont plus gros que le v\u00f4tre.
+invRestored=Votre inventaire vous a \u00e9t\u00e9 rendu.
+invSee=Vous voyez l''inventaire de {0}.
+invSeeHelp=Utilisez /invsee pour revenir \u00e0 votre inventaire.
invalidCharge=\u00a7cCharge invalide.
+invalidHome=Home {0} doesn't exist
invalidMob=Mauvias type de cr\u00e9ature.
invalidServer=Serveur non valide.
invalidSignLine=La ligne {0} du panneau est invalide.
invalidWorld=\u00a7cMonde invalide.
-invBigger=Les inventaires des autres joueurs sont plus gros que le v\u00f4tre.
inventoryCleared=\u00a77Inventaire nettoy\u00e9.
inventoryClearedOthers=\u00a77L''inventaire de \u00a7c{0}\u00a77 a \u00e9t\u00e9 nettoy\u00e9.
-invRestored=Votre inventaire vous a \u00e9t\u00e9 rendu.
-invSee=Vous voyez l''inventaire de {0}.
-invSeeHelp=Utilisez /invsee pour revenir \u00e0 votre inventaire.
is=est
itemCannotBeSold=Cet objet ne peut \u00eatre vendu au serveur.
itemMustBeStacked=Cet objet doit \u00eatre vendu par 64. Une quantit\u00e9 de 2 serait deux fois 64.
itemNotEnough1=\u00a7cVous n'avez pas assez de cet objet pour le vendre.
itemNotEnough2=\u00a77Si vous voulez vendre l'int\u00e9gralit\u00e9 de vos objets de ce type l\u00e0, utilisez /sell nomObjet
itemNotEnough3=\u00a77/sell nomObjet -1 vendra tout sauf un objet, etc.
-itemsCsvNotLoaded=N'a pas pu charger items.csv.
itemSellAir=Vouliez-vous vraiment vendre de l'air ? Mettez un objet dans votre main.
itemSold=\u00a77Vendu pour \u00a7c{0} \u00a77({1} {2} \u00e0 {3} chacun)
itemSoldConsole={0} vendu {1} pour \u00a77{2} \u00a77({3} objet(s) \u00e0 {4} chacun)
itemSpawn=\u00a77Donne {0} de {1}
+itemsCsvNotLoaded=N'a pas pu charger items.csv.
jailAlreadyIncarcerated=\u00a7cJoueur d\u00e9j\u00e0 emprisonn\u00e9 : {0}
jailMessage=\u00a7cVous avez commis un crime, vous en payez le prix.
jailNotExist=Cette prison n'existe pas.
@@ -162,22 +165,23 @@ kitError=\u00a7cIl n'y a pas de kits valides.
kitErrorHelp=\u00a7cPeut-\u00eatre qu'un objet manque d'une quantit\u00e9 dans la configuration ?
kitGive=\u00a77Donner le kit {0}.
kitInvFull=\u00a7cVotre inventaire \u00e9tait plein, le kit est parre-terre.
-kits=\u00a77Kits :{0}
kitTimed=\u00a7cVous ne pouvez pas utiliser ce kit pendant encore {0}.
+kits=\u00a77Kits :{0}
lightningSmited=\u00a77Vous venez d'\u00eatre foudroy\u00e9.
lightningUse=\u00a77{0} a \u00e9t\u00e9 foudroy\u00e9.
listAfkTag = \u00a77[AFK]\u00a7f
listAmount = \u00a79Il y a \u00a7c{0}\u00a79 joueurs en ligne sur \u00a7c{1}\u00a79 au total.
listAmountHidden = \u00a79Il y a \u00a7c{0}\u00a77/{1}\u00a79 sur un maximum de \u00a7c{2}\u00a79 joueurs en ligne.
+listGroupTag={0}\u00a7f:
listHiddenTag = \u00a77[MASQU\u00c9]\u00a7f
loadWarpError=\u00c9chec du chargement du point de t\u00e9l\u00e9portation {0}.
localFormat=Locale : <{0}> {1}
mailClear=\u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear
mailCleared=\u00a77Courrier supprim\u00e9 !
mailSent=\u00a77Courrier envoy\u00e9 !
+markMailAsRead=\u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear
markedAsAway=\u00a77Vous \u00eates d\u00e9sormais AFK.
markedAsNotAway=\u00a77Vous n'\u00eates d\u00e9sormais plus AFK.
-markMailAsRead=\u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear
maxHomes=Vous ne pouvez pas cr\u00e9er plus de {0} r\u00e9sidences.
mayNotJail=\u00a7cVous ne pouvez pas emprisonner cette personne.
me=moi
@@ -185,10 +189,10 @@ minute=minute
minutes=minutes
missingItems=Vous n''avez pas {0} x {1}.
missingPrefixSuffix=Pr\u00e9fixe ou Suffixe manquant pour {0}
-mobsAvailable=\u00a77cr\u00e9atures : {0}
mobSpawnError=Erreur lors du changement du g\u00e9n\u00e9rateur de cr\u00e9atures.
mobSpawnLimit=Quantit\u00e9 de cr\u00e9atures limit\u00e9 \u00e0 au maximum du serveur.
mobSpawnTarget=Le bloc cible doit \u00eatre un g\u00e9n\u00e9rateur de cr\u00e9atures.
+mobsAvailable=\u00a77cr\u00e9atures : {0}
moneyRecievedFrom=\u00a7a{0} a \u00e9t\u00e9 re\u00e7u de {1}
moneySentTo=\u00a7a{0} a \u00e9t\u00e9 envoy\u00e9 \u00e0 {1}
moneyTaken={0} pr\u00e9lev\u00e9(s) de votre compte.
@@ -196,12 +200,11 @@ month=mois
months=mois
moreThanZero=Les quantit\u00e9s doivent \u00eatre sup\u00e9rieures \u00e0 z\u00e9ro.
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
+muteExempt=\u00a7cVous ne pouvez pas r\u00e9duire ce joueur au silence.
mutedPlayer=Le joueur {0} est d\u00e9sormais muet.
mutedPlayerFor={0} a \u00e9t\u00e9 muet pour {1}.
mutedUserSpeaks={0} a essay\u00e9 de parler mais est muet.
-muteExempt=\u00a7cVous ne pouvez pas r\u00e9duire ce joueur au silence.
nearbyPlayers=Joueurs dans les environs : {0}
-needTpohere=Vous avez besoin de l'acc\u00c3\u00a8s \u00e0 /tpohere pour t\u00e9l\u00e9porter d'autres joueurs.
negativeBalanceError=L'utilisateur n'est pas autoris\u00e9 \u00e0 avoir un solde n\u00e9gatif.
nickChanged=surnom modifi\u00e9.
nickDisplayName=\u00a77Vous devez activer change-displayname dans la configuration Essentials.
@@ -212,6 +215,7 @@ nickOthersPermission=\u00a7cVous n'avez pas la permission de changer le surnom d
nickSet=\u00a77Votre surnom est maintenant \u00a7c{0}
noAccessCommand=\u00a7cVous n'avez pas acc\u00c3\u00a8s \u00e0 cette commande.
noAccessPermission=\u00a7cVous n''avez pas la permissions d''acc\u00e9der \u00e0 cette {0}
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cVous n''avez pas la permission de d\u00e9truire ce {0}.
noGodWorldWarning=\u00a7cWarning! Le mode Dieu est d\u00e9sactiv\u00e9 dans ce monde.
noHelpFound=\u00a7cAucune commande correspondante.
@@ -221,7 +225,6 @@ noKitPermission=\u00a7cVous avez besoin de la permission \u00a7c{0}\u00a7c pour
noKits=\u00a77Il n'y a pas encore de kits disponibles.
noMail=Vous n'avez pas de courrier
noMotd=\u00a7cIl n'y a pas de message su jour.
-none=aucun
noNewMail=\u00a77Vous n'avez pas de courrier.
noPendingRequest=Vous n'avez pas de requ\u00eate non lue.
noPerm=\u00a7cVous n''avez pas la permission \u00a7f{0}\u00a7c.
@@ -229,21 +232,30 @@ noPermToSpawnMob=\u00a7cVous n'avez pas la permission d'invoquer cette cr\u00e9a
noPlacePermission=\u00a7cVous n'avez pas la permission de placer un bloc pr\u00c3\u00a8 de cette pancarte.
noPowerTools=Vous n'avez pas d'outil macro associ\u00e9.
noRules=\u00a7cIl n'y a pas encore de r\u00e8gles d\u00e9finies.
+noWarpsDefined=Aucun point de t\u00e9l\u00e9portation d\u00e9fini.
+none=aucun
notAllowedToQuestion=\u00a7cVous n'\u00eates pas autoris\u00e9 \u00e0 poser des questions.
notAllowedToShout=\u00a7cVous n'\u00eates pas autoris\u00e9 \u00e0 crier.
notEnoughExperience=Vous n'avez pas assez d'exp\u00e9rience.
notEnoughMoney=Vous n'avez pas les fonds n\u00e9cessaires.
-nothingInHand = \u00a7cVous n'avez rien en main.
notRecommendedBukkit=* ! * La version de Bukkit n'est pas celle qui est recommand\u00e9 pour cette version de Essentials.
notSupportedYet=Pas encore pris en charge.
+nothingInHand = \u00a7cVous n'avez rien en main.
now=maintenant
-noWarpsDefined=Aucun point de t\u00e9l\u00e9portation d\u00e9fini.
nuke=Que la mort s'abatte sur eux !
numberRequired=Il faut fournir un nombre ici.
onlyDayNight=/time ne supporte que (jour) day/night (nuit).
onlyPlayers=Seulement les joueurs en jeu peuvent utiliser {0}.
onlySunStorm=/weather ne supporte que (soleil) sun/storm (temp\u00eate).
orderBalances=Classement des balance de {0} utilisateurs, patientez ...
+pTimeCurrent=Pour \u00a7e{0}\u00a7f l''heure est {1}.
+pTimeCurrentFixed=L''heure de \u00a7e{0}\u00a7f est fix\u00e9e \u00e0 {1}.
+pTimeNormal=\u00a7fPour \u00a7e{0}\u00a7f l'heure est normale et correspond au server.
+pTimeOthersPermission=\u00a7cVous n'etes pas autoris\u00e9 \u00e0 changer l'heure des autres joueurs.
+pTimePlayers=Ces joueurs ont leur propre horraire :
+pTimeReset=l''heure a \u00e9t\u00e9 r\u00e9initialis\u00e9e \u00e0 : \u00a7e{0}
+pTimeSet=l''heure du joueur a \u00e9t\u00e9 r\u00e9egl\u00e9ee \u00e0 \u00a73{0}\u00a7f pour : \u00a7e{1}
+pTimeSetFixed=l''heure du joueur a \u00e9t\u00e9 fix\u00e9e \u00e0 : \u00a7e{1}
parseError=Erreur de conversion {0} \u00e0 la ligne {1}
pendingTeleportCancelled=\u00a7cRequete de t\u00e9l\u00e9portation annul\u00e9e.
permissionsError=Permissions/GroupManager manquant, les pr\u00e9fixes et suffixes ne seront pas affich\u00e9s.
@@ -271,14 +283,6 @@ powerToolRemoveAll=Toutes les commandes retir\u00e9es de {0}.
powerToolsDisabled=Toutes vos commandes assign\u00e9es ont \u00e9t\u00e9 retir\u00e9es.
powerToolsEnabled=Toutes vos commandes assign\u00e9es ont \u00e9t\u00e9 activ\u00e9es.
protectionOwner=\u00a76[EssentialsProtect] Propri\u00e9taire de la protection : {0}
-pTimeCurrent=Pour \u00a7e{0}\u00a7f l''heure est {1}.
-pTimeCurrentFixed=L''heure de \u00a7e{0}\u00a7f est fix\u00e9e \u00e0 {1}.
-pTimeNormal=\u00a7fPour \u00a7e{0}\u00a7f l'heure est normale et correspond au server.
-pTimeOthersPermission=\u00a7cVous n'etes pas autoris\u00e9 \u00e0 changer l'heure des autres joueurs.
-pTimePlayers=Ces joueurs ont leur propre horraire :
-pTimeReset=l''heure a \u00e9t\u00e9 r\u00e9initialis\u00e9e \u00e0 : \u00a7e{0}
-pTimeSet=l''heure du joueur a \u00e9t\u00e9 r\u00e9egl\u00e9ee \u00e0 \u00a73{0}\u00a7f pour : \u00a7e{1}
-pTimeSetFixed=l''heure du joueur a \u00e9t\u00e9 fix\u00e9e \u00e0 : \u00a7e{1}
questionFormat=\u00a77[Question]\u00a7f {0}
readNextPage=Utilisez /{0} {1} pour lire la page suivante.
reloadAllPlugins=\u00a77Toutes les extensions ont \u00e9t\u00e9 recharg\u00e9es.
@@ -294,7 +298,7 @@ requestDenied=\u00a77Demande de t\u00e9l\u00e9portation refus\u00e9e.
requestDeniedFrom=\u00a77{0} a refus\u00e9 votre demande de t\u00e9l\u00e9portation.
requestSent=\u00a77Requ\u00eate envoy\u00e9e \u00e0 {0}\u00a77.
requestTimedOut=\u00a7cLa de mande de t\u00e9l\u00e9portation a expir\u00e9.
-requiredBukkit=* ! * Vous avez besoin au moins de la version {0} de CraftBukkit. T\u00e9l\u00e9chargez-la ici http://ci.bukkit.org.
+requiredBukkit=* ! * Vous avez besoin au moins de la version {0} de CraftBukkit. T\u00e9l\u00e9chargez-la ici http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=seconde
seconds=secondes
@@ -312,8 +316,10 @@ signProtectInvalidLocation=\u00a74Vous n'avez pas l'autorisation de cr\u00e9er u
similarWarpExist=Un point de t\u00e9l\u00e9portation avec un nom similaire existe d\u00e9j\u00e0.
slimeMalformedSize=Taille mal form\u00e9e.
soloMob=Ce cr\u00e9ature aime \u00eatre seul.
-spawned=invoqu\u00e9(s)
spawnSet=\u00a77Le point de d\u00e9part a \u00e9t\u00e9 d\u00e9fini pour le groupe {0}.
+spawned=invoqu\u00e9(s)
+sudoExempt=You cannot sudo this user
+sudoRun=Forcing {0} to run: /{1} {2}
suicideMessage=\u00a77Au revoir monde cruel...
suicideSuccess=\u00a77{0} s''est suicid\u00e9.
survival=survie
@@ -321,20 +327,20 @@ takenFromAccount=\u00a7c{0} ont \u00e9t\u00e9 retir\u00e9 de votre compte.
takenFromOthersAccount=\u00a7c{0} taken from {1}\u00a7c account. New balance: {2}
teleportAAll=\u00a77Demande de t\u00e9l\u00e9portation envoy\u00e9e \u00e0 tous les joueurs...
teleportAll=\u00a77T\u00e9l\u00e9poration de tous les joueurs.
-teleportationCommencing=\u00a77D\u00e9but de la t\u00e9l\u00e9portation...
-teleportationDisabled=\u00a77T\u00e9l\u00e9poration d\u00e9sactiv\u00e9.
-teleportationEnabled=\u00a77T\u00e9l\u00e9portation activ\u00e9e.
teleportAtoB=\u00a77{0}\u00a77 vous a t\u00e9l\u00e9port\u00e9 \u00e0 {1}\u00a77.
teleportDisabled={0} a la t\u00e9l\u00e9portation d\u00e9sactiv\u00e9.
teleportHereRequest=\u00a7c{0}\u00a7c Vous a demand\u00e9 de vous t\u00e9l\u00e9porter \u00e0 lui/elle.
-teleporting=\u00a77T\u00e9l\u00e9poration en cours...
-teleportingPortal=\u00a77T\u00e9l\u00e9portation via portail.
teleportNewPlayerError=\u00c9chec de la t\u00e9l\u00e9portation du nouveau joueur.
teleportRequest=\u00a7c{0}\u00a7c vous demande s''il peut se t\u00e9l\u00e9porter vers vous.
teleportRequestTimeoutInfo=\u00a77Cette demande de t\u00e9l\u00e9portation expirera dans {0} secondes.
teleportTop=\u00a77T\u00e9l\u00e9portation vers le haut.
-tempbanExempt=\u00a77Vous ne pouvez pas bannir temporairement ce joueur.
+teleportationCommencing=\u00a77D\u00e9but de la t\u00e9l\u00e9portation...
+teleportationDisabled=\u00a77T\u00e9l\u00e9poration d\u00e9sactiv\u00e9.
+teleportationEnabled=\u00a77T\u00e9l\u00e9portation activ\u00e9e.
+teleporting=\u00a77T\u00e9l\u00e9poration en cours...
+teleportingPortal=\u00a77T\u00e9l\u00e9portation via portail.
tempBanned=Banni temporairement du serveur pour {0}
+tempbanExempt=\u00a77Vous ne pouvez pas bannir temporairement ce joueur.
thunder=Vous avez {0} la foudre dans votre monde.
thunderDuration=Vous avez {0} la foudre dans le serveur pendant {1} secondes.
timeBeforeHeal=Temps avant le prochain soin : {0}
@@ -365,36 +371,39 @@ unlimitedItemPermission=\u00a7cPas de permission pour l''objet illimit\u00e9 {0}
unlimitedItems=Objets illimit\u00e9s:
unmutedPlayer=Le joueur {0} n''est plus muet.
upgradingFilesError=Erreur durant la mise \u00e0 jour des fichiers.
-userdataMoveBackError=Echec du d\u00e9placement de userdata/{0}.tmp vers userdata/{1}
-userdataMoveError=Echec du d\u00e9placement de userdata/{0} vers userdata/{1}.tmp
userDoesNotExist=L''utilisateur {0} n''existe pas.
userIsAway={0} s'est mis en AFK
userIsNotAway={0} n'est plus AFK
userJailed=\u00a77Vous avez \u00e9t\u00e9 emprisonn\u00e9.
userUsedPortal={0} a utilis\u00e9 un portail existant.
+userdataMoveBackError=Echec du d\u00e9placement de userdata/{0}.tmp vers userdata/{1}
+userdataMoveError=Echec du d\u00e9placement de userdata/{0} vers userdata/{1}.tmp
usingTempFolderForTesting=Utilise un fichier temporaire pour un test.
versionMismatch=Versions diff\u00e9rentes ! Mettez s''il vous plait {0} \u00e0 la m\u00eame version.
versionMismatchAll=Mauvaise version ! S'il vous plait mettez des jars Essentials de version identique.
voiceSilenced=\u00a77Vous avez \u00e9t\u00e9 r\u00e9duit au silence.
warpDeleteError=Probl\u00c3\u00a8me concernant la suppression du fichier warp.
-warpingTo=\u00a77T\u00e9l\u00e9portation vers {0}.
warpListPermission=\u00a7cVous n'avez pas la permission d'afficher la liste des points de t\u00e9l\u00e9portation.
warpNotExist=Ce point de t\u00e9l\u00e9portation n'existe pas.
-warps=point de t\u00e9l\u00e9portations : {0}
-warpsCount=\u00a77Il y a {0} points de t\u00e9l\u00e9portations. Page {1} sur {2}.
+warpOverwrite=\u00a7cYou cannot overwrite that warp.
warpSet=\u00a77Le point de t\u00e9l\u00e9portation {0} a \u00e9t\u00e9 cr\u00e9\u00e9.
warpUsePermission=\u00a7cVous n'avez pas la permission d'utiliser ce point de t\u00e9l\u00e9portation.
+warpingTo=\u00a77T\u00e9l\u00e9portation vers {0}.
+warps=point de t\u00e9l\u00e9portations : {0}
+warpsCount=\u00a77Il y a {0} points de t\u00e9l\u00e9portations. Page {1} sur {2}.
weatherStorm=\u00a77Vous avez programm\u00e9 l''orage dans {0}
weatherStormFor=\u00a77Vous avez programm\u00e9 l''orage dans {0} pour {1} secondes.
weatherSun=\u00a77Vous avez programm\u00e9 le beau temps dans {0}
weatherSunFor=\u00a77Vous avez programm\u00e9 le beau temps dans {0} pour {1} secondes.
whoisBanned=\u00a79 - Banni : {0}
+whoisExp=\u00a79 - Exp: {0} (Level {1})
whoisGamemode=\u00a79 - Mode de jeu : {0}
whoisGeoLocation=\u00a79 - Emplacement : {0}
whoisGod=\u00a79 - Mode Dieu : {0}
whoisHealth=\u00a79 - Sant\u00e9 : {0} / 20
whoisIPAddress=\u00a79 - Adresse IP : {0}
whoisIs={0} est {1}
+whoisJail=\u00a79 - Jail: {0}
whoisLocation=\u00a79 - Emplacement : ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Argent : {0}
whoisOP=\u00a79 - OP : {0}
diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties
index 51bbe2bed..5ab703d99 100644
--- a/Essentials/src/messages_nl.properties
+++ b/Essentials/src/messages_nl.properties
@@ -11,9 +11,9 @@ alertPlaced=geplaatst:
alertUsed=gebruikt:
autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath=\u00a77Gebruik het /back command om terug te keren naar je sterfplaats.
+backUsageMsg=\u00a77Naar de vorige locatie aan het gaan.
backupFinished=Backup voltooid
backupStarted=Backup gestart
-backUsageMsg=\u00a77Naar de vorige locatie aan het gaan.
balance=\u00a77Saldo: {0}
balanceTop=\u00a77 Top saldi ({0})
banExempt=\u00a77Je kunt deze speler niet verbannen.
@@ -49,6 +49,7 @@ couldNotFindTemplate=Het sjabloon kon niet worden gevonden {0}
creatingConfigFromTemplate=Bezig met aanmaken van een config vanaf sjabloon: {0}
creatingEmptyConfig=Bezig met een lege config aanmaken: {0}
creative=creative
+currency={0}{1}
day=dag
days=dagen
defaultBanReason=De Ban Hamer heeft gesproken!
@@ -64,14 +65,14 @@ depth=\u00a77Je zit op zeeniveau.
depthAboveSea=\u00a77Je zit {0} blok(ken) boven zeeniveau.
depthBelowSea=\u00a77Je zit {0} blok(ken) onder zeeniveau.
destinationNotSet=Bestemming niet ingesteld
+disableUnlimited=\u00a77Oneindig plaatsen van {0} uitgeschakeld voor {1}.
disabled=uitgeschakeld
disabledToSpawnMob=Spawning this mob was disabled in the config file.
-disableUnlimited=\u00a77Oneindig plaatsen van {0} uitgeschakeld voor {1}.
dontMoveMessage=\u00a77Beginnen met teleporteren in {0}. Niet bewegen.
downloadingGeoIp=Bezig met downloaden van GeoIP database ... Dit kan een tijdje duren (country: 0.6 MB, city: 20MB)
duplicatedUserdata=Dubbele userdata: {0} en {1}.
-enabled=ingeschakeld
enableUnlimited=\u00a77Oneindig aantal {0} aan {1} gegeven.
+enabled=ingeschakeld
enchantmentApplied = \u00a77The enchantment {0} has been applied to your item in hand.
enchantmentNotFound = \u00a7cEnchantment not found
enchantmentPerm = \u00a7cYou do not have the permission for {0}
@@ -99,9 +100,9 @@ gcentities= entities
gcfree=Vrij geheugen: {0} MB
gcmax=Maximaal geheugen: {0} MB
gctotal=Gealloceerd geheugen: {0} MB
-geoipJoinFormat=Speler {0} komt uit {1}
geoIpUrlEmpty=GeoIP download url is leeg.
geoIpUrlInvalid=GeoIP download url is ongeldig.
+geoipJoinFormat=Speler {0} komt uit {1}
godDisabledFor=uitgeschakeld voor {0}
godEnabledFor=ingeschakeld voor {0}
godMode=\u00a77God mode {0}.
@@ -109,12 +110,13 @@ haveBeenReleased=\u00a77Je bent bevrijdt
heal=\u00a77Je bent genezen.
healOther=\u00a77Je geneezde {0}.
helpConsole=type ? om de consolehelp weer te geven.
+helpLine=\u00a76/{0}\u00a7f: {1}
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f:
holeInFloor=Gat in de vloer
-homes=Homes: {0}
homeSet=\u00a77Home ingesteld.
homeSetToBed=\u00a77Je home is is nu verplaatst naar dit bed.
+homes=Homes: {0}
hour=uur
hours=uren
ignorePlayer=Je negeert {0} vanaf nu.
@@ -124,28 +126,29 @@ infoChapterPages=Hoofdstuk {0}, Pagina \u00a7c{1}\u00a7f van de \u00a7c{2}\u00a7
infoFileDoesNotExist=Bestand info.txt bestaat niet. Bezig met aanmaken.
infoPages=Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f:
infoUnknownChapter=Onbekend hoofdstuk.
+invBigger=De inventory van de andere speler is groter dan die van jou.
+invRestored=Je inventory is hersteld.
+invSee=Je kijkt naar de inventory van {0}.
+invSeeHelp=Type /invsee om je inventory te herstellen.
invalidCharge=\u00a7cOngeldig te laden.
+invalidHome=Home {0} doesn't exist
invalidMob=Ongeldig mob type.
invalidServer=Ongeldige server!
invalidSignLine=Regel {0} op het bordje is ongeldig.
invalidWorld=\u00a7cOngeldige wereld.
-invBigger=De inventory van de andere speler is groter dan die van jou.
inventoryCleared=\u00a77inventory leeggemaakt.
inventoryClearedOthers=\u00a77inventory van \u00a7c{0}\u00a77 leeggemaakt.
-invRestored=Je inventory is hersteld.
-invSee=Je kijkt naar de inventory van {0}.
-invSeeHelp=Type /invsee om je inventory te herstellen.
is=is
itemCannotBeSold=Dat voorwerp kan niet aan de server worden verkocht.
itemMustBeStacked=Voorwerp moet geruild worden als stapel. Een hoeveelheid van 2 moet dus geruild worden als twee stapels, etc.
itemNotEnough1=\u00a7cJe hebt niet genoeg van dat voorwerp om te verkopen.
itemNotEnough2=\u00a77Type /sell itemname Als je alles daarvan wilt verkopen
itemNotEnough3=\u00a77/sell itemname -1 zorgt ervoor dat ze allemaal behalve 1 worden verkocht, etc.
-itemsCsvNotLoaded=De item kunnen niet geladen worden.csv.
itemSellAir=Je wilde serieus lucht verkopen? Plaats een voorwerp in je hand.
itemSold=\u00a77Verkocht voor \u00a7c{0} \u00a77({1} {2} voorwerpen voor {3} per stuk)
itemSoldConsole={0} verkocht {1} voor \u00a77{2} \u00a77({3} voorwerpen voor {4} per stuk)
itemSpawn=\u00a77Geeft {0} {1}
+itemsCsvNotLoaded=De item kunnen niet geladen worden.csv.
jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailMessage=\u00a7cYou do the crime, you do the time.
jailNotExist=Die gevangenis bestaat niet.
@@ -162,22 +165,23 @@ kitError=\u00a7cEr zijn geen geldige kits.
kitErrorHelp=\u00a7cMisschien mist er een hoeveelheid van het item in de configuratie?
kitGive=\u00a77Kit {0} wordt gegeven.
kitInvFull=\u00a7cJe inventory was vol, de kit wordt op de grond geplaatst
-kits=\u00a77Kits: {0}
kitTimed=\u00a7cJe kan die kit pas weer gebruiken over {0}.
+kits=\u00a77Kits: {0}
lightningSmited=\u00a77Je bent zojuist verbrand
lightningUse=\u00a77Brand {0}
listAfkTag = \u00a77[AFK]\u00a7f
listAmount = \u00a79There are \u00a7c{0}\u00a79 out of maximum \u00a7c{1}\u00a79 players online.
listAmountHidden = \u00a79There are \u00a7c{0}\u00a77/{1}\u00a79 out of maximum \u00a7c{2}\u00a79 players online.
+listGroupTag={0}\u00a7f:
listHiddenTag = \u00a77[HIDDEN]\u00a7f
loadWarpError=Fout bij het laden van warp {0}
localFormat=Local: <{0}> {1}
mailClear=\u00a7cType /mail clear, om ej berichten als gelezen te markeren.
mailCleared=\u00a77Bericht geklaard!
mailSent=\u00a77Bericht verzonden!
+markMailAsRead=\u00a7cType /mail clear, om je berichten als gelezen te markeren
markedAsAway=\u00a77Je staat nu als afwezig gemeld.
markedAsNotAway=\u00a77Je staat niet meer als afwezig gemeld.
-markMailAsRead=\u00a7cType /mail clear, om je berichten als gelezen te markeren
maxHomes=You cannot set more than {0} homes.
mayNotJail=\u00a7cJe mag die speler niet in de gevangenis zetten.
me=me
@@ -185,10 +189,10 @@ minute=minuut
minutes=minuten
missingItems=Je hebt geen {0}x {1}.
missingPrefixSuffix=Er mist een prefix of suffix voor {0}
-mobsAvailable=\u00a77Mobs: {0}
mobSpawnError=Fout bij het veranderen van de mob spawner.
mobSpawnLimit=Grootte van de mob hang af van het server limiet
mobSpawnTarget=Target blok moet een mob spawner zijn.
+mobsAvailable=\u00a77Mobs: {0}
moneyRecievedFrom=\u00a7a{0} is ontvangen van {1}
moneySentTo=\u00a7a{0} is verzonden naar {1}
moneyTaken={0} van je bankrekening afgehaald.
@@ -196,12 +200,11 @@ month=maand
months=maanden
moreThanZero=Het aantal moet groter zijn dan 0.
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
+muteExempt=\u00a7cJe kan deze speler niet muten.
mutedPlayer=Speler {0} gemute.
mutedPlayerFor=Speler {0} is gemute voor {1}.
mutedUserSpeaks={0} probeerde te praten, maar is gemute.
-muteExempt=\u00a7cJe kan deze speler niet muten.
nearbyPlayers=Players nearby: {0}
-needTpohere=Je moet toegang krijgen tot /tpohere om naar andere spelers te teleporteren.
negativeBalanceError=Speler is niet toegestaan om een negatief saldo te hebben.
nickChanged=Nickname veranderd.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
@@ -212,6 +215,7 @@ nickOthersPermission=\u00a7cJe hebt geen toestemming om de nickname van anderen
nickSet=\u00a77Je nickname is nu \u00a7c{0}
noAccessCommand=\u00a7cJe hebt geen toegang tot die opdracht.
noAccessPermission=\u00a7cJe hebt hier geen toegang voor {0}.
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cJe hebt geen toegang om dat te vernietigen {0}.
noGodWorldWarning=\u00a7cWarning! God mode in this world disabled.
noHelpFound=\u00a7cNo matching commands.
@@ -221,7 +225,6 @@ noKitPermission=\u00a7cJe hebt de \u00a7c{0}\u00a7c toestemming nodig om die kit
noKits=\u00a77Er zijn nog geen kits beschikbaar
noMail=Je hebt geen berichten
noMotd=\u00a7cEr is geen bericht van de dag.
-none=geen
noNewMail=\u00a77Je hebt geen nieuwe berichten.
noPendingRequest=Je hebt geen aanvragen.
noPerm=\u00a7cJe hebt de \u00a7f{0}\u00a7c toestemming niet.
@@ -229,21 +232,30 @@ noPermToSpawnMob=\u00a7cYou don''t have permission to spawn this mob.
noPlacePermission=\u00a7cJe hebt geen toestemming om een blok naast die sign te plaatsen.
noPowerTools=You have no power tools assigned.
noRules=\u00a7cEr zijn nog geen regels gegeven.
+noWarpsDefined=Geen warps gedefinieerd
+none=geen
notAllowedToQuestion=\u00a7cJe bent niet bevoegd om de vraag functie te gebruiken.
notAllowedToShout=\u00a7cJe bent niet bevoegd om de roep functie te gebruiken.
notEnoughExperience=You do not have enough experience.
notEnoughMoney=Je hebt niet voldoende middelen.
-nothingInHand = \u00a7cYou have nothing in your hand.
notRecommendedBukkit=* ! * De Bukkit versie is niet de aangeraden build voor Essentials.
notSupportedYet=Nog niet ondersteund.
+nothingInHand = \u00a7cYou have nothing in your hand.
now=nu
-noWarpsDefined=Geen warps gedefinieerd
nuke=May death rain upon them
numberRequired=Er moet daar een nummer, grapjas.
onlyDayNight=/time ondersteund alleen day/night.
onlyPlayers=Alleen in-game spelers kunnen {0} gebruiken.
onlySunStorm=/weather only supports sun/storm.
orderBalances=Ordering balances of {0} users, please wait ...
+pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
+pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
+pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
+pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
+pTimePlayers=These players have their own time:
+pTimeReset=Player time has been reset for: \u00a7e{0}
+pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
+pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError=Fout bij ontleding {0} op regel {1}
pendingTeleportCancelled=\u00a7cAangevraagde teleportatie afgelast.
permissionsError=Permissions/GroupManager ontbreekt; chat prefixes/suffixes worden uitgeschakeld.
@@ -271,14 +283,6 @@ powerToolRemoveAll=All commands removed from {0}.
powerToolsDisabled=All of your power tools have been disabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Beschermingeigenaar: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
-pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
-pTimePlayers=These players have their own time:
-pTimeReset=Player time has been reset for: \u00a7e{0}
-pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
-pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Vraag]\u00a7f {0}
readNextPage=Type /{0} {1} to read the next page
reloadAllPlugins=\u00a77Alle plugins zijn herladen.
@@ -294,7 +298,7 @@ requestDenied=\u00a77Teleporteer aanvraag geweigerd.
requestDeniedFrom=\u00a77{0} denied your teleport request.
requestSent=\u00a77Aanvraag verstuurd naar {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=seconde
seconds=seconde
@@ -312,8 +316,10 @@ signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
similarWarpExist=Er bestaat al een warp met dezelfde naam.
slimeMalformedSize=Misvoormde grootte.
soloMob=Die mob is liever in zijn eentje
-spawned=gespawned
spawnSet=\u00a77Spawn locatie voor de groep {0} ingesteld.
+spawned=gespawned
+sudoExempt=You cannot sudo this user
+sudoRun=Forcing {0} to run: /{1} {2}
suicideMessage=\u00a77Vaarwel vreedzame wereld...
suicideSuccess= \u00a77{0} pleegde zelfmoord
survival=survival
@@ -321,20 +327,20 @@ takenFromAccount=\u00a7c{0} is van je bank rekening afgehaald.
takenFromOthersAccount=\u00a7c{0} taken from {1}\u00a7c account. New balance: {2}
teleportAAll=\u00a77Teleporting request sent to all players...
teleportAll=\u00a77Bezig met teleporteren van alle spelers...
-teleportationCommencing=\u00a77Aan het beginnen met teleporteren...
-teleportationDisabled=\u00a77Teleportatie uitgeschakeld.
-teleportationEnabled=\u00a77Teleportatie ingeschakeld.
teleportAtoB=\u00a77{0}\u00a77 is naar {1}\u00a77 geteleporteerd.
teleportDisabled={0} heeft teleporteren uit gezet.
teleportHereRequest=\u00a7c{0}\u00a7c Heeft gevraagd of hij/zij naar jou mag teleporteren.
-teleporting=\u00a77Bezig met teleporteren...
-teleportingPortal=\u00a77Bezig met teleporteren via de portal.
teleportNewPlayerError=Fout bij het teleporteren van nieuwe speler.
teleportRequest=\u00a7c{0}\u00a7c vraagt of hij jou kan teleporteren.
teleportRequestTimeoutInfo=\u00a77This request will timeout after {0} seconds.
teleportTop=\u00a77Bezig met teleporteren naar de top.
-tempbanExempt=\u00a77Je mag deze speler niet een tempban geven
+teleportationCommencing=\u00a77Aan het beginnen met teleporteren...
+teleportationDisabled=\u00a77Teleportatie uitgeschakeld.
+teleportationEnabled=\u00a77Teleportatie ingeschakeld.
+teleporting=\u00a77Bezig met teleporteren...
+teleportingPortal=\u00a77Bezig met teleporteren via de portal.
tempBanned=Tijdelijk geband voor {0}
+tempbanExempt=\u00a77Je mag deze speler niet een tempban geven
thunder= Je {0} onweert de wereld
thunderDuration=Je {0} onweert de wereld voor {1} seconde.
timeBeforeHeal=Afkoeltijd tot de volgende heal: {0}
@@ -365,36 +371,39 @@ unlimitedItemPermission=\u00a7cOnbevoegd om oneindig {0} te hebben.
unlimitedItems=Oneindige voorwerpen:
unmutedPlayer=Speler {0} mag weer spreken.
upgradingFilesError=Fout tijdens het upgraden van de bestanden
-userdataMoveBackError=Fout bij het verplaasten van userdata/{0}.tmp naar userdata/{1}
-userdataMoveError=Fout bij het verplaasten van userdata/{0} naar userdata/{1}.tmp
userDoesNotExist=Speler {0} bestaat niet.
userIsAway={0} is nu AFK
userIsNotAway={0} is niet meer AFK
userJailed=\u00a77Je bent in de gevangenis gezet.
userUsedPortal={0} gebruikte een bestaande uitgangs portal.
+userdataMoveBackError=Fout bij het verplaasten van userdata/{0}.tmp naar userdata/{1}
+userdataMoveError=Fout bij het verplaasten van userdata/{0} naar userdata/{1}.tmp
usingTempFolderForTesting=Tijdelijke map om te testen:
versionMismatch=Verkeerde versie! Update {0} naar dezelfde versie.
versionMismatchAll=Verkeerde versie! Update alle Essentials jars naar dezelfde versie.
voiceSilenced=\u00a77Je kan niet meer praten
warpDeleteError=Fout bij het verwijderen van het warp bestand.
-warpingTo=\u00a77Aan het warpen naar {0}.
warpListPermission=\u00a7cJe hebt geen toegang om die warp te maken.
warpNotExist=Die warp bestaat niet.
-warps=Warps: {0}
-warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
+warpOverwrite=\u00a7cYou cannot overwrite that warp.
warpSet=\u00a77Warp {0} ingesteld.
warpUsePermission=\u00a7cOnbevoegd om die warp te gebruiken.
+warpingTo=\u00a77Aan het warpen naar {0}.
+warps=Warps: {0}
+warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherStorm=\u00a77Je hebt het weer naar storm gezet in de {0}
weatherStormFor=\u00a77Je hebt het weer in de {0} naar storm gezet voor {1} seconde
weatherSun=\u00a77Je hebt het weer naar zon gezet in de {0}
weatherSunFor=\u00a77Je hebt het weer in de {0} naar zon gezet voor {1} seconde
whoisBanned=\u00a79 - Banned: {0}
+whoisExp=\u00a79 - Exp: {0} (Level {1})
whoisGamemode=\u00a79 - Gamemode: {0}
whoisGeoLocation=\u00a79 - Locatie: {0}
whoisGod=\u00a79 - God mode: {0}
whoisHealth=\u00a79 - Levens: {0}/20
whoisIPAddress=\u00a79 - IP Adres: {0}
whoisIs={0} is {1}
+whoisJail=\u00a79 - Jail: {0}
whoisLocation=\u00a79 - Locatie: ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Geld: {0}
whoisOP=\u00a79 - OP: {0}
diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml
index 9165febb2..27541d782 100644
--- a/Essentials/src/plugin.yml
+++ b/Essentials/src/plugin.yml
@@ -13,8 +13,8 @@ commands:
aliases: [eafk]
antioch:
description: 'A little surprise for operators.'
- usage: /<command>
- aliases: [eantioch]
+ usage: /<command> [message]
+ aliases: [eantioch,grenade,tnt,egrenade,etnt]
back:
description: Teleports you to your location prior to tp/spawn/warp.
usage: /<command>
@@ -58,7 +58,7 @@ commands:
clearinventory:
description: Clear all items in your inventory.
usage: /<command>
- aliases: [ci,eci,clearinvent,eclearinvent,eclearinventory]
+ aliases: [ci,eci,clearinvent,clean,eclean,eclearinvent,eclearinventory]
compass:
description: Describes your current bearing.
usage: /<command>
@@ -186,6 +186,9 @@ commands:
description: Kill all mobs in a world.
usage: /<command> [mobType] [radius]
aliases: [ekillall,butcher,ebutcher]
+ kittycannon:
+ description: Throw an exploding kitten at your opponent
+ usage: /<command>
list:
description: List all online players.
usage: /<command>
@@ -292,7 +295,7 @@ commands:
aliases: [createwarp,esetwarp]
setworth:
description: Set the sell value of an item.
- usage: /<command> <itemname|id> <price>
+ usage: /<command> [itemname|id] <price>
aliases: [esetworth]
socialspy:
description: Toggles if you can see msg/mail commands in chat.
diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java
index 58fdfc5fe..1d025abe7 100644
--- a/Essentials/test/com/earth2me/essentials/FakeServer.java
+++ b/Essentials/test/com/earth2me/essentials/FakeServer.java
@@ -705,4 +705,16 @@ public class FakeServer implements Server
{
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public String getWorldType()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean getGenerateStructures()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
index 57302517f..fe3cadbbe 100644
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
@@ -2,7 +2,6 @@ package com.earth2me.essentials.protect;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
-import com.earth2me.essentials.craftbukkit.FakeExplosion;
import java.util.Locale;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -204,11 +203,11 @@ public class EssentialsProtectEntityListener implements Listener
if (event.getEntity() instanceof EnderDragon
&& prot.getSettingBool(ProtectConfig.prevent_enderdragon_blockdmg))
{
+ event.setCancelled(true);
if (prot.getSettingBool(ProtectConfig.enderdragon_fakeexplosions))
{
- FakeExplosion.createExplosion(event, ess.getServer(), ess.getServer().getOnlinePlayers());
+ event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
}
- event.setCancelled(true);
return;
}
else if (event.getEntity() instanceof Creeper
@@ -217,8 +216,8 @@ public class EssentialsProtectEntityListener implements Listener
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
{
//Nicccccccccce plaaacccccccccce..
- FakeExplosion.createExplosion(event, ess.getServer(), ess.getServer().getOnlinePlayers());
event.setCancelled(true);
+ event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
return;
}
else if (event.getEntity() instanceof TNTPrimed
@@ -334,7 +333,7 @@ public class EssentialsProtectEntityListener implements Listener
{
return;
}
- if (prot.getSettingBool(ProtectConfig.prevent_enderman_pickup))
+ if (event.getEntityType() == EntityType.ENDERMAN && prot.getSettingBool(ProtectConfig.prevent_enderman_pickup))
{
event.setCancelled(true);
return;
diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
index c7a17845a..ba71c176f 100644
--- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
+++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
@@ -1,12 +1,13 @@
package com.earth2me.essentials.spawn;
+import com.earth2me.essentials.*;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.IEssentials;
-import com.earth2me.essentials.OfflinePlayer;
-import com.earth2me.essentials.User;
import com.earth2me.essentials.textreader.IText;
import com.earth2me.essentials.textreader.KeywordReplacer;
import com.earth2me.essentials.textreader.SimpleTextPager;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
@@ -67,13 +68,14 @@ public class EssentialsSpawnPlayerListener implements Listener
public void onPlayerJoin(final PlayerJoinEvent event)
{
- final User user = ess.getUser(event.getPlayer());
-
- if (user.hasPlayedBefore())
+ if (event.getPlayer().hasPlayedBefore())
{
LOGGER.log(Level.FINE, "Old player join");
return;
}
+
+ final User user = ess.getUser(event.getPlayer());
+
if (!"none".equalsIgnoreCase(ess.getSettings().getNewbieSpawn()))
{
ess.scheduleSyncDelayedTask(new NewPlayerTeleport(user), 1L);
@@ -86,6 +88,21 @@ public class EssentialsSpawnPlayerListener implements Listener
ess.broadcastMessage(user, pager.getString(0));
}
+ final String kitName = ess.getSettings().getNewPlayerKit();
+ if (!kitName.isEmpty())
+ {
+ try
+ {
+ final Map<String, Object> kit = ess.getSettings().getKit(kitName.toLowerCase(Locale.ENGLISH));
+ final List<String> items = Kit.getItems(user, kit);
+ Kit.expandItems(ess, user, items);
+ }
+ catch (Exception ex)
+ {
+ LOGGER.log(Level.WARNING, ex.getMessage());
+ }
+ }
+
LOGGER.log(Level.FINE, "New player join");
}
@@ -109,7 +126,7 @@ public class EssentialsSpawnPlayerListener implements Listener
try
{
- Location spawn = spawns.getSpawn(ess.getSettings().getNewbieSpawn());
+ final Location spawn = spawns.getSpawn(ess.getSettings().getNewbieSpawn());
if (spawn != null)
{
user.getTeleport().now(spawn, false, TeleportCause.PLUGIN);