diff options
82 files changed, 1845 insertions, 629 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..37bae113c 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. @@ -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..99501d2e5 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. @@ -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..6f4d29020 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. @@ -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..f1609f7f9 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ñ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. @@ -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..4e33fa061 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. @@ -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..c08111085 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. @@ -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); |