summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Essentials/src/com/earth2me/essentials/Backup.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/Essentials.java57
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsConf.java99
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java98
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java142
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsTimer.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java14
-rw-r--r--Essentials/src/com/earth2me/essentials/I18n.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/IEssentials.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/ISettings.java16
-rw-r--r--Essentials/src/com/earth2me/essentials/Jails.java44
-rw-r--r--Essentials/src/com/earth2me/essentials/Kit.java51
-rw-r--r--Essentials/src/com/earth2me/essentials/Mob.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/OfflinePlayer.java26
-rw-r--r--Essentials/src/com/earth2me/essentials/Settings.java90
-rw-r--r--Essentials/src/com/earth2me/essentials/TNTExplodeListener.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/Trade.java30
-rw-r--r--Essentials/src/com/earth2me/essentials/User.java135
-rw-r--r--Essentials/src/com/earth2me/essentials/UserData.java84
-rw-r--r--Essentials/src/com/earth2me/essentials/Util.java109
-rw-r--r--Essentials/src/com/earth2me/essentials/Warps.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/api/Economy.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/api/IJails.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandafk.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandantioch.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbackup.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbalance.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbalancetop.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandban.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbreak.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandeco.java26
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandessentials.java43
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandfly.java63
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java18
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandgive.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandhelp.java11
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java37
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandkit.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandkittycannon.java44
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandlightning.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandlist.java11
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandmail.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandme.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandmsg.java11
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandnick.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandnuke.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandping.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandr.java11
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandrealname.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandseen.java27
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsell.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java22
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java29
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandspawner.java47
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java93
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsudo.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtempban.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtp.java23
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpa.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java28
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpall.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtphere.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpo.java56
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java9
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtree.java12
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandwarp.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandwhois.java14
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandworld.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandworth.java16
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/WarpNotFoundException.java16
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/FakeExplosion.java51
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/FakeInventory.java18
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java38
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/metrics/Metrics.java625
-rw-r--r--Essentials/src/com/earth2me/essentials/metrics/MetricsListener.java40
-rw-r--r--Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java203
-rw-r--r--Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java25
-rw-r--r--Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignBalance.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignDisposal.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignFree.java11
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignKit.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignProtection.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignTrade.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/Signs.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java7
-rw-r--r--Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileWriter.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/textreader/HelpInput.java53
-rw-r--r--Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/textreader/TextInput.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/textreader/TextPager.java21
-rw-r--r--Essentials/src/com/earth2me/essentials/user/User.java10
-rw-r--r--Essentials/src/config.yml89
-rw-r--r--Essentials/src/info.txt6
-rw-r--r--Essentials/src/items.csv136
-rw-r--r--Essentials/src/messages.properties98
-rw-r--r--Essentials/src/messages_da.properties94
-rw-r--r--Essentials/src/messages_de.properties20
-rw-r--r--Essentials/src/messages_en.properties96
-rw-r--r--Essentials/src/messages_es.properties94
-rw-r--r--Essentials/src/messages_fr.properties94
-rw-r--r--Essentials/src/messages_nl.properties94
-rw-r--r--Essentials/src/plugin.yml35
-rw-r--r--Essentials/test/com/earth2me/essentials/FakeServer.java18
-rw-r--r--EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java14
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java11
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java31
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java10
-rw-r--r--examples/bpermissions.yml (renamed from Essentials/src/examples/bpermissions.yml)0
-rw-r--r--examples/permissionsbukkit.yml (renamed from Essentials/src/examples/permissionsbukkit.yml)0
-rw-r--r--examples/permissionsex.yml (renamed from Essentials/src/examples/permissionsex.yml)0
-rw-r--r--lib/bukkit.jarbin4686754 -> 4715521 bytes
-rw-r--r--lib/craftbukkit.jarbin10919232 -> 11093197 bytes
126 files changed, 2978 insertions, 992 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Backup.java b/Essentials/src/com/earth2me/essentials/Backup.java
index ada36c9d7..baa90e561 100644
--- a/Essentials/src/com/earth2me/essentials/Backup.java
+++ b/Essentials/src/com/earth2me/essentials/Backup.java
@@ -61,6 +61,12 @@ public class Backup implements Runnable
{
return;
}
+ if ("save-all".equalsIgnoreCase(command)) {
+ final CommandSender cs = server.getConsoleSender();
+ server.dispatchCommand(cs, "save-all");
+ active = false;
+ return;
+ }
LOGGER.log(Level.INFO, _("backupStarted"));
final CommandSender cs = server.getConsoleSender();
server.dispatchCommand(cs, "save-all");
diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java
index f480d9e8f..c3dac9b50 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;
@@ -32,10 +35,8 @@ import com.earth2me.essentials.signs.SignPlayerListener;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
-import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -45,7 +46,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.Command;
-import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.entity.Player;
@@ -66,7 +66,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 = 2122;
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private transient ISettings settings;
private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this);
@@ -82,6 +82,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()
@@ -124,19 +125,22 @@ public class Essentials extends JavaPlugin implements IEssentials
for (Plugin plugin : pm.getPlugins())
{
if (plugin.getDescription().getName().startsWith("Essentials")
- && !plugin.getDescription().getVersion().equals(this.getDescription().getVersion()))
+ && !plugin.getDescription().getVersion().equals(this.getDescription().getVersion())
+ && !plugin.getDescription().getName().equals("EssentialsAntiCheat"))
{
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 +227,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 +241,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 +451,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 +625,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 +643,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 +657,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/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java
index 9ffe7e5b6..85c2bbd8c 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java
@@ -1,7 +1,14 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
+import com.google.common.io.Files;
import java.io.*;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CoderResult;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
@@ -24,6 +31,7 @@ public class EssentialsConf extends YamlConfiguration
private transient File configFile;
private transient String templateName = null;
private transient Class<?> resourceClass = EssentialsConf.class;
+ private static final Charset UTF8 = Charset.forName("UTF-8");
public EssentialsConf(final File configFile)
{
@@ -104,15 +112,48 @@ public class EssentialsConf extends YamlConfiguration
try
{
- super.load(configFile);
- }
- catch (FileNotFoundException ex)
- {
- LOGGER.log(Level.SEVERE, null, ex);
+ final FileInputStream inputStream = new FileInputStream(configFile);
+ try
+ {
+ final FileChannel channel = inputStream.getChannel();
+ final ByteBuffer buffer = ByteBuffer.allocate((int)configFile.length());
+ channel.read(buffer);
+ buffer.rewind();
+ final CharBuffer data = CharBuffer.allocate((int)configFile.length());
+ CharsetDecoder decoder = UTF8.newDecoder();
+ CoderResult result = decoder.decode(buffer, data, true);
+ if (result.isError())
+ {
+ buffer.rewind();
+ data.clear();
+ LOGGER.log(Level.INFO, "File " + configFile.getAbsolutePath().toString() + " is not utf-8 encoded, trying " + Charset.defaultCharset().displayName());
+ decoder = Charset.defaultCharset().newDecoder();
+ result = decoder.decode(buffer, data, true);
+ if (result.isError())
+ {
+ throw new InvalidConfigurationException("Invalid Characters in file " + configFile.getAbsolutePath().toString());
+ }
+ else
+ {
+ decoder.flush(data);
+ }
+ }
+ else
+ {
+ decoder.flush(data);
+ }
+ final int end = data.position();
+ data.rewind();
+ super.loadFromString(data.subSequence(0, end).toString());
+ }
+ finally
+ {
+ inputStream.close();
+ }
}
catch (IOException ex)
{
- LOGGER.log(Level.SEVERE, null, ex);
+ LOGGER.log(Level.SEVERE, ex.getMessage(), ex);
}
catch (InvalidConfigurationException ex)
{
@@ -301,27 +342,55 @@ public class EssentialsConf extends YamlConfiguration
return def;
}
}
-
- public void save() {
+
+ public void save()
+ {
try
{
save(configFile);
}
catch (IOException ex)
{
- LOGGER.log(Level.SEVERE, null, ex);
+ LOGGER.log(Level.SEVERE, ex.getMessage(), ex);
}
}
-
- public Object getProperty(String path) {
+
+ @Override
+ public void save(final File file) throws IOException
+ {
+ if (file == null)
+ {
+ throw new IllegalArgumentException("File cannot be null");
+ }
+
+ Files.createParentDirs(file);
+
+ final String data = saveToString();
+
+ final OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), UTF8);
+
+ try
+ {
+ writer.write(data);
+ }
+ finally
+ {
+ writer.close();
+ }
+ }
+
+ public Object getProperty(String path)
+ {
return get(path);
}
-
- public void setProperty(String path, Object object) {
+
+ public void setProperty(String path, Object object)
+ {
set(path, object);
}
-
- public void removeProperty(String path) {
+
+ public void removeProperty(String path)
+ {
set(path, null);
}
}
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
index e4879186d..029288530 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
@@ -24,48 +24,50 @@ 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);
+ if (attacker.hasInvulnerabilityAfterTeleport() || defender.hasInvulnerabilityAfterTeleport()) {
+ event.setCancelled(true);
+ }
+ 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 +77,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 +87,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 +110,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..36adf37e2 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
@@ -19,7 +19,9 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
-import org.bukkit.event.block.Action;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.*;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@@ -43,10 +45,7 @@ public class EssentialsPlayerListener implements Listener
{
final User user = ess.getUser(event.getPlayer());
updateCompass(user);
- if (ess.getSettings().changeDisplayName())
- {
- user.setDisplayNick();
- }
+ user.setDisplayNick();
}
@EventHandler(priority = EventPriority.LOWEST)
@@ -69,19 +68,19 @@ public class EssentialsPlayerListener implements Listener
}
}
user.updateActivity(true);
- if (ess.getSettings().changeDisplayName())
- {
- user.setDisplayNick();
- }
+ user.setDisplayNick();
}
- @EventHandler(priority = EventPriority.HIGH)
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerMove(final PlayerMoveEvent event)
{
- if (event.isCancelled())
+ if (event.getFrom().getBlockX() == event.getTo().getBlockX()
+ && event.getFrom().getBlockZ() == event.getTo().getBlockZ()
+ && event.getFrom().getBlockY() == event.getTo().getBlockY())
{
return;
}
+
final User user = ess.getUser(event.getPlayer());
if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers())
@@ -117,11 +116,6 @@ public class EssentialsPlayerListener implements Listener
{
user.toggleGodModeEnabled();
}
- if (user.getSavedInventory() != null)
- {
- user.getInventory().setContents(user.getSavedInventory());
- user.setSavedInventory(null);
- }
user.updateActivity(false);
user.dispose();
}
@@ -132,12 +126,11 @@ public class EssentialsPlayerListener implements Listener
ess.getBackup().onPlayerJoin();
final User user = ess.getUser(event.getPlayer());
- if (ess.getSettings().changeDisplayName())
- {
- user.setDisplayNick();
- }
- user.setLastLoginAddress(user.getAddress().getAddress().getHostAddress());
+ user.setDisplayNick();
+ user.setLastLogin(System.currentTimeMillis());
+
user.updateActivity(false);
+ updateCompass(user);
if (user.isAuthorized("essentials.sleepingignored"))
{
user.setSleepingIgnored(true);
@@ -182,34 +175,40 @@ 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);
+ if (user.isNPC())
+ {
+ user.setNPC(false);
+ }
final long currentTime = System.currentTimeMillis();
final boolean banExpired = user.checkBanTimeout(currentTime);
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"));
return;
}
- if (server.getOnlinePlayers().length >= server.getMaxPlayers() && !user.isAuthorized("essentials.joinfullserver"))
+ if (event.getResult() == Result.KICK_FULL && !user.isAuthorized("essentials.joinfullserver"))
{
event.disallow(Result.KICK_FULL, _("serverFull"));
return;
}
event.allow();
-
- user.setLastLogin(System.currentTimeMillis());
- updateCompass(user);
}
private void updateCompass(final User user)
@@ -225,29 +224,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;
- }
-
+ //TODO: Don't fetch user unless one of these features are enabled.
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())
{
user.setLastLocation();
}
-
- if (ess.getSettings().changeDisplayName())
- {
- user.setDisplayNick();
- }
- updateCompass(user);
+ user.enableInvulnerabilityAfterTeleport();
}
- @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 +249,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 +267,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 +277,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 +293,12 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChangedWorld(final PlayerChangedWorldEvent event)
{
+ final User user = ess.getUser(event.getPlayer());
+ 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 +306,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:
@@ -334,20 +318,16 @@ public class EssentialsPlayerListener implements Listener
{
return;
}
- if (ess.getSettings().getUpdateBedAtDaytime() && event.getClickedBlock().getType() == Material.BED_BLOCK)
+ if (event.getClickedBlock().getType() == Material.BED_BLOCK && ess.getSettings().getUpdateBedAtDaytime())
{
event.getPlayer().setBedSpawnLocation(event.getClickedBlock().getLocation());
}
break;
- case LEFT_CLICK_AIR:
case LEFT_CLICK_BLOCK:
- final User user = ess.getUser(event.getPlayer());
- if (user.hasPowerTools() && user.arePowerToolsEnabled())
+ case LEFT_CLICK_AIR:
+ if (user.hasPowerTools() && user.arePowerToolsEnabled() && usePowertools(user, event.getItem()))
{
- if (usePowertools(user))
- {
- event.setCancelled(true);
- }
+ event.setCancelled(true);
}
break;
default:
@@ -355,9 +335,8 @@ public class EssentialsPlayerListener implements Listener
}
}
- private boolean usePowertools(final User user)
+ private boolean usePowertools(final User user, final ItemStack is)
{
- final ItemStack is = user.getItemInHand();
int id;
if (is == null || (id = is.getTypeId()) == 0)
{
@@ -399,10 +378,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;
}
@@ -412,4 +391,27 @@ public class EssentialsPlayerListener implements Listener
event.setCancelled(true);
}
}
+
+ @EventHandler(priority = EventPriority.LOWEST)
+ public void onInventoryClickEvent(final InventoryClickEvent event)
+ {
+ if (event.getView().getTopInventory().getType() == InventoryType.PLAYER)
+ {
+ final User user = ess.getUser(event.getWhoClicked());
+ if (user.isInvSee() && !user.isAuthorized("essentials.invsee.modify"))
+ {
+ event.setCancelled(true);
+ }
+ }
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onInventoryCloseEvent(final InventoryCloseEvent event)
+ {
+ if (event.getView().getTopInventory().getType() == InventoryType.PLAYER)
+ {
+ final User user = ess.getUser(event.getPlayer());
+ user.setInvSee(false);
+ }
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java
index 0c413bfc8..18f980a62 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java
@@ -48,6 +48,7 @@ public class EssentialsTimer implements Runnable
}
user.checkMuteTimeout(currentTime);
user.checkJailTimeout(currentTime);
+ user.resetInvulnerabilityAfterTeleport();
}
}
}
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/I18n.java b/Essentials/src/com/earth2me/essentials/I18n.java
index 63fdcc065..97d500a6a 100644
--- a/Essentials/src/com/earth2me/essentials/I18n.java
+++ b/Essentials/src/com/earth2me/essentials/I18n.java
@@ -114,6 +114,7 @@ public class I18n implements II18n
{
currentLocale = new Locale(parts[0], parts[1], parts[2]);
}
+ ResourceBundle.clearCache();
Logger.getLogger("Minecraft").log(Level.INFO, String.format("Using locale %s", currentLocale.toString()));
customBundle = ResourceBundle.getBundle(MESSAGES, currentLocale, new FileResClassLoader(I18n.class.getClassLoader(), ess));
localeBundle = ResourceBundle.getBundle(MESSAGES, currentLocale);
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..74942640e 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,16 +117,18 @@ public interface ISettings extends IConf
boolean warnOnSmite();
double getMaxMoney();
-
+
double getMinMoney();
boolean isEcoLogEnabled();
-
+
boolean isEcoLogUpdateEnabled();
boolean removeGodOnDisconnect();
boolean changeDisplayName();
+
+ boolean changePlayerListName();
boolean isPlayerCommand(String string);
@@ -152,7 +156,7 @@ public interface ISettings extends IConf
boolean getRepairEnchanted();
- boolean getIsWorldTeleportPermissions();
+ boolean isWorldTeleportPermissions();
boolean registerBackInListener();
@@ -161,4 +165,10 @@ public interface ISettings extends IConf
EventPriority getRespawnPriority();
long getTpaAcceptCancellation();
+
+ boolean isMetricsEnabled();
+
+ void setMetricsEnabled(boolean metricsEnabled);
+
+ public long getTeleportInvulnerability();
}
diff --git a/Essentials/src/com/earth2me/essentials/Jails.java b/Essentials/src/com/earth2me/essentials/Jails.java
index 7217992ad..00c9d8999 100644
--- a/Essentials/src/com/earth2me/essentials/Jails.java
+++ b/Essentials/src/com/earth2me/essentials/Jails.java
@@ -26,16 +26,17 @@ import org.bukkit.plugin.PluginManager;
public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.settings.Jails> implements IJails
{
private static final transient Logger LOGGER = Bukkit.getLogger();
+ private static transient boolean enabled = false;
public Jails(final IEssentials ess)
{
super(ess, com.earth2me.essentials.settings.Jails.class);
reloadConfig();
- registerListeners();
}
private void registerListeners()
{
+ enabled = true;
final PluginManager pluginManager = ess.getServer().getPluginManager();
final JailBlockListener blockListener = new JailBlockListener();
final JailPlayerListener playerListener = new JailPlayerListener();
@@ -50,6 +51,24 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett
}
@Override
+ public void finishRead()
+ {
+ if (enabled == false && getCount() > 0)
+ {
+ registerListeners();
+ }
+ }
+
+ @Override
+ public void finishWrite()
+ {
+ if (enabled == false)
+ {
+ registerListeners();
+ }
+ }
+
+ @Override
public Location getJail(final String jailName) throws Exception
{
acquireReadLock();
@@ -115,7 +134,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 +165,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 +191,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 +201,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 +215,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..36a2e60b0 100644
--- a/Essentials/src/com/earth2me/essentials/Kit.java
+++ b/Essentials/src/com/earth2me/essentials/Kit.java
@@ -1,11 +1,13 @@
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.*;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
@@ -22,7 +24,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 +62,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)
{
@@ -80,18 +87,44 @@ public class Kit
boolean spew = false;
for (String d : items)
{
- final String[] parts = d.split("[^0-9]+", 3);
- final int id = Material.getMaterial(Integer.parseInt(parts[0])).getId();
- final int amount = parts.length > 1 ? Integer.parseInt(parts[parts.length > 2 ? 2 : 1]) : 1;
- final short data = parts.length > 2 ? Short.parseShort(parts[1]) : 0;
+ final String[] parts = d.split(" ");
+ final String[] item = parts[0].split("[:+',;.]", 2);
+ final int id = Material.getMaterial(Integer.parseInt(item[0])).getId();
+ final short data = item.length > 1 ? Short.parseShort(item[1]) : 0;
+ final int amount = parts.length > 1 ? Integer.parseInt(parts[1]) : 1;
+
+ final ItemStack stack = new ItemStack(id, amount, data);
+ if (parts.length > 2)
+ {
+ for (int i = 2; i < parts.length; i++)
+ {
+ final String[] split = parts[i].split("[:+',;.]", 2);
+ if (split.length < 1)
+ {
+ continue;
+ }
+ final Enchantment enchantment = Enchantments.getByName(split[0]);
+ int level;
+ if (split.length > 1)
+ {
+ level = Integer.parseInt(split[1]);
+ }
+ else
+ {
+ level = enchantment.getMaxLevel();
+ }
+ stack.addEnchantment(enchantment, level);
+ }
+ }
+
final Map<Integer, ItemStack> overfilled;
if (user.isAuthorized("essentials.oversizedstacks"))
{
- overfilled = InventoryWorkaround.addItem(user.getInventory(), true, ess.getSettings().getOversizedStackSize(), new ItemStack(id, amount, data));
+ overfilled = InventoryWorkaround.addItem(user.getInventory(), true, ess.getSettings().getOversizedStackSize(), stack);
}
else
{
- overfilled = InventoryWorkaround.addItem(user.getInventory(), true, new ItemStack(id, amount, data));
+ overfilled = InventoryWorkaround.addItem(user.getInventory(), true, 0, stack);
}
for (ItemStack itemStack : overfilled.values())
{
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..c6230f5e0 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;
@@ -25,7 +26,6 @@ import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;
-
public class OfflinePlayer implements Player
{
private final transient IEssentials ess;
@@ -1027,4 +1027,28 @@ 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.");
+ }
+
+ @Override
+ public boolean isFlying()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setFlying(boolean arg0)
+ {
+ 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..9dee4e990 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;
}
@@ -286,7 +303,7 @@ public class Settings implements ISettings
@Override
public boolean areSignsDisabled()
{
- return enabledSigns.isEmpty();
+ return !signsEnabled;
}
@Override
@@ -310,13 +327,13 @@ public class Settings implements ISettings
{
String format = config.getString("chat.group-formats." + (group == null ? "Default" : group),
config.getString("chat.format", "&7[{GROUP}]&f {DISPLAYNAME}&7:&f {MESSAGE}"));
- format = Util.replaceColor(format);
+ format = Util.replaceFormat(format);
format = format.replace("{DISPLAYNAME}", "%1$s");
format = format.replace("{GROUP}", "{0}");
format = format.replace("{MESSAGE}", "%2$s");
format = format.replace("{WORLDNAME}", "{1}");
format = format.replace("{SHORTWORLDNAME}", "{2}");
- format = format.replaceAll("\\{(\\D*)\\}", "\\[$1\\]");
+ format = format.replaceAll("\\{(\\D*?)\\}", "\\[$1\\]");
mFormat = new MessageFormat(format);
chatFormats.put(group, mFormat);
}
@@ -332,7 +349,13 @@ public class Settings implements ISettings
@Override
public IText getAnnounceNewPlayerFormat()
{
- return new SimpleTextInput(Util.replaceColor(config.getString("newbies.announce-format", "&dWelcome {DISPLAYNAME} to the server!")));
+ return new SimpleTextInput(Util.replaceFormat(config.getString("newbies.announce-format", "&dWelcome {DISPLAYNAME} to the server!")));
+ }
+
+ @Override
+ public String getNewPlayerKit()
+ {
+ return config.getString("newbies.kit", "");
}
@Override
@@ -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)
@@ -398,6 +422,7 @@ public class Settings implements ISettings
return epItemSpwn;
}
private List<EssentialsSign> enabledSigns = new ArrayList<EssentialsSign>();
+ private boolean signsEnabled = false;
@Override
public List<EssentialsSign> enabledSigns()
@@ -405,7 +430,7 @@ public class Settings implements ISettings
return enabledSigns;
}
- private List<EssentialsSign> getEnabledSigns()
+ private List<EssentialsSign> _getEnabledSigns()
{
List<EssentialsSign> newSigns = new ArrayList<EssentialsSign>();
@@ -416,6 +441,11 @@ public class Settings implements ISettings
{
continue;
}
+ if (signName.equals("COLOR") || signName.equals("COLOUR"))
+ {
+ signsEnabled = true;
+ continue;
+ }
try
{
newSigns.add(Signs.valueOf(signName).getSign());
@@ -423,7 +453,9 @@ public class Settings implements ISettings
catch (Exception ex)
{
logger.log(Level.SEVERE, _("unknownItemInList", signName, "enabledSigns"));
+ continue;
}
+ signsEnabled = true;
}
return newSigns;
}
@@ -559,7 +591,7 @@ public class Settings implements ISettings
{
return config.getBoolean("economy-log-enabled", false);
}
-
+
@Override
public boolean isEcoLogUpdateEnabled()
{
@@ -579,6 +611,12 @@ public class Settings implements ISettings
}
@Override
+ public boolean changePlayerListName()
+ {
+ return config.getBoolean("change-playerlist", false);
+ }
+
+ @Override
public boolean useBukkitPermissions()
{
return config.getBoolean("use-bukkit-permissions", false);
@@ -646,7 +684,7 @@ public class Settings implements ISettings
}
@Override
- public boolean getIsWorldTeleportPermissions()
+ public boolean isWorldTeleportPermissions()
{
return config.getBoolean("world-teleport-permissions", false);
}
@@ -695,4 +733,22 @@ 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;
+ }
+
+ @Override
+ public long getTeleportInvulnerability()
+ {
+ return config.getLong("teleport-invulnerability", 0) * 1000;
+ }
}
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..730037d9a 100644
--- a/Essentials/src/com/earth2me/essentials/Trade.java
+++ b/Essentials/src/com/earth2me/essentials/Trade.java
@@ -56,11 +56,9 @@ public class Trade
public void isAffordableFor(final IUser user) throws ChargeException
{
- final double mon = user.getMoney();
if (getMoney() != null
- && mon < getMoney()
&& getMoney() > 0
- && !user.isAuthorized("essentials.eco.loan"))
+ && !user.canAfford(getMoney()))
{
throw new ChargeException(_("notEnoughMoney"));
}
@@ -71,12 +69,10 @@ public class Trade
throw new ChargeException(_("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " ")));
}
+ double money;
if (command != null && !command.isEmpty()
- && !user.isAuthorized("essentials.nocommandcost.all")
- && !user.isAuthorized("essentials.nocommandcost." + command)
- && mon < ess.getSettings().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command)
- && 0 < ess.getSettings().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command)
- && !user.isAuthorized("essentials.eco.loan"))
+ && 0 < (money = getCommandCost(user))
+ && !user.canAfford(money))
{
throw new ChargeException(_("notEnoughMoney"));
}
@@ -158,11 +154,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 +188,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..f931b07d9 100644
--- a/Essentials/src/com/earth2me/essentials/User.java
+++ b/Essentials/src/com/earth2me/essentials/User.java
@@ -23,6 +23,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
private transient long lastActivity = System.currentTimeMillis();
private boolean hidden = false;
private transient Location afkPosition = null;
+ private boolean invSee = false;
private static final Logger logger = Logger.getLogger("Minecraft");
User(final Player base, final IEssentials ess)
@@ -56,6 +57,10 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
@Override
public boolean isAuthorized(final String node)
{
+ if (ess.getSettings().isDebug())
+ {
+ ess.getLogger().log(Level.INFO, "checking if " + base.getName() + " has " + node);
+ }
if (base instanceof OfflinePlayer)
{
return false;
@@ -71,7 +76,15 @@ 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 +118,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 +135,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 +157,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)));
}
}
@@ -186,7 +199,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
@Override
public int compareTo(final User other)
{
- return Util.stripColor(this.getDisplayName()).compareToIgnoreCase(Util.stripColor(other.getDisplayName()));
+ return Util.stripFormat(this.getDisplayName()).compareToIgnoreCase(Util.stripFormat(other.getDisplayName()));
}
@Override
@@ -244,12 +257,12 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
return teleportRequester;
}
- public boolean isTeleportRequestHere()
+ public boolean isTpRequestHere()
{
return teleportRequestHere;
}
- public String getNick(boolean addprefixsuffix)
+ public String getNick(final boolean addprefixsuffix)
{
final StringBuilder nickname = new StringBuilder();
final String nick = getNickname();
@@ -261,30 +274,34 @@ 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("§"))
+ if (suffix.length() < 2 || suffix.charAt(suffix.length() - 2) != '§')
{
nickname.append("§f");
}
@@ -300,36 +317,42 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
public void setDisplayNick()
{
- String name = getNick(true);
- setDisplayName(name);
- if (name.length() > 16)
- {
- name = getNick(false);
- }
- if (name.length() > 16)
+ if (base.isOnline() && ess.getSettings().changeDisplayName())
{
- name = name.substring(0, name.charAt(15) == '§' ? 15 : 16);
- }
- try
- {
- setPlayerListName(name);
- }
- catch (IllegalArgumentException e)
- {
- logger.log(Level.INFO, "Playerlist for " + name + " was not updated. Use a shorter displayname prefix.");
+ String name = getNick(true);
+ setDisplayName(name);
+ if (name.length() > 16)
+ {
+ name = getNick(false);
+ }
+ if (name.length() > 16)
+ {
+ name = Util.stripFormat(name);
+ }
+ if (ess.getSettings().changePlayerListName())
+ {
+ try
+ {
+ setPlayerListName(name);
+ }
+ catch (IllegalArgumentException e)
+ {
+ if (ess.getSettings().isDebug())
+ {
+ logger.log(Level.INFO, "Playerlist for " + name + " was not updated. Name clashed with another online player.");
+ }
+ }
+ }
}
}
@Override
public String getDisplayName()
{
- if (!(base instanceof OfflinePlayer) && ess.getSettings().changeDisplayName())
- {
- setDisplayNick();
- }
return super.getDisplayName() == null ? super.getName() : super.getDisplayName();
}
+ @Override
public Teleport getTeleport()
{
return teleport;
@@ -385,7 +408,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);
}
@@ -485,6 +508,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
setAfk(false);
if (broadcast && !isHidden())
{
+ setDisplayNick();
ess.broadcastMessage(this, _("userIsNotAway", getDisplayName()));
}
}
@@ -517,6 +541,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
setAfk(true);
if (!isHidden())
{
+ setDisplayNick();
ess.broadcastMessage(this, _("userIsAway", getDisplayName()));
}
}
@@ -572,4 +597,38 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
{
return teleportRequestTime;
}
+
+ public boolean isInvSee()
+ {
+ return invSee;
+ }
+
+ public void setInvSee(final boolean set)
+ {
+ invSee = set;
+ }
+ private transient long teleportInvulnerabilityTimestamp = 0;
+
+ public void enableInvulnerabilityAfterTeleport()
+ {
+ final long time = ess.getSettings().getTeleportInvulnerability();
+ if (time > 0)
+ {
+ teleportInvulnerabilityTimestamp = System.currentTimeMillis() + time;
+ }
+ }
+
+ public void resetInvulnerabilityAfterTeleport()
+ {
+ if (teleportInvulnerabilityTimestamp != 0
+ && teleportInvulnerabilityTimestamp < System.currentTimeMillis())
+ {
+ teleportInvulnerabilityTimestamp = 0;
+ }
+ }
+
+ public boolean hasInvulnerabilityAfterTeleport()
+ {
+ return teleportInvulnerabilityTimestamp != 0 && teleportInvulnerabilityTimestamp >= System.currentTimeMillis();
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java
index ea3201f28..abf338470 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;
@@ -41,10 +42,9 @@ public abstract class UserData extends PlayerExtension implements IConf
lastHealTimestamp = _getLastHealTimestamp();
jail = _getJail();
mails = _getMails();
- savedInventory = _getSavedInventory();
teleportEnabled = getTeleportEnabled();
ignoredPlayers = getIgnoredPlayers();
- godmode = getGodModeEnabled();
+ godmode = _getGodModeEnabled();
muted = getMuted();
muteTimeout = _getMuteTimeout();
jailed = getJailed();
@@ -58,6 +58,7 @@ public abstract class UserData extends PlayerExtension implements IConf
isNPC = _isNPC();
arePowerToolsEnabled = _arePowerToolsEnabled();
kitTimestamps = _getKitTimestamps();
+ nickname = _getNickname();
}
private double money;
@@ -175,8 +176,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));
}
}
@@ -188,14 +188,21 @@ public abstract class UserData extends PlayerExtension implements IConf
}
return false;
}
+ private String nickname;
- public String getNickname()
+ 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();
}
@@ -398,50 +405,6 @@ public abstract class UserData extends PlayerExtension implements IConf
mails.add(mail);
setMails(mails);
}
- private ItemStack[] savedInventory;
-
- public ItemStack[] getSavedInventory()
- {
- return savedInventory;
- }
-
- private ItemStack[] _getSavedInventory()
- {
- int size = config.getInt("inventory.size", 0);
- if (size < 1 || (getInventory() != null && size > getInventory().getSize()))
- {
- return null;
- }
- ItemStack[] is = new ItemStack[size];
- for (int i = 0; i < size; i++)
- {
- is[i] = config.getItemStack("inventory." + i);
- }
- return is;
- }
-
- public void setSavedInventory(ItemStack[] is)
- {
- if (is == null || is.length == 0)
- {
- savedInventory = null;
- config.removeProperty("inventory");
- }
- else
- {
- savedInventory = is;
- config.setProperty("inventory.size", is.length);
- for (int i = 0; i < is.length; i++)
- {
- if (is[i] == null || is[i].getType() == Material.AIR)
- {
- continue;
- }
- config.setProperty("inventory." + i, is[i]);
- }
- }
- config.save();
- }
private boolean teleportEnabled;
private boolean getTeleportEnabled()
@@ -515,7 +478,7 @@ public abstract class UserData extends PlayerExtension implements IConf
}
private boolean godmode;
- private boolean getGodModeEnabled()
+ private boolean _getGodModeEnabled()
{
return config.getBoolean("godmode", false);
}
@@ -658,10 +621,16 @@ public abstract class UserData extends PlayerExtension implements IConf
return lastLogin;
}
- public void setLastLogin(long time)
+ private void _setLastLogin(long time)
{
lastLogin = time;
config.setProperty("timestamps.login", time);
+ }
+
+ public void setLastLogin(long time)
+ {
+ _setLastLogin(time);
+ _setLastLoginAddress(base.getAddress().getAddress().getHostAddress());
config.save();
}
private long lastLogout;
@@ -694,11 +663,10 @@ public abstract class UserData extends PlayerExtension implements IConf
return lastLoginAddress;
}
- public void setLastLoginAddress(String address)
+ private void _setLastLoginAddress(String address)
{
lastLoginAddress = address;
config.setProperty("ipAddress", address);
- config.save();
}
private boolean afk;
@@ -817,16 +785,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..510ab8a9a 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;
@@ -485,26 +495,103 @@ public class Util
}
return buf.toString();
}
- private static transient final Pattern VANILLA_COLOR_PATTERN = Pattern.compile("\u00A7+[0-9A-FKa-fk]");
- private static transient final Pattern EASY_COLOR_PATTERN = Pattern.compile("&([0-9a-fk])");
+ private static transient final Pattern URL_PATTERN = Pattern.compile("((?:(?:https?)://)?[\\w-_\\.]{2,})\\.([a-z]{2,3}(?:/\\S+)?)");
+ private static transient final Pattern VANILLA_PATTERN = Pattern.compile("\u00A7+[0-9A-FK-ORa-fk-or]");
+ private static transient final Pattern REPLACE_PATTERN = Pattern.compile("&([0-9a-fk-or])");
+ private static transient final Pattern VANILLA_COLOR_PATTERN = Pattern.compile("\u00A7+[0-9A-Fa-f]");
+ private static transient final Pattern VANILLA_MAGIC_PATTERN = Pattern.compile("\u00A7+[Kk]");
+ private static transient final Pattern VANILLA_FORMAT_PATTERN = Pattern.compile("\u00A7+[L-ORl-or]");
+ private static transient final Pattern REPLACE_COLOR_PATTERN = Pattern.compile("&([0-9a-f])");
+ private static transient final Pattern REPLACE_MAGIC_PATTERN = Pattern.compile("&(k)");
+ private static transient final Pattern REPLACE_FORMAT_PATTERN = Pattern.compile("&([l-or])");
- public static String stripColor(final String input)
+ public static String stripFormat(final String input)
{
if (input == null)
{
return null;
}
+ return VANILLA_PATTERN.matcher(input).replaceAll("");
+ }
- return VANILLA_COLOR_PATTERN.matcher(input).replaceAll("");
+ public static String replaceFormat(final String input)
+ {
+ if (input == null)
+ {
+ return null;
+ }
+ return REPLACE_PATTERN.matcher(input).replaceAll("\u00a7$1");
}
- public static String replaceColor(final String input)
+ public static String blockURL(final String input)
{
if (input == null)
{
return null;
}
+ String text = URL_PATTERN.matcher(input).replaceAll("$1 $2");
+ while (URL_PATTERN.matcher(text).find())
+ {
+ text = URL_PATTERN.matcher(text).replaceAll("$1 $2");
+ }
+ return text;
+ }
- return EASY_COLOR_PATTERN.matcher(input).replaceAll("\u00a7$1");
+ public static String formatString(final IUser user, final String permBase, final String input)
+ {
+ if (input == null)
+ {
+ return null;
+ }
+ String message;
+ if (user.isAuthorized(permBase + ".color"))
+ {
+ message = Util.replaceColor(input, REPLACE_COLOR_PATTERN);
+ }
+ else
+ {
+ message = Util.stripColor(input, VANILLA_COLOR_PATTERN);
+ }
+ if (user.isAuthorized(permBase + ".magic"))
+ {
+ message = Util.replaceColor(message, REPLACE_MAGIC_PATTERN);
+ }
+ else
+ {
+ message = Util.stripColor(message, VANILLA_MAGIC_PATTERN);
+ }
+ if (user.isAuthorized(permBase + ".format"))
+ {
+ message = Util.replaceColor(message, REPLACE_FORMAT_PATTERN);
+ }
+ else
+ {
+ message = Util.stripColor(message, VANILLA_FORMAT_PATTERN);
+ }
+ return message;
+ }
+
+ public static String formatMessage(final IUser user, final String permBase, final String input)
+ {
+ if (input == null)
+ {
+ return null;
+ }
+ String message = formatString(user, permBase, input);
+ if (!user.isAuthorized(permBase + ".url"))
+ {
+ message = Util.blockURL(message);
+ }
+ return message;
+ }
+
+ private static String stripColor(final String input, final Pattern pattern)
+ {
+ return pattern.matcher(input).replaceAll("");
+ }
+
+ private static String replaceColor(final String input, final Pattern pattern)
+ {
+ return pattern.matcher(input).replaceAll("\u00a7$1");
}
}
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/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java
index a1c83606c..c71883571 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java
@@ -31,6 +31,7 @@ public class Commandafk extends EssentialsCommand
private void toggleAfk(User user)
{
+ user.setDisplayNick();
if (!user.toggleAfk())
{
//user.sendMessage(_("markedAsNotAway"));
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/Commandbackup.java b/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java
index 32c8c9e80..38644c680 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java
@@ -19,7 +19,12 @@ public class Commandbackup extends EssentialsCommand
final Backup backup = ess.getBackup();
if (backup == null)
{
- throw new Exception();
+ throw new Exception(_("backupDisabled"));
+ }
+ final String command = ess.getSettings().getBackupCommand();
+ if (command == null || "".equals(command) || "save-all".equalsIgnoreCase(command))
+ {
+ throw new Exception(_("backupDisabled"));
}
backup.run();
sender.sendMessage(_("backupStarted"));
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/Commandbigtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java
index 78d557934..5dd22503a 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java
@@ -27,6 +27,10 @@ public class Commandbigtree extends EssentialsCommand
{
tree = TreeType.BIG_TREE;
}
+ else if (args.length > 0 && args[0].equalsIgnoreCase("jungle"))
+ {
+ tree = TreeType.JUNGLE;
+ }
else
{
throw new NotEnoughArgumentsException();
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java b/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java
index 2691ad4f2..242fa9b53 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandbreak.java
@@ -1,10 +1,14 @@
package com.earth2me.essentials.commands;
+import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
+import java.util.ArrayList;
+import java.util.List;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.block.Block;
import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.inventory.ItemStack;
public class Commandbreak extends EssentialsCommand
@@ -29,8 +33,10 @@ 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 List<ItemStack> list = (List<ItemStack>)block.getDrops();
+ //final BlockBreakEvent event = new BlockBreakEvent(block, user.getBase(), list);
final BlockBreakEvent event = new BlockBreakEvent(block, user.getBase());
server.getPluginManager().callEvent(event);
if (event.isCancelled())
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..6b248f6d5 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,31 @@ 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.");
+ if (metrics.isOptOut()) {
+ metrics.enable();
+ } else {
+ metrics.disable();
+ }
+ sender.sendMessage("Anonymous 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/Commandfly.java b/Essentials/src/com/earth2me/essentials/commands/Commandfly.java
new file mode 100644
index 000000000..526fc090d
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandfly.java
@@ -0,0 +1,63 @@
+package com.earth2me.essentials.commands;
+
+import static com.earth2me.essentials.I18n._;
+import com.earth2me.essentials.User;
+import java.util.Locale;
+import org.bukkit.GameMode;
+import org.bukkit.Server;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+
+public class Commandfly extends EssentialsCommand
+{
+ public Commandfly()
+ {
+ super("fly");
+ }
+
+ @Override
+ protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
+ {
+ if (args.length < 1)
+ {
+ throw new NotEnoughArgumentsException();
+ }
+
+ flyOtherPlayers(server, sender, args[0]);
+ }
+
+ @Override
+ protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
+ {
+ if (args.length > 0 && !args[0].trim().isEmpty() && user.isAuthorized("essentials.fly.others"))
+ {
+ flyOtherPlayers(server, user, args[0]);
+ return;
+ }
+ user.setAllowFlight(!user.getAllowFlight());
+ if (!user.getAllowFlight())
+ {
+ user.setFlying(false);
+ }
+ user.sendMessage(_("flyMode", _(user.getAllowFlight() ? "enabled" : "disabled"), user.getDisplayName()));
+ }
+
+ private void flyOtherPlayers(final Server server, final CommandSender sender, final String name)
+ {
+ for (Player matchPlayer : server.matchPlayer(name))
+ {
+ final User player = ess.getUser(matchPlayer);
+ if (player.isHidden())
+ {
+ continue;
+ }
+ player.setAllowFlight(!player.getAllowFlight());
+ if (!player.getAllowFlight())
+ {
+ player.setFlying(false);
+ }
+ sender.sendMessage(_("flyMode", _(player.getAllowFlight() ? "enabled" : "disabled"), player.getDisplayName()));
+ }
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java
index c61702e59..c985ef725 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java
@@ -12,21 +12,23 @@ public class Commandgetpos extends EssentialsCommand
{
super("getpos");
}
-
+
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
if (args.length > 0 && user.isAuthorized("essentials.getpos.others"))
{
final User otherUser = getPlayer(server, args, 0);
- outputPosition(user, otherUser.getLocation(), user.getLocation());
- }
- else
- {
- outputPosition(user, user.getLocation(), null);
+ if (!otherUser.isHidden() || user.isAuthorized("essentials.list.hidden"))
+ {
+ outputPosition(user, otherUser.getLocation(), user.getLocation());
+ return;
+ }
+
}
+ outputPosition(user, user.getLocation(), null);
}
-
+
@Override
protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
@@ -37,7 +39,7 @@ public class Commandgetpos extends EssentialsCommand
final User user = getPlayer(server, args, 0);
outputPosition(sender, user.getLocation(), null);
}
-
+
//TODO: Translate
private void outputPosition(final CommandSender sender, final Location coords, final Location distance)
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java
index d6e3d8f98..701fa6577 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,9 +82,10 @@ 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"));
}
+ //TODO: TL this.
final String itemName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
sender.sendMessage(ChatColor.BLUE + "Giving " + stack.getAmount() + " of " + itemName + " to " + giveTo.getDisplayName() + ".");
if (giveTo.isAuthorized("essentials.oversizedstacks"))
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java b/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java
index 769aac483..6339359f1 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java
@@ -4,6 +4,7 @@ import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import com.earth2me.essentials.textreader.*;
+import java.util.Locale;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
@@ -21,6 +22,7 @@ public class Commandhelp extends EssentialsCommand
IText output;
String pageStr = args.length > 0 ? args[0] : null;
String chapterPageStr = args.length > 1 ? args[1] : null;
+ String command = commandLabel;
final IText input = new TextInput(user, "help", false, ess);
if (input.getLines().isEmpty())
@@ -31,7 +33,12 @@ public class Commandhelp extends EssentialsCommand
}
else
{
- output = new HelpInput(user, pageStr, ess);
+ if (pageStr.length() > 26)
+ {
+ pageStr = pageStr.substring(0, 25);
+ }
+ output = new HelpInput(user, pageStr.toLowerCase(Locale.ENGLISH), ess);
+ command = command.concat(" ").concat(pageStr);
pageStr = chapterPageStr;
}
chapterPageStr = null;
@@ -41,7 +48,7 @@ public class Commandhelp extends EssentialsCommand
output = new KeywordReplacer(input, user, ess);
}
final TextPager pager = new TextPager(output);
- pager.showPage(pageStr, chapterPageStr, commandLabel, user);
+ pager.showPage(pageStr, chapterPageStr, command, user);
}
@Override
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java b/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java
index 20cd5cdd3..948cfa769 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java
@@ -22,8 +22,8 @@ public class Commandhelpop extends EssentialsCommand
{
throw new NotEnoughArgumentsException();
}
-
- final String message = _("helpOp", user.getDisplayName(), Util.stripColor(getFinalArg(args, 0)));
+ user.setDisplayNick();
+ final String message = _("helpOp", user.getDisplayName(), Util.stripFormat(getFinalArg(args, 0)));
logger.log(Level.INFO, message);
for (Player onlinePlayer : server.getOnlinePlayers())
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java b/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java
index 1f5c32faa..a4a659e97 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java
@@ -17,41 +17,12 @@ public class Commandinvsee extends EssentialsCommand
@Override
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
-
- if (args.length < 1 && user.getSavedInventory() == null)
+ if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
- User invUser = user;
- if (args.length == 1)
- {
- invUser = getPlayer(server, args, 0);
- }
- if (invUser == user && user.getSavedInventory() != null)
- {
- invUser.getInventory().setContents(user.getSavedInventory());
- user.setSavedInventory(null);
- user.sendMessage(_("invRestored"));
- throw new NoChargeException();
- }
-
- if (user.getSavedInventory() == null)
- {
- user.setSavedInventory(user.getInventory().getContents());
- }
- ItemStack[] invUserStack = invUser.getInventory().getContents();
- final int userStackLength = user.getInventory().getContents().length;
- if (invUserStack.length < userStackLength)
- {
- invUserStack = Arrays.copyOf(invUserStack, userStackLength);
- }
- if (invUserStack.length > userStackLength)
- {
- throw new Exception(_("invBigger"));
- }
- user.getInventory().setContents(invUserStack);
- user.sendMessage(_("invSee", invUser.getDisplayName()));
- user.sendMessage(_("invSeeHelp"));
- throw new NoChargeException();
+ final User invUser = getPlayer(server, args, 0);
+ user.setInvSee(true);
+ user.openInventory(invUser.getInventory());
}
}
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..c981f45c1 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;
@@ -43,8 +44,10 @@ public class Commandlist extends EssentialsCommand
if (showhidden && playerHidden > 0)
{
online = _("listAmountHidden", server.getOnlinePlayers().length - playerHidden, playerHidden, server.getMaxPlayers());
- } else {
- online = _("listAmount",server.getOnlinePlayers().length - playerHidden, server.getMaxPlayers());
+ }
+ else
+ {
+ online = _("listAmount", server.getOnlinePlayers().length - playerHidden, server.getMaxPlayers());
}
sender.sendMessage(online);
@@ -72,7 +75,7 @@ public class Commandlist extends EssentialsCommand
for (String group : groups)
{
final StringBuilder groupString = new StringBuilder();
- groupString.append(group).append(": ");
+ groupString.append(_("listGroupTag", Util.replaceFormat(group)));
final List<User> users = sort.get(group);
Collections.sort(users);
boolean first = true;
@@ -94,6 +97,7 @@ public class Commandlist extends EssentialsCommand
{
groupString.append(_("listHiddenTag"));
}
+ user.setDisplayNick();
groupString.append(user.getDisplayName());
groupString.append("§f");
}
@@ -135,6 +139,7 @@ public class Commandlist extends EssentialsCommand
{
onlineUsers.append(_("listHiddenTag"));
}
+ user.setDisplayNick();
onlineUsers.append(user.getDisplayName());
onlineUsers.append("§f");
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java
index abc551f58..fa4643875 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java
@@ -59,7 +59,7 @@ public class Commandmail extends EssentialsCommand
}
if (!u.isIgnoredPlayer(user.getName()))
{
- final String mail = Util.sanitizeString(Util.stripColor(getFinalArg(args, 2)));
+ final String mail = Util.sanitizeString(Util.stripFormat(getFinalArg(args, 2)));
u.addMail(user.getName() + ": " + mail);
}
user.sendMessage(_("mailSent"));
@@ -71,7 +71,7 @@ public class Commandmail extends EssentialsCommand
{
throw new Exception(_("noPerm", "essentials.mail.sendall"));
}
- ess.scheduleAsyncDelayedTask(new SendAll(user.getName() + ": " + Util.stripColor(getFinalArg(args, 1))));
+ ess.scheduleAsyncDelayedTask(new SendAll(user.getName() + ": " + Util.stripFormat(getFinalArg(args, 1))));
user.sendMessage(_("mailSent"));
return;
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandme.java b/Essentials/src/com/earth2me/essentials/commands/Commandme.java
index 1530f3ad7..4322592d4 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandme.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandme.java
@@ -27,15 +27,9 @@ public class Commandme extends EssentialsCommand
}
String message = getFinalArg(args, 0);
- if (user.isAuthorized("essentials.chat.color"))
- {
- message = Util.replaceColor(message);
- }
- else {
- message = Util.stripColor(message);
- }
-
+ message = Util.formatMessage(user, "essentials.chat", message);
+ user.setDisplayNick();
ess.broadcastMessage(user, _("action", user.getDisplayName(), message));
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java
index 128d8eeb5..2e1011e3b 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java
@@ -34,18 +34,11 @@ public class Commandmsg extends EssentialsCommand
{
throw new Exception(_("voiceSilenced"));
}
- if (user.isAuthorized("essentials.msg.color"))
- {
- message = Util.replaceColor(message);
- }
- else
- {
- message = Util.stripColor(message);
- }
+ message = Util.formatMessage(user, "essentials.msg", message);
}
else
{
- message = Util.replaceColor(message);
+ message = Util.replaceFormat(message);
}
final String translatedMe = _("me");
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java
index b9fbccb37..808e0be70 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java
@@ -64,11 +64,13 @@ public class Commandnick extends EssentialsCommand
private String formatNickname(final User user, final String nick)
{
- if (user == null || user.isAuthorized("essentials.nick.color"))
+ if (user == null)
{
- return nick.replace('&', '\u00a7').replaceAll("\u00a7+k", "");
- } else {
- return Util.stripColor(nick);
+ return Util.replaceFormat(nick);
+ }
+ else
+ {
+ return Util.formatString(user, "essentials.nick", nick);
}
}
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/Commandping.java b/Essentials/src/com/earth2me/essentials/commands/Commandping.java
index 0956f4082..43aa18d5f 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandping.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandping.java
@@ -23,7 +23,7 @@ public class Commandping extends EssentialsCommand
}
else
{
- sender.sendMessage(Util.replaceColor(getFinalArg(args, 0)));
+ sender.sendMessage(Util.replaceFormat(getFinalArg(args, 0)));
}
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandr.java b/Essentials/src/com/earth2me/essentials/commands/Commandr.java
index fe2a4e5b1..9b585509d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandr.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandr.java
@@ -32,20 +32,13 @@ public class Commandr extends EssentialsCommand
if (sender instanceof Player)
{
User user = ess.getUser(sender);
- if (user.isAuthorized("essentials.msg.color"))
- {
- message = Util.replaceColor(message);
- }
- else
- {
- message = Util.stripColor(message);
- }
+ message = Util.formatMessage(user, "essentials.msg", message);
replyTo = user;
senderName = user.getDisplayName();
}
else
{
- message = Util.replaceColor(message);
+ message = Util.replaceFormat(message);
replyTo = Console.getConsoleReplyTo();
senderName = Console.NAME;
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java
index b48ac5bcb..c99018211 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java
@@ -31,9 +31,10 @@ public class Commandrealname extends EssentialsCommand
{
continue;
}
- final String displayName = Util.stripColor(u.getDisplayName()).toLowerCase(Locale.ENGLISH);
+ u.setDisplayNick();
+ final String displayName = Util.stripFormat(u.getDisplayName()).toLowerCase(Locale.ENGLISH);
if (!whois.equals(displayName)
- && !displayName.equals(Util.stripColor(ess.getSettings().getNicknamePrefix()) + whois)
+ && !displayName.equals(Util.stripFormat(ess.getSettings().getNicknamePrefix()) + whois)
&& !whois.equalsIgnoreCase(u.getName()))
{
continue;
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java
index cf500e094..38abb2dab 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java
@@ -17,26 +17,39 @@ 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);
+ player.setDisplayNick();
+ 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())
+ player.setDisplayNick();
+ 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..91a1dd657 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;
@@ -16,6 +17,32 @@ public class Commandsetworth extends EssentialsCommand
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
+ if (args.length < 1)
+ {
+ 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();
@@ -23,6 +50,6 @@ public class Commandsetworth extends EssentialsCommand
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..fdaa0eb9e 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
@@ -5,14 +5,14 @@ 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;
import org.bukkit.block.Block;
import org.bukkit.entity.*;
+import org.bukkit.entity.Villager.Profession;
+import org.bukkit.material.Colorable;
public class Commandspawnmob extends EssentialsCommand
@@ -27,12 +27,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 +177,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,9 +198,11 @@ 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
{
- if (type == EntityType.SLIME || type == EntityType.MAGMA_CUBE)
+ data = data.toLowerCase(Locale.ENGLISH);
+
+ if (spawned instanceof Slime)
{
try
{
@@ -210,35 +213,24 @@ public class Commandspawnmob extends EssentialsCommand
throw new Exception(_("slimeMalformedSize"), e);
}
}
- if ((type == EntityType.SHEEP
- || type == EntityType.COW
- || type == EntityType.MUSHROOM_COW
- || type == EntityType.CHICKEN
- || type == EntityType.PIG
- || type == EntityType.WOLF)
- && data.equalsIgnoreCase("baby"))
+ if (spawned instanceof Ageable && data.contains("baby"))
{
- ((Animals)spawned).setAge(-24000);
+ ((Ageable)spawned).setBaby();
return;
}
- if (type == EntityType.SHEEP)
+ if (spawned instanceof Colorable)
{
- 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)]);
+ final Random rand = new Random();
+ ((Colorable)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]);
}
else
{
- ((Sheep)spawned).setColor(DyeColor.valueOf(color));
+ ((Colorable)spawned).setColor(DyeColor.valueOf(color));
}
}
catch (Exception e)
@@ -246,30 +238,45 @@ public class Commandspawnmob extends EssentialsCommand
throw new Exception(_("sheepMalformedColor"), e);
}
}
- if (type == EntityType.WOLF
- && data.toLowerCase(Locale.ENGLISH).startsWith("tamed"))
+ if (spawned instanceof Tameable && 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"))
+ }
+ 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);
+ }
+ else if (data.contains("red"))
+ {
+ ((Ocelot)spawned).setCatType(Ocelot.Type.RED_CAT);
+ }
+ else if (data.contains("black"))
{
- ((Animals)spawned).setAge(-24000);
+ ((Ocelot)spawned).setCatType(Ocelot.Type.BLACK_CAT);
}
}
- if (type == EntityType.CREEPER && data.equalsIgnoreCase("powered"))
+ if (type == EntityType.VILLAGER)
{
- ((Creeper)spawned).setPowered(true);
+ for (Profession prof : Villager.Profession.values())
+ {
+ if (data.contains(prof.toString().toLowerCase(Locale.ENGLISH)))
+ {
+ ((Villager)spawned).setProfession(prof);
+ }
+ }
}
}
}
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/Commandsuicide.java b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java
index d6afe707a..50933c8f5 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java
@@ -21,6 +21,7 @@ public class Commandsuicide extends EssentialsCommand
user.damage(1000);
user.setHealth(0);
user.sendMessage(_("suicideMessage"));
+ user.setDisplayNick();
ess.broadcastMessage(user,_("suicideSuccess", user.getDisplayName()));
}
}
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..d6d6b76f9 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().isWorldTeleportPermissions()
+ && !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,14 +42,26 @@ 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);
final User toPlayer = getPlayer(server, args, 1);
+ if (!target.isTeleportEnabled())
+ {
+ throw new Exception(_("teleportDisabled", target.getDisplayName()));
+ }
+ if (!toPlayer.isTeleportEnabled())
+ {
+ throw new Exception(_("teleportDisabled", toPlayer.getDisplayName()));
+ }
+ if (target.getWorld() != toPlayer.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + toPlayer.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + toPlayer.getWorld().getName()));
+ }
target.getTeleport().now(toPlayer, false, TeleportCause.COMMAND);
target.sendMessage(_("teleportAtoB", user.getDisplayName(), toPlayer.getDisplayName()));
break;
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java
index 34195d51a..95cbc58cd 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java
@@ -25,6 +25,11 @@ public class Commandtpa extends EssentialsCommand
{
throw new Exception(_("teleportDisabled", player.getDisplayName()));
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + player.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + player.getWorld().getName()));
+ }
if (!player.isIgnoredPlayer(user.getName()))
{
player.requestTeleport(user, false);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java
index c0abdc1ad..7af445c51 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java
@@ -45,6 +45,11 @@ public class Commandtpaall extends EssentialsCommand
{
continue;
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + user.getWorld().getName()))
+ {
+ continue;
+ }
try
{
player.requestTeleport(user, true);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java
index 891742043..9203f9015 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;
@@ -20,15 +19,26 @@ public class Commandtpaccept extends EssentialsCommand
{
final User target = user.getTeleportRequest();
- if (target == null
- || target.getBase() instanceof OfflinePlayer
- || (user.isTeleportRequestHere() && !target.isAuthorized("essentials.tpahere"))
- || (!user.isTeleportRequestHere() && !target.isAuthorized("essentials.tpa") && !target.isAuthorized("essentials.tpaall"))
- )
+
+ if (target == null || !target.isOnline())
+ {
+ throw new Exception(_("noPendingRequest"));
+ }
+
+ if (user.isTpRequestHere() && ((!target.isAuthorized("essentials.tpahere") && !target.isAuthorized("essentials.tpaall"))
+ || (user.getWorld() != target.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + user.getWorld().getName()))))
{
throw new Exception(_("noPendingRequest"));
}
-
+
+ if (!user.isTpRequestHere() && (!target.isAuthorized("essentials.tpa")
+ || (user.getWorld() != target.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + target.getWorld().getName()))))
+ {
+ throw new Exception(_("noPendingRequest"));
+ }
+
if (args.length > 0 && !target.getName().contains(args[0]))
{
throw new Exception(_("noPendingRequest"));
@@ -42,7 +52,7 @@ public class Commandtpaccept extends EssentialsCommand
}
final Trade charge = new Trade(this.getName(), ess);
- if (user.isTeleportRequestHere())
+ if (user.isTpRequestHere())
{
charge.isAffordableFor(user);
}
@@ -53,7 +63,7 @@ public class Commandtpaccept extends EssentialsCommand
user.sendMessage(_("requestAccepted"));
target.sendMessage(_("requestAcceptedFrom", user.getDisplayName()));
- if (user.isTeleportRequestHere())
+ if (user.isTpRequestHere())
{
user.getTeleport().teleport(target, charge, TeleportCause.COMMAND);
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java
index 376c2be44..9d389ecac 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java
@@ -25,6 +25,11 @@ public class Commandtpahere extends EssentialsCommand
{
throw new Exception(_("teleportDisabled", player.getDisplayName()));
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + user.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + user.getWorld().getName()));
+ }
player.requestTeleport(user, true);
player.sendMessage(_("teleportHereRequest", user.getDisplayName()));
player.sendMessage(_("typeTpaccept"));
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java
index f21f1a6bc..6335a4a54 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java
@@ -42,6 +42,11 @@ public class Commandtpall extends EssentialsCommand
{
continue;
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + user.getWorld().getName()))
+ {
+ continue;
+ }
try
{
player.getTeleport().now(user, false, TeleportCause.COMMAND);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java
index 733091d1a..92eb87226 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java
@@ -22,6 +22,11 @@ public class Commandtphere extends EssentialsCommand
{
throw new Exception(_("teleportDisabled", player.getDisplayName()));
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + user.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + user.getWorld().getName()));
+ }
player.getTeleport().teleport(user, new Trade(this.getName(), ess), TeleportCause.COMMAND);
user.sendMessage(_("teleporting"));
player.sendMessage(_("teleporting"));
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java
index 7c13b80d4..53204114e 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;
@@ -17,28 +16,49 @@ public class Commandtpo extends EssentialsCommand
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
- if (args.length < 1)
+ switch (args.length)
{
+ case 0:
throw new NotEnoughArgumentsException();
- }
-
- //Just basically the old tp command
- final User player = getPlayer(server, args, 0, true);
- // Check if user is offline
- if (player.getBase() instanceof OfflinePlayer)
- {
- throw new NoSuchFieldException(_("playerNotFound"));
- }
- // Verify permission
- if (!player.isHidden() || user.isAuthorized("essentials.teleport.hidden"))
- {
+ case 1:
+ final User player = getPlayer(server, args, 0, true);
+ if (!player.isOnline() || (player.isHidden() && !user.isAuthorized("essentials.teleport.hidden")))
+ {
+ throw new NoSuchFieldException(_("playerNotFound"));
+ }
+ if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + player.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + player.getWorld().getName()));
+ }
+ user.sendMessage(_("teleporting"));
user.getTeleport().now(player, false, TeleportCause.COMMAND);
+
+ default:
+ if (!user.isAuthorized("essentials.tp.others"))
+ {
+ throw new Exception(_("noPerm", "essentials.tp.others"));
+ }
user.sendMessage(_("teleporting"));
- }
- else
- {
- throw new NoSuchFieldException(_("playerNotFound"));
+ final User target = getPlayer(server, args, 0, true);
+ final User toPlayer = getPlayer(server, args, 1, true);
+
+ if (!target.isOnline() || !toPlayer.isOnline()
+ || ((target.isHidden() || toPlayer.isHidden()) && !user.isAuthorized("essentials.teleport.hidden")))
+ {
+ throw new NoSuchFieldException(_("playerNotFound"));
+ }
+
+ if (target.getWorld() != toPlayer.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + toPlayer.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + toPlayer.getWorld().getName()));
+ }
+
+ target.getTeleport().now(toPlayer, false, TeleportCause.COMMAND);
+ target.sendMessage(_("teleportAtoB", user.getDisplayName(), toPlayer.getDisplayName()));
+ break;
}
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java
index e226f0702..880c4e362 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,11 +25,17 @@ 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"));
}
+ if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
+ && !user.isAuthorized("essentials.world." + user.getWorld().getName()))
+ {
+ throw new Exception(_("noPerm", "essentials.world." + user.getWorld().getName()));
+ }
+
// Verify permission
if (!player.isHidden() || user.isAuthorized("essentials.teleport.hidden"))
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java
index 20cc9d46f..6c2c15983 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java
@@ -43,6 +43,18 @@ public class Commandtree extends EssentialsCommand
{
tree = TreeType.BROWN_MUSHROOM;
}
+ else if (args[0].equalsIgnoreCase("jungle"))
+ {
+ tree = TreeType.SMALL_JUNGLE;
+ }
+ else if (args[0].equalsIgnoreCase("junglebush"))
+ {
+ tree = TreeType.JUNGLE_BUSH;
+ }
+ else if (args[0].equalsIgnoreCase("swamp"))
+ {
+ tree = TreeType.SWAMP;
+ }
else
{
throw new NotEnoughArgumentsException();
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..6c7919163 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;
@@ -36,7 +37,7 @@ public class Commandwhois extends EssentialsCommand
showhidden = true;
}
final String whois = args[0].toLowerCase(Locale.ENGLISH);
- final int prefixLength = Util.stripColor(ess.getSettings().getNicknamePrefix()).length();
+ final int prefixLength = Util.stripFormat(ess.getSettings().getNicknamePrefix()).length();
for (Player onlinePlayer : server.getOnlinePlayers())
{
final User user = ess.getUser(onlinePlayer);
@@ -44,7 +45,7 @@ public class Commandwhois extends EssentialsCommand
{
continue;
}
- final String nickName = Util.stripColor(user.getNickname());
+ final String nickName = Util.stripFormat(user.getNickname());
if (!whois.equalsIgnoreCase(nickName)
&& !whois.substring(prefixLength).equalsIgnoreCase(nickName)
&& !whois.equalsIgnoreCase(user.getName()))
@@ -52,16 +53,23 @@ public class Commandwhois extends EssentialsCommand
continue;
}
sender.sendMessage("");
+ user.setDisplayNick();
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..647115d66 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().isWorldTeleportPermissions() && !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/FakeInventory.java b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeInventory.java
index 01e7bd5b2..8456c956e 100644
--- a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeInventory.java
+++ b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeInventory.java
@@ -222,4 +222,22 @@ public class FakeInventory implements Inventory
{
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public int getMaxStackSize()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setMaxStackSize(int size)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ListIterator<ItemStack> iterator(int index)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
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/InventoryWorkaround.java b/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java
index a6d5d4fbc..fc9cbb74b 100644
--- a/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java
+++ b/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java
@@ -15,12 +15,12 @@ public final class InventoryWorkaround
{
}
- public static int first(final Inventory inventory, final ItemStack item, final boolean forceDurability, final boolean forceAmount, final boolean forceEnchantments)
+ public static int first(final Inventory inventory, final ItemStack item, final boolean enforceDurability, final boolean enforceAmount, final boolean enforceEnchantments)
{
- return next(inventory, item, 0, forceDurability, forceAmount, forceEnchantments);
+ return next(inventory, item, 0, enforceDurability, enforceAmount, enforceEnchantments);
}
- public static int next(final Inventory cinventory, final ItemStack item, final int start, final boolean forceDurability, final boolean forceAmount, final boolean forceEnchantments)
+ public static int next(final Inventory cinventory, final ItemStack item, final int start, final boolean enforceDurability, final boolean enforceAmount, final boolean enforceEnchantments)
{
final ItemStack[] inventory = cinventory.getContents();
for (int i = start; i < inventory.length; i++)
@@ -30,7 +30,7 @@ public final class InventoryWorkaround
{
continue;
}
- if (item.getTypeId() == cItem.getTypeId() && (!forceAmount || item.getAmount() == cItem.getAmount()) && (!forceDurability || cItem.getDurability() == item.getDurability()) && (!forceEnchantments || cItem.getEnchantments().equals(item.getEnchantments())))
+ if (item.getTypeId() == cItem.getTypeId() && (!enforceAmount || item.getAmount() == cItem.getAmount()) && (!enforceDurability || cItem.getDurability() == item.getDurability()) && (!enforceEnchantments || cItem.getEnchantments().equals(item.getEnchantments())))
{
return i;
}
@@ -38,12 +38,12 @@ public final class InventoryWorkaround
return -1;
}
- public static int firstPartial(final Inventory cinventory, final ItemStack item, final boolean forceDurability)
+ public static int firstPartial(final Inventory cinventory, final ItemStack item, final boolean enforceDurability)
{
- return firstPartial(cinventory, item, forceDurability, item.getType().getMaxStackSize());
+ return firstPartial(cinventory, item, enforceDurability, item.getType().getMaxStackSize());
}
- public static int firstPartial(final Inventory cinventory, final ItemStack item, final boolean forceDurability, final int maxAmount)
+ public static int firstPartial(final Inventory cinventory, final ItemStack item, final boolean enforceDurability, final int maxAmount)
{
if (item == null)
{
@@ -57,7 +57,7 @@ public final class InventoryWorkaround
{
continue;
}
- if (item.getTypeId() == cItem.getTypeId() && cItem.getAmount() < maxAmount && (!forceDurability || cItem.getDurability() == item.getDurability()) && cItem.getEnchantments().equals(item.getEnchantments()))
+ if (item.getTypeId() == cItem.getTypeId() && cItem.getAmount() < maxAmount && (!enforceDurability || cItem.getDurability() == item.getDurability()) && cItem.getEnchantments().equals(item.getEnchantments()))
{
return i;
}
@@ -65,12 +65,12 @@ public final class InventoryWorkaround
return -1;
}
- public static boolean addAllItems(final Inventory cinventory, final boolean forceDurability, final ItemStack... items)
+ public static boolean addAllItems(final Inventory cinventory, final boolean enforceDurability, final ItemStack... items)
{
final Inventory fake = new FakeInventory(cinventory.getContents());
- if (addItem(fake, forceDurability, items).isEmpty())
+ if (addItem(fake, enforceDurability, items).isEmpty())
{
- addItem(cinventory, forceDurability, items);
+ addItem(cinventory, enforceDurability, items);
return true;
}
else
@@ -84,7 +84,7 @@ public final class InventoryWorkaround
return addItem(cinventory, forceDurability, 0, items);
}
- public static Map<Integer, ItemStack> addItem(final Inventory cinventory, final boolean forceDurability, final int oversizedStacks, final ItemStack... items)
+ public static Map<Integer, ItemStack> addItem(final Inventory cinventory, final boolean enforceDurability, final int oversizedStacks, final ItemStack... items)
{
final Map<Integer, ItemStack> leftover = new HashMap<Integer, ItemStack>();
@@ -109,7 +109,7 @@ public final class InventoryWorkaround
combined[j] = items[i].clone();
break;
}
- if (combined[j].getTypeId() == items[i].getTypeId() && (!forceDurability || combined[j].getDurability() == items[i].getDurability()) && combined[j].getEnchantments().equals(items[i].getEnchantments()))
+ if (combined[j].getTypeId() == items[i].getTypeId() && (!enforceDurability || combined[j].getDurability() == items[i].getDurability()) && combined[j].getEnchantments().equals(items[i].getEnchantments()))
{
combined[j].setAmount(combined[j].getAmount() + items[i].getAmount());
break;
@@ -130,7 +130,7 @@ public final class InventoryWorkaround
{
// Do we already have a stack of it?
final int maxAmount = oversizedStacks > item.getType().getMaxStackSize() ? oversizedStacks : item.getType().getMaxStackSize();
- final int firstPartial = firstPartial(cinventory, item, forceDurability, maxAmount);
+ final int firstPartial = firstPartial(cinventory, item, enforceDurability, maxAmount);
// Drat! no partial stack
if (firstPartial == -1)
@@ -186,7 +186,7 @@ public final class InventoryWorkaround
return leftover;
}
- public static Map<Integer, ItemStack> removeItem(final Inventory cinventory, final boolean forceDurability, final boolean forceEnchantments, final ItemStack... items)
+ public static Map<Integer, ItemStack> removeItem(final Inventory cinventory, final boolean enforceDurability, final boolean enforceEnchantments, final ItemStack... items)
{
final Map<Integer, ItemStack> leftover = new HashMap<Integer, ItemStack>();
@@ -211,7 +211,7 @@ public final class InventoryWorkaround
}
// get first Item, ignore the amount
- final int first = first(cinventory, item, forceDurability, false, forceEnchantments);
+ final int first = first(cinventory, item, enforceDurability, false, enforceEnchantments);
// Drat! we don't have this type in the inventory
if (first == -1)
@@ -244,7 +244,7 @@ public final class InventoryWorkaround
return leftover;
}
- public static boolean containsItem(final Inventory cinventory, final boolean forceDurability, final boolean forceEnchantments, final ItemStack... items)
+ public static boolean containsItem(final Inventory cinventory, final boolean enforceDurability, final boolean enforceEnchantments, final ItemStack... items)
{
final Map<Integer, ItemStack> leftover = new HashMap<Integer, ItemStack>();
@@ -266,7 +266,7 @@ public final class InventoryWorkaround
combined[j] = items[i].clone();
break;
}
- if (combined[j].getTypeId() == items[i].getTypeId() && (!forceDurability || combined[j].getDurability() == items[i].getDurability()) && (!forceEnchantments || combined[j].getEnchantments().equals(items[i].getEnchantments())))
+ if (combined[j].getTypeId() == items[i].getTypeId() && (!enforceDurability || combined[j].getDurability() == items[i].getDurability()) && (!enforceEnchantments || combined[j].getEnchantments().equals(items[i].getEnchantments())))
{
combined[j].setAmount(combined[j].getAmount() + items[i].getAmount());
break;
@@ -292,7 +292,7 @@ public final class InventoryWorkaround
break;
}
- final int slot = next(cinventory, item, position, forceDurability, false, forceEnchantments);
+ final int slot = next(cinventory, item, position, enforceDurability, false, enforceEnchantments);
// Drat! we don't have this type in the inventory
if (slot == -1)
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..e009daa5d
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java
@@ -0,0 +1,625 @@
+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 java.io.*;
+import java.net.Proxy;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.logging.Level;
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.InvalidConfigurationException;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginDescriptionFile;
+
+
+/**
+ * <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 static final 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;
+ /**
+ * Lock for synchronization
+ */
+ private final Object optOutLock = new Object();
+ /**
+ * Id of the scheduled task
+ */
+ private volatile int taskId = -1;
+
+ public Metrics(final 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(final String name)
+ {
+ if (name == null)
+ {
+ throw new IllegalArgumentException("Graph name cannot be null");
+ }
+
+ // Construct the graph object
+ final 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(final 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);
+ }
+
+ /**
+ * 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()
+ {
+ synchronized (optOutLock)
+ {
+ // Did we opt out?
+ if (isOptOut())
+ {
+ return;
+ }
+
+ // Begin hitting the server with glorious data
+ taskId = plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable()
+ {
+ private boolean firstPost = true;
+
+ public void run()
+ {
+ try
+ {
+ // This has to be synchronized or it can collide with the disable method.
+ synchronized (optOutLock)
+ {
+ // Disable Task, if it is running and the server owner decided to opt-out
+ if (isOptOut() && taskId > 0)
+ {
+ plugin.getServer().getScheduler().cancelTask(taskId);
+ taskId = -1;
+ }
+ }
+
+ // 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)
+ {
+ Bukkit.getLogger().log(Level.INFO, "[Metrics] {0}", e.getMessage());
+ }
+ }
+ }, 0, PING_INTERVAL * 1200);
+ }
+ }
+
+ /**
+ * Has the server owner denied plugin metrics?
+ *
+ * @return
+ */
+ public boolean isOptOut()
+ {
+ synchronized (optOutLock)
+ {
+ try
+ {
+ // Reload the metrics file
+ configuration.load(CONFIG_FILE);
+ }
+ catch (IOException ex)
+ {
+ Bukkit.getLogger().log(Level.INFO, "[Metrics] {0}", ex.getMessage());
+ return true;
+ }
+ catch (InvalidConfigurationException ex)
+ {
+ Bukkit.getLogger().log(Level.INFO, "[Metrics] {0}", ex.getMessage());
+ return true;
+ }
+ return configuration.getBoolean("opt-out", false);
+ }
+ }
+
+ /**
+ * Enables metrics for the server by setting "opt-out" to false in the config file and starting the metrics task.
+ *
+ * @throws IOException
+ */
+ public void enable() throws IOException
+ {
+ // This has to be synchronized or it can collide with the check in the task.
+ synchronized (optOutLock)
+ {
+ // Check if the server owner has already set opt-out, if not, set it.
+ if (isOptOut())
+ {
+ configuration.set("opt-out", false);
+ configuration.save(configurationFile);
+ }
+
+ // Enable Task, if it is not running
+ if (taskId < 0)
+ {
+ start();
+ }
+ }
+ }
+
+ /**
+ * Disables metrics for the server by setting "opt-out" to true in the config file and canceling the metrics task.
+ *
+ * @throws IOException
+ */
+ public void disable() throws IOException
+ {
+ // This has to be synchronized or it can collide with the check in the task.
+ synchronized (optOutLock)
+ {
+ // Check if the server owner has already set opt-out, if not, set it.
+ if (!isOptOut())
+ {
+ configuration.set("opt-out", true);
+ final File file = new File(CONFIG_FILE);
+ configuration.save(file);
+ }
+
+ // Disable Task, if it is running
+ if (taskId >= 0)
+ {
+ this.plugin.getServer().getScheduler().cancelTask(taskId);
+ taskId = -1;
+ }
+ }
+ }
+
+ /**
+ * Generic method that posts a plugin to the metrics website
+ */
+ private void postPlugin(final boolean isPing) throws IOException
+ {
+ // The plugin's description file containg all of the plugin data such as name, version, author, etc
+ final PluginDescriptionFile description = plugin.getDescription();
+
+ // Construct the post data
+ final StringBuilder data = new StringBuilder();
+ data.append(encode("guid")).append('=').append(encode(guid));
+ encodeDataPair(data, "version", description.getVersion());
+ encodeDataPair(data, "server", Bukkit.getVersion());
+ encodeDataPair(data, "players", Integer.toString(Bukkit.getServer().getOnlinePlayers().length));
+ encodeDataPair(data, "revision", String.valueOf(REVISION));
+
+ // If we're pinging, append it
+ if (isPing)
+ {
+ encodeDataPair(data, "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)
+ {
+ final Iterator<Graph> iter = graphs.iterator();
+
+ while (iter.hasNext())
+ {
+ final 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
+ final 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()
+ final String value = Integer.toString(plotter.getValue());
+
+ // Add it to the http post data :)
+ encodeDataPair(data, key, value);
+ }
+ }
+ }
+
+ // Create the url
+ final 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
+ final OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
+ writer.write(data.toString());
+ writer.flush();
+
+ // Now read the response
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ final String response = reader.readLine();
+
+ // close resources
+ writer.close();
+ reader.close();
+
+ if (response == null || 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)
+ {
+ final Iterator<Graph> iter = graphs.iterator();
+
+ while (iter.hasNext())
+ {
+ final 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>
+ * StringBuffer data = new StringBuffer();
+ * data.append(encode("guid")).append('=').append(encode(guid));
+ * encodeDataPair(data, "version", description.getVersion());
+ * </code>
+ *
+ * @param buffer
+ * @param key
+ * @param value
+ * @return
+ */
+ private static void encodeDataPair(final StringBuilder buffer, final String key, final String value) throws UnsupportedEncodingException
+ {
+ buffer.append('&').append(encode(key)).append('=').append(encode(value));
+ }
+
+ /**
+ * Encode text as UTF-8
+ *
+ * @param text
+ * @return
+ */
+ private static String encode(final 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(final 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(final Plotter plotter)
+ {
+ plotters.add(plotter);
+ }
+
+ /**
+ * Remove a plotter from the graph
+ *
+ * @param plotter
+ */
+ public void removePlotter(final 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(final Object object)
+ {
+ if (!(object instanceof Graph))
+ {
+ return false;
+ }
+
+ final 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(final 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(final Object object)
+ {
+ if (!(object instanceof Plotter))
+ {
+ return false;
+ }
+
+ final Plotter plotter = (Plotter)object;
+ return plotter.name.equals(name) && plotter.getValue() == getValue();
+ }
+ }
+} \ No newline at end of file
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..6380b7f6c
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java
@@ -0,0 +1,203 @@
+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,
+ EssentialsAntiCheat,
+ 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");
+ final Method method = ess.getPaymentMethod().getMethod();
+ if (method != null)
+ {
+ String version = method.getVersion();
+ final int dashPosition = version.indexOf('-');
+ if (dashPosition > 0)
+ {
+ version = version.substring(0, dashPosition);
+ }
+ depGraph.addPlotter(new SimplePlotter(method.getName() + " " + version));
+ }
+ 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/SignBalance.java b/Essentials/src/com/earth2me/essentials/signs/SignBalance.java
index 0b7328ba5..4949cb645 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignBalance.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignBalance.java
@@ -3,6 +3,7 @@ package com.earth2me.essentials.signs;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
+import com.earth2me.essentials.Util;
public class SignBalance extends EssentialsSign
@@ -15,7 +16,7 @@ public class SignBalance extends EssentialsSign
@Override
protected boolean onSignInteract(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException
{
- player.sendMessage(_("balance", player.getMoney()));
+ player.sendMessage(_("balance", Util.displayCurrency(player.getMoney(), ess)));
return true;
}
}
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java
index e57919ab1..8acca9804 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java
@@ -2,6 +2,7 @@ package com.earth2me.essentials.signs;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
+import com.earth2me.essentials.Util;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Material;
@@ -83,13 +84,12 @@ public class SignBlockListener implements Listener
return;
}
User user = ess.getUser(event.getPlayer());
- if (user.isAuthorized("essentials.signs.color"))
+
+ for (int i = 0; i < 4; i++)
{
- for (int i = 0; i < 4; i++)
- {
- event.setLine(i, event.getLine(i).replaceAll("&([0-9a-f])", "§$1"));
- }
+ event.setLine(i, Util.formatString(user, "essentials.signs", event.getLine(i)));
}
+
for (Signs signs : Signs.values())
{
final EssentialsSign sign = signs.getSign();
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..24ce481ff 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,10 +34,12 @@ 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);
- i.addItem(item);
- player.openInventory(i);
+ item.setAmount(item.getType().getMaxStackSize());
+ Inventory invent = ess.getServer().createInventory(player, 36);
+ for (int i = 0; i < 36; i++) {
+ invent.addItem(item);
+ }
+ player.openInventory(invent);
Trade.log("Sign", "Free", "Interact", username, null, username, new Trade(item, ess), sign.getBlock().getLocation(), ess);
return true;
}
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignKit.java b/Essentials/src/com/earth2me/essentials/signs/SignKit.java
index 32a169592..c1a4cd0fd 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,10 @@ 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);
+ Kit.checkTime(player, kitName, kit);
+ 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/SignProtection.java b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java
index 088e74f01..2f2d25c46 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java
@@ -147,7 +147,7 @@ public class SignProtection extends EssentialsSign
{
return SignProtectionState.OWNER;
}
- if (Util.stripColor(sign.getLine(3)).equalsIgnoreCase(username))
+ if (Util.stripFormat(sign.getLine(3)).equalsIgnoreCase(username))
{
return SignProtectionState.OWNER;
}
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/signs/Signs.java b/Essentials/src/com/earth2me/essentials/signs/Signs.java
index e29d45ad4..2cf05ee77 100644
--- a/Essentials/src/com/earth2me/essentials/signs/Signs.java
+++ b/Essentials/src/com/earth2me/essentials/signs/Signs.java
@@ -19,6 +19,7 @@ public enum Signs
TRADE(new SignTrade()),
WARP(new SignWarp()),
WEATHER(new SignWeather());
+
private final EssentialsSign sign;
private Signs(final EssentialsSign sign)
diff --git a/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java b/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java
index d48b4a060..83452884b 100644
--- a/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java
+++ b/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java
@@ -14,7 +14,7 @@ public abstract class AbstractDelayedYamlFileReader<T extends StorageObject> imp
{
private final transient File file;
private final transient Class<T> clazz;
- private final transient Plugin plugin;
+ protected final transient IEssentials plugin;
public AbstractDelayedYamlFileReader(final IEssentials ess, final File file, final Class<T> clazz)
{
@@ -54,7 +54,10 @@ public abstract class AbstractDelayedYamlFileReader<T extends StorageObject> imp
catch (FileNotFoundException ex)
{
onException();
- Bukkit.getLogger().log(Level.INFO, "File not found: " + file.toString());
+ if (plugin.getSettings() == null || plugin.getSettings().isDebug())
+ {
+ Bukkit.getLogger().log(Level.INFO, "File not found: " + file.toString());
+ }
}
catch (ObjectLoadException ex)
{
diff --git a/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileWriter.java b/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileWriter.java
index 697ef7730..e8b3992ae 100644
--- a/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileWriter.java
+++ b/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileWriter.java
@@ -5,7 +5,6 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.logging.Level;
-import java.util.logging.Logger;
import org.bukkit.Bukkit;
diff --git a/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java b/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java
index 31c61a63f..b651dd40b 100644
--- a/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java
+++ b/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java
@@ -79,7 +79,11 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
{
new StorageObjectDataReader();
}
-
+
+ public abstract void finishRead();
+
+ public abstract void finishWrite();
+
public abstract File getStorageFile();
@@ -101,6 +105,7 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
public void onFinish()
{
unlock();
+ finishWrite();
}
}
@@ -126,6 +131,7 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
data = object;
}
rwl.writeLock().unlock();
+ finishRead();
}
@Override
diff --git a/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java b/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java
index efe66d585..4efb6c43f 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/HelpInput.java
@@ -24,33 +24,47 @@ public class HelpInput implements IText
public HelpInput(final User user, final String match, final IEssentials ess) throws IOException
{
boolean reported = false;
+ final List<String> newLines = new ArrayList<String>();
String pluginName = "";
+ String pluginNameLow = "";
+ if (!match.equalsIgnoreCase(""))
+ {
+ lines.add(_("helpMatching", match));
+ }
+
for (Plugin p : ess.getServer().getPluginManager().getPlugins())
{
try
{
+ final List<String> pluginLines = new ArrayList<String>();
final PluginDescriptionFile desc = p.getDescription();
final Map<String, Map<String, Object>> cmds = desc.getCommands();
- pluginName = p.getDescription().getName().toLowerCase(Locale.ENGLISH);
+ pluginName = p.getDescription().getName();
+ pluginNameLow = pluginName.toLowerCase(Locale.ENGLISH);
+ if (pluginNameLow.equals(match))
+ {
+ lines.clear();
+ newLines.clear();
+ lines.add(_("helpFrom", p.getDescription().getName()));
+ }
+
for (Map.Entry<String, Map<String, Object>> k : cmds.entrySet())
{
try
{
- if ((!match.equalsIgnoreCase(""))
- && (!k.getKey().toLowerCase(Locale.ENGLISH).contains(match))
+ if (!match.equalsIgnoreCase("") && (!pluginNameLow.contains(match)) && (!k.getKey().toLowerCase(Locale.ENGLISH).contains(match))
&& (!(k.getValue().get(DESCRIPTION) instanceof String
- && ((String)k.getValue().get(DESCRIPTION)).toLowerCase(Locale.ENGLISH).contains(match)))
- && (!pluginName.contains(match)))
+ && ((String)k.getValue().get(DESCRIPTION)).toLowerCase(Locale.ENGLISH).contains(match))))
{
continue;
}
- if (pluginName.contains("essentials"))
+ if (pluginNameLow.contains("essentials"))
{
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));
+ pluginLines.add(_("helpLine", k.getKey(), k.getValue().get(DESCRIPTION)));
}
}
else
@@ -67,9 +81,9 @@ public class HelpInput implements IText
{
permissions = value.get(PERMISSIONS);
}
- if (user.isAuthorized("essentials.help." + pluginName))
+ if (user.isAuthorized("essentials.help." + pluginNameLow))
{
- lines.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION));
+ pluginLines.add(_("helpLine", k.getKey(), value.get(DESCRIPTION)));
}
else if (permissions instanceof List && !((List<Object>)permissions).isEmpty())
{
@@ -84,21 +98,21 @@ public class HelpInput implements IText
}
if (enabled)
{
- lines.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION));
+ pluginLines.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));
+ pluginLines.add(_("helpLine", k.getKey(), value.get(DESCRIPTION)));
}
}
else
{
if (!ess.getSettings().hidePermissionlessHelp())
{
- lines.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION));
+ pluginLines.add(_("helpLine", k.getKey(), value.get(DESCRIPTION)));
}
}
}
@@ -109,6 +123,18 @@ public class HelpInput implements IText
continue;
}
}
+ if (!pluginLines.isEmpty())
+ {
+ newLines.addAll(pluginLines);
+ if (pluginNameLow.equals(match))
+ {
+ break;
+ }
+ if (match.equalsIgnoreCase(""))
+ {
+ lines.add(_("helpPlugin", pluginName, pluginNameLow));
+ }
+ }
}
catch (NullPointerException ex)
{
@@ -118,12 +144,13 @@ public class HelpInput implements IText
{
if (!reported)
{
- logger.log(Level.WARNING, _("commandHelpFailedForPlugin", pluginName), ex);
+ logger.log(Level.WARNING, _("commandHelpFailedForPlugin", pluginNameLow), ex);
}
reported = true;
continue;
}
}
+ lines.addAll(newLines);
}
@Override
diff --git a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
index 4c4e3364b..d79483699 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
@@ -37,6 +37,7 @@ public class KeywordReplacer implements IText
if (sender instanceof Player)
{
final User user = ess.getUser(sender);
+ user.setDisplayNick();
displayName = user.getDisplayName();
userName = user.getName();
ipAddress = user.getAddress().getAddress().toString();
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/com/earth2me/essentials/textreader/TextPager.java b/Essentials/src/com/earth2me/essentials/textreader/TextPager.java
index c23df734d..cb70839dd 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/TextPager.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/TextPager.java
@@ -1,5 +1,6 @@
package com.earth2me.essentials.textreader;
+import com.earth2me.essentials.I18n;
import static com.earth2me.essentials.I18n._;
import java.util.List;
import java.util.Locale;
@@ -49,7 +50,23 @@ public class TextPager
final int pages = lines.size() / 9 + (lines.size() % 9 > 0 ? 1 : 0);
if (!onePage)
{
- sender.sendMessage(_("infoPages", page, pages));
+ StringBuilder content = new StringBuilder();
+ final String[] title = commandName.split(" ", 2);
+ if (title.length > 1)
+ {
+ content.append(I18n.capitalCase(title[0])).append(": ");
+ content.append(title[1]);
+ }
+ else if (chapterPageStr != null)
+ {
+ content.append(I18n.capitalCase(commandName)).append(": ");
+ content.append(chapterPageStr);
+ }
+ else
+ {
+ content.append(I18n.capitalCase(commandName));
+ }
+ sender.sendMessage(_("infoPages", page, pages, content));
}
for (int i = start; i < lines.size() && i < start + (onePage ? 20 : 9); i++)
{
@@ -116,7 +133,7 @@ public class TextPager
if (!onePage)
{
- sender.sendMessage(_("infoPages", page, pages));
+ sender.sendMessage(_("infoPages", page, pages, I18n.capitalCase(commandName)));
}
for (int i = start; i < end && i < start + (onePage ? 20 : 9); i++)
{
diff --git a/Essentials/src/com/earth2me/essentials/user/User.java b/Essentials/src/com/earth2me/essentials/user/User.java
index 0e77dd6a9..589e26737 100644
--- a/Essentials/src/com/earth2me/essentials/user/User.java
+++ b/Essentials/src/com/earth2me/essentials/user/User.java
@@ -36,6 +36,16 @@ public class User extends UserBase implements IUser
user.acquireWriteLock();
user.getData().setMoney(10 + money);
}
+
+ @Override
+ public void finishRead()
+ {
+ }
+
+ @Override
+ public void finishWrite()
+ {
+ }
@Override
public long getLastTeleportTimestamp()
diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml
index 81d911c82..ec1f3fc8d 100644
--- a/Essentials/src/config.yml
+++ b/Essentials/src/config.yml
@@ -33,6 +33,10 @@ nickname-prefix: '~'
# Disable this if you have any other plugin, that modifies the displayname of a user.
change-displayname: true
+# When this option is enabled, the (tab) player list will be updated with the displayname.
+# The value of change-displayname (above) has to be true.
+#change-playerlist: true
+
# Adds the prefix and suffix to the displayname of the player, so it will be displayed in messages and lists.
# The prefix/suffix can be set using Permissions, Group Manager or PermissionsEx.
# The value of change-displayname (above) has to be true.
@@ -46,6 +50,10 @@ teleport-cooldown: 0
# The delay, in seconds, before a user actually teleports. If the user moves or gets attacked in this timeframe, the teleport never occurs.
teleport-delay: 0
+# The delay, in seconds, a player can't be attacked by other players after he has been teleported by a command
+# This will also prevent that the player can attack other players
+teleport-invulnerability: 0
+
# The delay, in seconds, required between /heal attempts
heal-cooldown: 60
@@ -83,7 +91,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
@@ -97,9 +105,14 @@ player-commands:
- back
- back.ondeath
- balance
+ - balance.others
+ - balancetop
+ - chat.shout
+ - chat.question
- clearinventory
- compass
- depth
+ - delhome
- getpos
- geoip.show
- help
@@ -108,20 +121,26 @@ player-commands:
- home.others
- ignore
- info
+ - itemdb
- kit
+ - kit.tools
- list
- mail
- mail.send
- me
- motd
- msg
+ - msg.color
- nick
+ - near
- pay
- ping
- powertool
+ - powertooltoggle
- protect
- r
- rules
+ - realname
- seen
- sell
- sethome
@@ -144,6 +163,7 @@ player-commands:
- signs.use.weather
- spawn
- suicide
+ - time
- tpa
- tpaccept
- tpahere
@@ -156,21 +176,31 @@ player-commands:
# Note: All items MUST be followed by a quantity!
# All kit names should be lower case, and will be treated as lower in permissions/costs.
+# Syntax: - itemID[:DataValue] Amount [Enchantment:Level]..
# Times are measured in seconds.
kits:
- tools:
+ dtools:
delay: 10
items:
- - 277 1
+ - 277 1 efficiency:1
- 278 1
- - 279 1
+ - 279:780 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.
# To enable signs, remove # symbol. To disable all signs, comment/remove each sign.
+# Essentials Colored sign support will be enabled when any sign types are enabled.
# We recommend not enabling chest protection signs if you don't intend to use them, (or are using LWC/Lockette).
enabledSigns:
+ #- color
#- balance
#- buy
#- sell
@@ -191,8 +221,9 @@ enabledSigns:
# Backup runs a command while saving is disabled
backup:
# Interval in minutes
- interval: 60
- # Add a command that backups your data, e.g.
+ interval: 30
+ # Unless you add a valid backup command or script here, this feature will be useless.
+ # Use 'save-all' to simply force regular world saving without backup.
#command: 'rdiff-backup World1 backups/World1'
# Set this true to enable permission per warp.
@@ -243,7 +274,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 +350,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
@@ -380,6 +411,8 @@ protect:
# Database settings for sign/rail protection
# mysql or sqlite
+ # We strongly recommend against using mysql here, unless you have a good reason.
+ # Sqlite seems to be faster in almost all cases, and in some cases mysql can be much slower.
datatype: 'sqlite'
# If you specified MySQL above, you MUST enter the appropriate details here.
@@ -436,30 +469,31 @@ protect:
entitytarget: false
# Prevent the spawning of creatures
spawn:
- chicken: false
- cow: false
creeper: false
- ghast: false
- giant: false
- monster: false
- pig: false
- pig_zombie: false
- sheep: false
skeleton: false
- slime: false
spider: false
- squid: false
+ giant: false
zombie: false
- wolf: false
- cave_spider: false
+ slime: false
+ ghast: false
+ pig_zombie: false
enderman: false
+ cave_spider: false
silverfish: false
- ender_dragon: false
- villager: false
blaze: false
- mushroom_cow: false
magma_cube: false
+ ender_dragon: false
+ pig: false
+ sheep: false
+ cow: false
+ chicken: false
+ squid: false
+ wolf: false
+ mushroom_cow: false
snowman: false
+ ocelot: false
+ iron_golem: false
+ villager: false
# Maximum height the creeper should explode. -1 allows them to explode everywhere.
# Set prevent.creeper-explosion to true, if you want to disable creeper explosions.
@@ -547,6 +581,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..2e1a331de 100644
--- a/Essentials/src/items.csv
+++ b/Essentials/src/items.csv
@@ -17,6 +17,76 @@ wplank,5,0
plankwooden,5,0
plankwood,5,0
plankw,5,0
+darkplank,5,1
+darkwoodenplank,5,1
+darkwoodplank,5,1
+darkwplank,5,1
+darkplankwooden,5,1
+darkplankwood,5,1
+darkplankw,5,1
+dplank,5,1
+dwoodenplank,5,1
+dwoodplank,5,1
+dwplank,5,1
+dplankwooden,5,1
+dplankwood,5,1
+dplankw,5,1
+pineplank,5,1
+pinewoodenplank,5,1
+pinewoodplank,5,1
+pinewplank,5,1
+pineplankwooden,5,1
+pineplankwood,5,1
+pineplankw,5,1
+pplank,5,1
+pwoodenplank,5,1
+pwoodplank,5,1
+pwplank,5,1
+pplankwooden,5,1
+pplankwood,5,1
+pplankw,5,1
+lightplank,5,2
+lightwoodenplank,5,2
+lightwoodplank,5,2
+lightwplank,5,2
+lightplankwooden,5,2
+lightplankwood,5,2
+lightplankw,5,2
+liteplank,5,2
+litewoodenplank,5,2
+litewoodplank,5,2
+litewplank,5,2
+liteplankwooden,5,2
+liteplankwood,5,2
+liteplankw,5,2
+birchplank,5,2
+birchwoodenplank,5,2
+birchwoodplank,5,2
+birchwplank,5,2
+birchplankwooden,5,2
+birchplankwood,5,2
+birchplankw,5,2
+bplank,5,2
+bwoodenplank,5,2
+bwoodplank,5,2
+bwplank,5,2
+bplankwooden,5,2
+bplankwood,5,2
+bplankw,5,2
+jungleplank,5,3
+junglewoodenplank,5,3
+junglewoodplank,5,3
+junglewplank,5,3
+jungleplankwooden,5,3
+jungleplankwood,5,3
+jungleplankw,5,3
+jplank,5,3
+jwoodenplank,5,3
+jwoodplank,5,3
+jwplank,5,3
+jplankwooden,5,3
+jplankwood,5,3
+jplankw,5,3
sapling,6,0
treesapling,6,0
logsapling,6,0
@@ -232,6 +302,10 @@ wtreesap,6,2
wlogsap,6,2
wtrunksap,6,2
wwoodsap,6,2
+junglesapling,6,3
+jsapling,6,3
+junglesap,6,3
+jsap,6,3
bedrock,7,0
oprock,7,0
opblock,7,0
@@ -360,6 +434,12 @@ wtree,17,2
wlog,17,2
wtrunk,17,2
wwood,17,2
+junglewood,17,3
+jwood,17,3
+junglelog,17,3
+jlog,17,3
+monkeytree,17,3
+monkeylog,17,3
leaves,18,4
leaf,18,4
treeleaves,18,4
@@ -454,6 +534,12 @@ bitreeleaf,18,6
bilogleaf,18,6
bitrunkleaf,18,6
biwoodleaf,18,6
+jungleleaves,18,7
+jleaves,18,7
+jleaf,18,7
+jungleleaf,18,7
+monkeyleaf,18,7
+monkeyleaves,18,7
sponge,19,0
glass,20,0
lapislazuliore,21,0
@@ -476,6 +562,25 @@ dispenser,23,0
dispense,23,0
sandstone,24,0
sastone,24,0
+csandstone,24,1
+csastone,24,1
+creepersandstone,24,1
+creepersastone,24,1
+hieroglyphicsandstone,24,1
+hieroglyphicsastone,24,1
+hieroglyphsandstone,24,1
+hieroglyphsastone,24,1
+hsandstone,24,1
+hsastone,24,1
+pyramidsandstone,24,1
+pyramidsastone,24,1
+psandstone,24,1
+psastone,24,1
+smoothsandstone,24,2
+smoothsastone,24,2
+ssandstone,24,2
+smsastone,24,2
+ssastone,24,2
noteblock,25,0
musicblock,25,0
nblock,25,0
@@ -704,6 +809,7 @@ blawool,35,15
blacotton,35,15
pistonmovingpiece,36,0
pistonmp,36,0
+pistontop,36,0
yellowflower,37,0
yflower,37,0
flower,37,0
@@ -874,6 +980,9 @@ sbdstep,43,5
stonebrickdoubleslab,43,5
stonebdslab,43,5
sbdslab,43,5
+adminslab,43,6
+magicslab,43,6
+adslab,43,6
smoothstonestep,44,0
stonestep,44,0
sstep,44,0
@@ -1295,6 +1404,10 @@ crackedstonebrick,98,2
crackedstonebricks,98,2
crackedstonebrickblock,98,2
crackedstonebb,98,2
+circlestonebrick,98,3
+circlestonebb,98,3
+circlestone,98,3
+circlesbb,98,3
hugeredmushroom,99,0
bigredmushroom,99,0
brmushroom,99,0
@@ -1461,6 +1574,15 @@ dragonegg,122,0
degg,122,0
bossegg,122,0
begg,122,0
+redstonelamp,123,0
+redstonelampoff,123,0
+redlamp,123,0
+redlampoff,123,0
+rslamp,123,0
+rslampoff,123,0
+redstonelampon,124,0
+redlampon,124,0
+rslampon,124,0
ironshovel,256,0
ironspade,256,0
ishovel,256,0
@@ -2319,6 +2441,10 @@ chickenraw,365,0
cookedchicken,366,0
grilledchicken,366,0
toastedchicken,366,0
+gchicken,366,0
+bbqchicken,366,0
+friedchicken,366,0
+cchicken,366,0
rottenflesh,367,0
zombieflesh,367,0
rottenmeat,367,0
@@ -2452,7 +2578,17 @@ 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
+firecharge,385,0
+fireball,385,0
+grenade,385,0
goldmusicrecord,2256,0
goldmusicdisk,2256,0
goldmusiccd,2256,0
diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties
index f7958319d..7707ac09a 100644
--- a/Essentials/src/messages.properties
+++ b/Essentials/src/messages.properties
@@ -11,9 +11,10 @@ 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.
+backupDisabled=An external backup script has not been configured.
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 +50,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 +66,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}
@@ -91,6 +93,7 @@ false=false
feed=\u00a77Your appetite was sated.
feedOther=\u00a77Satisfied {0}.
fileRenameError=Renaming file {0} failed
+flyMode=\u00a77Set fly mode {0} for {1}.
foreverAlone=\u00a7cYou have nobody to whom you can reply.
freedMemory=Freed {0} MB.
gameMode=\u00a77Set game mode {0} for {1}.
@@ -99,9 +102,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 +112,16 @@ haveBeenReleased=\u00a77You have been released
heal=\u00a77You have been healed.
healOther=\u00a77Healed {0}.
helpConsole=To view help from the console, type ?.
+helpFrom=\u00a77Commands from {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Commands matching "{0}":
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
+helpPlugin=\u00a74{0}\u00a7f: Plugin Help: /help {1}
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.
@@ -122,30 +129,31 @@ illegalDate=Illegal date format.
infoChapter=Select chapter:
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:
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Page \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
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.
-invalidMob=Invalid mob type.
+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 +170,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}.
-lightningSmited=\u00a77You have just been smited
+kits=\u00a77Kits: {0}
+lightningSmited=\u00a77Thou hast been smitten
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 +194,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 +205,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 +220,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 +230,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 +237,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 +288,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 +303,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 +321,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 +332,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 +376,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..e06985430 100644
--- a/Essentials/src/messages_da.properties
+++ b/Essentials/src/messages_da.properties
@@ -11,9 +11,10 @@ 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.
+backupDisabled=An external backup script has not been configured.
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 +50,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 +66,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}
@@ -91,6 +93,7 @@ false=false
feed=\u00a77Your appetite was sated.
feedOther=\u00a77Satisfied {0}.
fileRenameError=Omd\u00c3\u00b8bning af fil {0} fejlede.
+flyMode=\u00a77Set fly mode {0} for {1}.
foreverAlone=\u00a7cDu har ingen til hvem du kan svare.
freedMemory=Frigjorde {0} MB.
gameMode=\u00a77Satte game mode {0} for {1}.
@@ -99,9 +102,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 +112,16 @@ haveBeenReleased=\u00a77Du er blevet l\u00f8sladt
heal=\u00a77Du er blevet healed.
healOther=\u00a77Healed {0}.
helpConsole=For at se hj\u00e6lp fra konsolen, skriv ?.
+helpFrom=\u00a77Commands from {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Commands matching "{0}":
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f:
+helpPlugin=\u00a74{0}\u00a7f: Plugin Help: /help {1}
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.
@@ -122,30 +129,31 @@ illegalDate=Forkert datoformat.
infoChapter=V\u00e6lg kapitel:
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:
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Side \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
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 +170,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 +194,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 +205,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 +220,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 +230,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 +237,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 +288,6 @@ powerToolRemoveAll=Alle kommandoer fjernet fra {0}.
powerToolsDisabled= Alle dine power tools er blevet deaktiveret.
powerToolsEnabled= Alle dine power tools er blevet aktiveret.
protectionOwner=\u00a76[EssentialsProtect] Protection owner: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f Tiden er {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f Tiden er fastsat til {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f Tiden er normal og matcher serveren.
-pTimeOthersPermission=\u00a7cDu har ikke tilladelse til at \u00c3\u00a6ndre andre spilleres tid.
-pTimePlayers=Disse spillere har deres egen tid:
-pTimeReset=Spiler-tid er blevet nulstillet for: \u00a7e{0} (oversat korrekt?)
-pTimeSet=Spiller-tid er blevet sat til \u00a73{0}\u00a7f for: \u00a7e{1} (oversat korrekt?)
-pTimeSetFixed=Spiller-tid er fastsat til \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Sp\u00f8rgsm\u00e5l]\u00a7f {0}
readNextPage=Skriv /{0} {1} for at l\u00c3\u00a6se n\u00c3\u00a6ste side.
reloadAllPlugins=\u00a77Reload alle plugins.
@@ -294,7 +303,7 @@ requestDenied=\u00a77Anmodning om teleport afvist.
requestDeniedFrom=\u00a77{0} afviste din anmodning om teleport.
requestSent=\u00a77Anmodning sendt til {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=sekund
seconds=sekunder
@@ -312,8 +321,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 +332,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 +376,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..4e4f7e78d 100644
--- a/Essentials/src/messages_de.properties
+++ b/Essentials/src/messages_de.properties
@@ -12,6 +12,7 @@ alertUsed=benutzt:
autoAfkKickReason=Du wurdest gekickt, weil du f\u00fcr {0} Minuten inaktiv warst.
backAfterDeath=\u00a77Benutze den Befehl /back um zu deinem Todespunkt zur\u00fcck zu kehren.
backUsageMsg=\u00a77Kehre zur letzten Position zur\u00fcck.
+backupDisabled=An external backup script has not been configured.
backupFinished=Backup beendet
backupStarted=Backup gestartet
balance=\u00a77Geldb\u00f6rse: {0}
@@ -49,6 +50,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!
@@ -91,6 +93,7 @@ false=false
feed=\u00a77Your appetite was sated.
feedOther=\u00a77Satisfied {0}.
fileRenameError=Umbenennen von {0} gescheitert.
+flyMode=\u00a77Set fly mode {0} for {1}.
foreverAlone=\u00a7cDu hast niemanden, dem du antworten kannst.
freedMemory={0} MB frei gemacht.
gameMode=\u00a77Set game mode {0} for {1}.
@@ -109,8 +112,12 @@ haveBeenReleased=\u00a77Du wurdest frei gelassen.
heal=\u00a77Du wurdest geheilt.
healOther=\u00a77{0} geheilt.
helpConsole=Um die Hilfe der Konsole zu sehen, schreibe ?.
+helpFrom=\u00a77Commands from {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Commands matching "{0}":
helpOp=\u00a7c[Hilfe]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f:
+helpPlugin=\u00a74{0}\u00a7f: Plugin Help: /help {1}
holeInFloor=Loch im Boden
homeSet=\u00a77Zuhause gesetzt.
homeSetToBed=\u00a77Dein Zuhause ist nun an diesem Bett.
@@ -122,13 +129,14 @@ illegalDate=Ung\u00fcltiges Datumsformat.
infoChapter=W\u00e4hle Kapitel:
infoChapterPages=Kapitel {0}, Seite \u00a7c{1}\u00a7f von \u00a7c{2}\u00a7f:
infoFileDoesNotExist=Datei info.txt existiert nicht. Erzeuge eine neue Datei.
-infoPages=Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f:
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Seite \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
infoUnknownChapter=Unbekanntes Kapitel:
invBigger=Das andere Inventar ist gr\u00f6sser als deins.
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 +177,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 +210,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 +220,7 @@ nickOthersPermission=\u00a7cDu hast keine Rechte um den Nicknamen von anderen zu
nickSet=\u00a77Dein Nickname ist nun \u00a7c{0}
noAccessCommand=\u00a7cDu hast keinen Zugriff auf diesen Befehl.
noAccessPermission=\u00a7cDu hast keine Rechte, den Block {0} zu \u00f6ffnen.
+noBreakBedrock=You are not allowed to destroy bedrock.
noDestroyPermission=\u00a7cDu hast keine Rechte, den Block {0} zu zerst\u00f6ren.
noGodWorldWarning=\u00a7cWarning! God mode in this world disabled.
noHelpFound=\u00a7cKeine \u00fcbereinstimmenden Kommandos.
@@ -294,7 +303,7 @@ requestDenied=\u00a77Teleportierungsanfrage verweigert.
requestDeniedFrom=\u00a77{0} hat deine Teleportierungsanfrage abgelehnt.
requestSent=\u00a77Anfrage gesendet an {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=Sekunde
seconds=Sekunden
@@ -314,6 +323,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 +390,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}.
@@ -389,12 +401,14 @@ weatherStormFor=\u00a77In {0} st\u00fcrmt es nun f\u00fcr {1} Sekunden.
weatherSun=\u00a77In {0} scheint nun die Sonne.
weatherSunFor=\u00a77In {0} scheint nun f\u00fcr {1} Sekunden die Sonne.
whoisBanned=\u00a79 - Banned: {0}
+whoisExp=\u00a79 - Exp: {0} (Level {1})
whoisGamemode=\u00a79 - Gamemode: {0}
whoisGeoLocation=\u00a79 - Herkunft: {0}
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}
diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties
index dfc7600dc..34367f115 100644
--- a/Essentials/src/messages_en.properties
+++ b/Essentials/src/messages_en.properties
@@ -11,9 +11,10 @@ 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.
+backupDisabled=An external backup script has not been configured.
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 +50,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 +66,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}
@@ -91,6 +93,7 @@ false=false
feed=\u00a77Your appetite was sated.
feedOther=\u00a77Satisfied {0}.
fileRenameError=Renaming file {0} failed
+flyMode=\u00a77Set fly mode {0} for {1}.
foreverAlone=\u00a7cYou have nobody to whom you can reply.
freedMemory=Freed {0} MB.
gameMode=\u00a77Set game mode {0} for {1}.
@@ -99,9 +102,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 +112,16 @@ haveBeenReleased=\u00a77You have been released
heal=\u00a77You have been healed.
healOther=\u00a77Healed {0}.
helpConsole=To view help from the console, type ?.
+helpFrom=\u00a77Commands from {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Commands matching "{0}":
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
+helpPlugin=\u00a74{0}\u00a7f: Plugin Help: /help {1}
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.
@@ -122,30 +129,31 @@ illegalDate=Illegal date format.
infoChapter=Select chapter:
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:
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Page \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
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 +170,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}.
-lightningSmited=\u00a77You have just been smited
+kits=\u00a77Kits: {0}
+lightningSmited=\u00a77Thou hast been smitten
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 +194,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 +205,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 +220,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 +230,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 +237,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 +288,6 @@ powerToolRemoveAll=All commands removed from {0}.
powerToolsDisabled=All of your power tools have been enabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Protection owner: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
-pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
-pTimePlayers=These players have their own time:
-pTimeReset=Player time has been reset for: \u00a7e{0}
-pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
-pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Question]\u00a7f {0}
readNextPage=Type /{0} {1} to read the next page
reloadAllPlugins=\u00a77Reloaded all plugins.
@@ -294,7 +303,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 +321,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 +332,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 +376,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..ad1aefe6c 100644
--- a/Essentials/src/messages_es.properties
+++ b/Essentials/src/messages_es.properties
@@ -11,9 +11,10 @@ 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.
+backupDisabled=An external backup script has not been configured.
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 +50,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 +66,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}
@@ -91,6 +93,7 @@ false=false
feed=\u00a77Your appetite was sated.
feedOther=\u00a77Satisfied {0}.
fileRenameError=Error al renombrar el archivo {0}
+flyMode=\u00a77Set fly mode {0} for {1}.
foreverAlone=\u00a7cNo tienes nadie a quien puedas responder.
freedMemory= {0} MB libres.
gameMode=\u00a77Set game mode {0} for {1}.
@@ -99,9 +102,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 +112,16 @@ haveBeenReleased=\u00a77Has sido liberado
heal=\u00a77Has sido curado.
healOther=\u00a77Has curado a {0}.
helpConsole=Para obtener ayuda de la consola, escribe ?.
+helpFrom=\u00a77Commands from {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Commands matching "{0}":
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Pagina \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f:
+helpPlugin=\u00a74{0}\u00a7f: Plugin Help: /help {1}
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}.
@@ -122,30 +129,31 @@ illegalDate=Forma de fecha ilegal.
infoChapter=Selecciona una seccion:
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:
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Pagina \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
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 +170,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 +194,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 +205,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 +220,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 +230,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 +237,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 +288,6 @@ powerToolRemoveAll=Todos los comandos borrados desde {0}.
powerToolsDisabled=All of your power tools have been disabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Due&ntilde;o de la proteccion: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f la hora es {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f la hora ha sido cambiada a {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f el tiempo es normal y coincide con el servidor.
-pTimeOthersPermission=\u00a7cNo estas autorizado para especificar'' la hora de otros usuarios.
-pTimePlayers=Estos usuarios tienen su propia hora:
-pTimeReset=La hora del usuario ha sido reiniciada a las: \u00a7e{0}
-pTimeSet=La hora del jugador ha sido cambiada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
-pTimeSetFixed=La hora del jugador ha sido arreglada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Pregunta]\u00a7f {0}
readNextPage=Type /{0} {1} to read the next page
reloadAllPlugins=\u00a77Todos los plugins recargados.
@@ -294,7 +303,7 @@ requestDenied=\u00a77Peticion de teletransporte denegada.
requestDeniedFrom=\u00a77{0} ha denegado tu peticion de teletransporte.
requestSent=\u00a77Peticion enviada a {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=segundo
seconds=segundos
@@ -312,8 +321,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 +332,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 +376,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..0c4b94efc 100644
--- a/Essentials/src/messages_fr.properties
+++ b/Essentials/src/messages_fr.properties
@@ -11,9 +11,10 @@ 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.
+backupDisabled=An external backup script has not been configured.
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 +50,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 +66,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}.
@@ -91,6 +93,7 @@ false=non
feed=\u00a77Vous avez \u00e9t\u00e9 rassasi\u00e9.
feedOther=\u00a77 est rassasi\u00e9 {0}.
fileRenameError=Echec du changement de nom de {0}
+flyMode=\u00a77Set fly mode {0} for {1}.
foreverAlone=\u00a7cVous n''avez personne \u00e0 qui r\u00e9pondre
freedMemory=A lib\u00e9r\u00e9 {0} Mo.
gameMode=\u00a77Mode de jeu {0} pour {1}.
@@ -99,9 +102,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 +112,16 @@ 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 ?
+helpFrom=\u00a77Commands from {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Commands matching "{0}":
helpOp=\u00a7c[Aide Admin]\u00a7f \u00a77{0} : \u00a7f {1}
helpPages=Page \u00a7c{0}\u00a7f sur \u00a7c{1}\u00a7f.
+helpPlugin=\u00a74{0}\u00a7f: Plugin Help: /help {1}
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}.
@@ -122,30 +129,31 @@ illegalDate=Format de date ill\u00e9gal.
infoChapter=S\u00e9lectionnez le chapitre :
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.
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Page \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
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 +170,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 +194,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 +205,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 +220,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 +230,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 +237,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 +288,6 @@ powerToolRemoveAll=Toutes les commandes retir\u00e9es de {0}.
powerToolsDisabled=Toutes vos commandes assign\u00e9es ont \u00e9t\u00e9 retir\u00e9es.
powerToolsEnabled=Toutes vos commandes assign\u00e9es ont \u00e9t\u00e9 activ\u00e9es.
protectionOwner=\u00a76[EssentialsProtect] Propri\u00e9taire de la protection : {0}
-pTimeCurrent=Pour \u00a7e{0}\u00a7f l''heure est {1}.
-pTimeCurrentFixed=L''heure de \u00a7e{0}\u00a7f est fix\u00e9e \u00e0 {1}.
-pTimeNormal=\u00a7fPour \u00a7e{0}\u00a7f l'heure est normale et correspond au server.
-pTimeOthersPermission=\u00a7cVous n'etes pas autoris\u00e9 \u00e0 changer l'heure des autres joueurs.
-pTimePlayers=Ces joueurs ont leur propre horraire :
-pTimeReset=l''heure a \u00e9t\u00e9 r\u00e9initialis\u00e9e \u00e0 : \u00a7e{0}
-pTimeSet=l''heure du joueur a \u00e9t\u00e9 r\u00e9egl\u00e9ee \u00e0 \u00a73{0}\u00a7f pour : \u00a7e{1}
-pTimeSetFixed=l''heure du joueur a \u00e9t\u00e9 fix\u00e9e \u00e0 : \u00a7e{1}
questionFormat=\u00a77[Question]\u00a7f {0}
readNextPage=Utilisez /{0} {1} pour lire la page suivante.
reloadAllPlugins=\u00a77Toutes les extensions ont \u00e9t\u00e9 recharg\u00e9es.
@@ -294,7 +303,7 @@ requestDenied=\u00a77Demande de t\u00e9l\u00e9portation refus\u00e9e.
requestDeniedFrom=\u00a77{0} a refus\u00e9 votre demande de t\u00e9l\u00e9portation.
requestSent=\u00a77Requ\u00eate envoy\u00e9e \u00e0 {0}\u00a77.
requestTimedOut=\u00a7cLa de mande de t\u00e9l\u00e9portation a expir\u00e9.
-requiredBukkit=* ! * Vous avez besoin au moins de la version {0} de CraftBukkit. T\u00e9l\u00e9chargez-la ici http://ci.bukkit.org.
+requiredBukkit=* ! * Vous avez besoin au moins de la version {0} de CraftBukkit. T\u00e9l\u00e9chargez-la ici http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=seconde
seconds=secondes
@@ -312,8 +321,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 +332,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 +376,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..d0f56752b 100644
--- a/Essentials/src/messages_nl.properties
+++ b/Essentials/src/messages_nl.properties
@@ -11,9 +11,10 @@ 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.
+backupDisabled=An external backup script has not been configured.
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 +50,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 +66,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}
@@ -91,6 +93,7 @@ false=false
feed=\u00a77Your appetite was sated.
feedOther=\u00a77Satisfied {0}.
fileRenameError=Hernoemen van {0} mislukt
+flyMode=\u00a77Set fly mode {0} for {1}.
foreverAlone=\u00a7cJe hebt niemand waarnaar je kan reageren.
freedMemory={0} MB gelost.
gameMode=\u00a77Set game mode {0} for {1}.
@@ -99,9 +102,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 +112,16 @@ haveBeenReleased=\u00a77Je bent bevrijdt
heal=\u00a77Je bent genezen.
healOther=\u00a77Je geneezde {0}.
helpConsole=type ? om de consolehelp weer te geven.
+helpFrom=\u00a77Commands from {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Commands matching "{0}":
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f:
+helpPlugin=\u00a74{0}\u00a7f: Plugin Help: /help {1}
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.
@@ -122,30 +129,31 @@ illegalDate=Illegaal data formaat.
infoChapter=Selecteer hoofdstuk:
infoChapterPages=Hoofdstuk {0}, Pagina \u00a7c{1}\u00a7f van de \u00a7c{2}\u00a7f:
infoFileDoesNotExist=Bestand info.txt bestaat niet. Bezig met aanmaken.
-infoPages=Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f:
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Pagina \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
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 +170,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 +194,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 +205,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 +220,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 +230,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 +237,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 +288,6 @@ powerToolRemoveAll=All commands removed from {0}.
powerToolsDisabled=All of your power tools have been disabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Beschermingeigenaar: {0}
-pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
-pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
-pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
-pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
-pTimePlayers=These players have their own time:
-pTimeReset=Player time has been reset for: \u00a7e{0}
-pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
-pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
questionFormat=\u00a77[Vraag]\u00a7f {0}
readNextPage=Type /{0} {1} to read the next page
reloadAllPlugins=\u00a77Alle plugins zijn herladen.
@@ -294,7 +303,7 @@ requestDenied=\u00a77Teleporteer aanvraag geweigerd.
requestDeniedFrom=\u00a77{0} denied your teleport request.
requestSent=\u00a77Aanvraag verstuurd naar {0}\u00a77.
requestTimedOut=\u00a7cTeleport request has timed out
-requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org.
+requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://dl.bukkit.org/downloads/craftbukkit/
returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1}
second=seconde
seconds=seconde
@@ -312,8 +321,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 +332,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 +376,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..022143b3f 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>
@@ -49,7 +49,7 @@ commands:
aliases: [ebroadcast,bcast,ebcast]
bigtree:
description: Spawn a big tree where you are looking.
- usage: /<command> <tree|redwood>
+ usage: /<command> <tree|redwood|jungle>
aliases: [ebigtree]
burn:
description: Set a player on fire.
@@ -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>
@@ -98,6 +98,10 @@ commands:
description: Satisfy the hunger.
usage: /<command> [player]
aliases: [efeed,eat,eeat]
+ fly:
+ description: Take off, and soar!
+ usage: /<command> [player]
+ aliases: [efly]
itemdb:
description: Searches for an item.
usage: /<command> <item>
@@ -185,7 +189,10 @@ commands:
killall:
description: Kill all mobs in a world.
usage: /<command> [mobType] [radius]
- aliases: [ekillall,butcher,ebutcher]
+ aliases: [ekillall,butcher,ebutcher,mobkill,emobkill]
+ kittycannon:
+ description: Throw an exploding kitten at your opponent
+ usage: /<command>
list:
description: List all online players.
usage: /<command>
@@ -239,8 +246,8 @@ commands:
usage: /<command>
aliases: [pong,echo,echo,eping,epong]
powertool:
- description: Assigns a command to the item in hand, {player} will be replaced by the name of the player that you click.
- usage: /<command> [l:|a:|r:|c:|d:][command] [arguments]
+ description: Assigns a command to the item in hand.
+ usage: /<command> [l:|a:|r:|c:|d:][command] [arguments] - {player} can be replaced by name of a clicked player.
aliases: [pt,epowertool,ept]
powertooltoggle:
description: Enables or disables all current powertools
@@ -255,7 +262,7 @@ commands:
usage: /<command> <message>
aliases: [er,reply,ereply]
realname:
- description: Displays the username of a user based on nickname.
+ description: Displays the username of a user based on nick.
usage: /<command> <nickname>
aliases: [erealname]
remove:
@@ -292,7 +299,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.
@@ -301,11 +308,11 @@ commands:
spawner:
description: Change the mob type of a spawner
usage: /<command> <mob>
- aliases: [espawner]
+ aliases: [espawner,changems,echangems]
spawnmob:
description: Spawns a mob.
usage: /<command> <mob>[:data][,<mount>[:data]] [amount] [player]
- aliases: [espawnmob]
+ aliases: [espawnmob,mob,emob]
sudo:
description: Make another user perform a command.
usage: /<command> <player> <command [args]>
@@ -327,7 +334,7 @@ commands:
usage: /<command> [day|night|dawn|17:30|4pm|4000ticks] [worldname|all]
aliases: [etime, day, night]
togglejail:
- description: Prevents a player from interacting with the world and teleports him/her to the jail specified
+ description: Jails/Unjails a player and tp them to the jail specified.
usage: /<command> <player> <jailname> [datediff]
aliases: [tjail,jail,ejail,unjail,eunjail,etogglejail]
top:
@@ -368,7 +375,7 @@ commands:
aliases: [s,etphere]
tpo:
description: Teleport override for tptoggle.
- usage: /<command> <player>
+ usage: /<command> <player> [otherplayer]
aliases: [etpo]
tpohere:
description: Teleport here override for tptoggle.
@@ -384,7 +391,7 @@ commands:
aliases: [etptoggle]
tree:
description: Spawn a tree where you are looking.
- usage: /<command> <tree|birch|redwood>
+ usage: /<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp>
aliases: [etree]
unban:
description: Unbans the specified player.
diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java
index 58fdfc5fe..63d03a5f9 100644
--- a/Essentials/test/com/earth2me/essentials/FakeServer.java
+++ b/Essentials/test/com/earth2me/essentials/FakeServer.java
@@ -705,4 +705,22 @@ 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.");
+ }
+
+ @Override
+ public long getConnectionThrottle()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
index 5a8cde62d..599c39dda 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
@@ -37,16 +37,12 @@ public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer
/**
* This listener should apply the general chat formatting only...then return control back the event handler
*/
- if (user.isAuthorized("essentials.chat.color"))
- {
- event.setMessage(Util.replaceColor(event.getMessage()));
- }
- else
- {
- event.setMessage(Util.stripColor(event.getMessage()));
- }
+ event.setMessage(Util.formatMessage(user, "essentials.chat", event.getMessage()));
String group = user.getGroup();
String world = user.getWorld().getName();
- event.setFormat(ess.getSettings().getChatFormat(group).format(new Object[] {group, world, world.substring(0, 1).toUpperCase(Locale.ENGLISH)}));
+ event.setFormat(ess.getSettings().getChatFormat(group).format(new Object[]
+ {
+ group, world, world.substring(0, 1).toUpperCase(Locale.ENGLISH)
+ }));
}
}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
index 57302517f..1868e20c1 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
@@ -275,7 +274,7 @@ public class EssentialsProtectEntityListener implements Listener
{
return;
}
- final CreatureType creature = event.getCreatureType();
+ final EntityType creature = event.getEntityType();
if (creature == null)
{
return;
@@ -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);
diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java
index 088ee9052..9075d0b69 100644
--- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java
+++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java
@@ -25,6 +25,16 @@ public class SpawnStorage extends AsyncStorageObjectHolder<Spawns> implements IE
{
return new File(ess.getDataFolder(), "spawn.yml");
}
+
+ @Override
+ public void finishRead()
+ {
+ }
+
+ @Override
+ public void finishWrite()
+ {
+ }
public void setSpawn(final Location loc, final String group)
{
diff --git a/Essentials/src/examples/bpermissions.yml b/examples/bpermissions.yml
index 6b7900c4f..6b7900c4f 100644
--- a/Essentials/src/examples/bpermissions.yml
+++ b/examples/bpermissions.yml
diff --git a/Essentials/src/examples/permissionsbukkit.yml b/examples/permissionsbukkit.yml
index 515256ef1..515256ef1 100644
--- a/Essentials/src/examples/permissionsbukkit.yml
+++ b/examples/permissionsbukkit.yml
diff --git a/Essentials/src/examples/permissionsex.yml b/examples/permissionsex.yml
index 3dc6354fb..3dc6354fb 100644
--- a/Essentials/src/examples/permissionsex.yml
+++ b/examples/permissionsex.yml
diff --git a/lib/bukkit.jar b/lib/bukkit.jar
index 28e143709..912400ba3 100644
--- a/lib/bukkit.jar
+++ b/lib/bukkit.jar
Binary files differ
diff --git a/lib/craftbukkit.jar b/lib/craftbukkit.jar
index ce2ecfeb8..815d0a929 100644
--- a/lib/craftbukkit.jar
+++ b/lib/craftbukkit.jar
Binary files differ