diff --git a/BuildAll/nbproject/build-impl.xml b/BuildAll/nbproject/build-impl.xml
index 1f8bcbaae..58eac422c 100644
--- a/BuildAll/nbproject/build-impl.xml
+++ b/BuildAll/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -862,8 +1176,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -871,12 +1186,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -888,12 +1199,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -915,6 +1222,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -1001,14 +1344,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -1021,39 +1364,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1174,9 +1518,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/BuildAll/nbproject/genfiles.properties b/BuildAll/nbproject/genfiles.properties
index 8068c7fc0..95b41a19a 100644
--- a/BuildAll/nbproject/genfiles.properties
+++ b/BuildAll/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.44.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=51b33957
-nbproject/build-impl.xml.script.CRC32=c5170bed
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=2a17f1e9
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/Essentials/nbproject/build-impl.xml b/Essentials/nbproject/build-impl.xml
index f79ca7e26..8069faec8 100644
--- a/Essentials/nbproject/build-impl.xml
+++ b/Essentials/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -813,8 +1127,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -822,12 +1137,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -839,12 +1150,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -866,6 +1173,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -952,14 +1295,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -972,39 +1315,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1076,9 +1420,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/Essentials/nbproject/genfiles.properties b/Essentials/nbproject/genfiles.properties
index 8d631fddf..4897c5ad8 100644
--- a/Essentials/nbproject/genfiles.properties
+++ b/Essentials/nbproject/genfiles.properties
@@ -4,8 +4,8 @@ build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=a830bc14
-nbproject/build-impl.xml.script.CRC32=a9f8842a
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=7c507372
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15
nbproject/profiler-build-impl.xml.script.CRC32=abda56ed
nbproject/profiler-build-impl.xml.stylesheet.CRC32=f10cf54c@1.11.1
diff --git a/Essentials/src/com/earth2me/essentials/Enchantments.java b/Essentials/src/com/earth2me/essentials/Enchantments.java
index 060dfd2c1..c1fa33553 100644
--- a/Essentials/src/com/earth2me/essentials/Enchantments.java
+++ b/Essentials/src/com/earth2me/essentials/Enchantments.java
@@ -77,6 +77,8 @@ public class Enchantments
ENCHANTMENTS.put("flameprotection", Enchantment.PROTECTION_FIRE);
ENCHANTMENTS.put("fireprotect", Enchantment.PROTECTION_FIRE);
ENCHANTMENTS.put("flameprotect", Enchantment.PROTECTION_FIRE);
+ ENCHANTMENTS.put("fireprot", Enchantment.PROTECTION_FIRE);
+ ENCHANTMENTS.put("flameprot", Enchantment.PROTECTION_FIRE);
ENCHANTMENTS.put("projectileprotection", Enchantment.PROTECTION_PROJECTILE);
ENCHANTMENTS.put("projprot", Enchantment.PROTECTION_PROJECTILE);
diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java
index 8790e7022..92846124d 100644
--- a/Essentials/src/com/earth2me/essentials/Essentials.java
+++ b/Essentials/src/com/earth2me/essentials/Essentials.java
@@ -67,7 +67,7 @@ import org.yaml.snakeyaml.error.YAMLException;
public class Essentials extends JavaPlugin implements IEssentials
{
- public static final int BUKKIT_VERSION = 2149;
+ public static final int BUKKIT_VERSION = 2289;
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private transient ISettings settings;
private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this);
@@ -491,6 +491,12 @@ public class Essentials extends JavaPlugin implements IEssentials
{
return (User)base;
}
+
+ if (userMap == null) {
+ LOGGER.log(Level.WARNING, "Essentials userMap not initialized");
+ return null;
+ }
+
User user = userMap.getUser(base.getName());
if (user == null)
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java
index b2cb1fd12..0440febce 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java
@@ -5,6 +5,7 @@ import com.google.common.io.Files;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
+import java.nio.channels.ClosedByInterruptException;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
@@ -38,6 +39,7 @@ public class EssentialsConf extends YamlConfiguration
super();
this.configFile = configFile;
}
+ private final byte[] bytebuffer = new byte[1024];
public synchronized void load()
{
@@ -115,9 +117,12 @@ public class EssentialsConf extends YamlConfiguration
final FileInputStream inputStream = new FileInputStream(configFile);
try
{
- final FileChannel channel = inputStream.getChannel();
final ByteBuffer buffer = ByteBuffer.allocate((int)configFile.length());
- channel.read(buffer);
+ int length;
+ while ((length = inputStream.read(bytebuffer)) != -1)
+ {
+ buffer.put(bytebuffer, 0, length);
+ }
buffer.rewind();
final CharBuffer data = CharBuffer.allocate((int)configFile.length());
CharsetDecoder decoder = UTF8.newDecoder();
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
index 19cfde0f4..1a0820105 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
@@ -119,6 +119,17 @@ public class EssentialsEntityListener implements Listener
}
}
+ @EventHandler(priority = EventPriority.LOW)
+ public void onPlayerDeathExpEvent(final PlayerDeathEvent event)
+ {
+ final User user = ess.getUser(event.getEntity());
+ if (user.isAuthorized("essentials.keepxp"))
+ {
+ event.setKeepLevel(true);
+ event.setDroppedExp(0);
+ }
+ }
+
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onFoodLevelChange(final FoodLevelChangeEvent event)
{
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
index 369eb3808..2fe03ebce 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
@@ -50,7 +50,7 @@ public class EssentialsPlayerListener implements Listener
}
@EventHandler(priority = EventPriority.LOWEST)
- public void onPlayerChat(final PlayerChatEvent event)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.isMuted())
@@ -309,7 +309,7 @@ public class EssentialsPlayerListener implements Listener
});
}
}
- private final static List COMMANDS = Arrays.asList("msg", "r", "mail", "m", "t", "whisper", "emsg", "tell", "er", "reply", "ereply", "email");
+ private final static List COMMANDS = Arrays.asList("msg", "r", "mail", "m", "t", "whisper", "emsg", "tell", "er", "reply", "ereply", "email", "action", "describe", "eme", "eaction", "edescribe", "etell", "ewhisper", "pm");
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event)
diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
index c6230f5e0..e7241f0f8 100644
--- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
+++ b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
@@ -1051,4 +1051,22 @@ public class OfflinePlayer implements Player
{
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public int getExpToLevel()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean hasLineOfSight(Entity entity)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean isValid()
+ {
+ 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 ec317dbfd..30cfc9dab 100644
--- a/Essentials/src/com/earth2me/essentials/Settings.java
+++ b/Essentials/src/com/earth2me/essentials/Settings.java
@@ -77,11 +77,17 @@ public class Settings implements ISettings
{
return config.getInt("sethome-multiple." + set, config.getInt("sethome-multiple.default", 3));
}
+ private int chatRadius = 0;
+
+ private int _getChatRadius()
+ {
+ return config.getInt("chat.radius", config.getInt("chat-radius", 0));
+ }
@Override
public int getChatRadius()
{
- return config.getInt("chat.radius", config.getInt("chat-radius", 0));
+ return chatRadius;
}
@Override
@@ -113,19 +119,29 @@ public class Settings implements ISettings
{
return isCommandDisabled(cmd.getName());
}
+ private Set disabledCommands = new HashSet();
@Override
public boolean isCommandDisabled(String label)
{
+ return disabledCommands.contains(label);
+ }
+
+ private Set getDisabledCommands()
+ {
+ Set disCommands = new HashSet();
for (String c : config.getStringList("disabled-commands"))
{
- if (!c.equalsIgnoreCase(label))
- {
- continue;
- }
- return true;
+ disCommands.add(c.toLowerCase(Locale.ENGLISH));
}
- return config.getBoolean("disable-" + label.toLowerCase(Locale.ENGLISH), false);
+ for (String c : config.getKeys(false))
+ {
+ if (c.startsWith("disable-"))
+ {
+ disCommands.add(c.substring(8).toLowerCase(Locale.ENGLISH));
+ }
+ }
+ return disCommands;
}
@Override
@@ -192,11 +208,17 @@ public class Settings implements ISettings
}
return cost;
}
+ private String nicknamePrefix = "~";
+
+ private String _getNicknamePrefix()
+ {
+ return config.getString("nickname-prefix", "~");
+ }
@Override
public String getNicknamePrefix()
{
- return config.getString("nickname-prefix", "~");
+ return nicknamePrefix;
}
@Override
@@ -250,9 +272,15 @@ public class Settings implements ISettings
}
return null;
}
+ private ChatColor operatorColor = null;
@Override
- public ChatColor getOperatorColor() throws Exception
+ public ChatColor getOperatorColor()
+ {
+ return operatorColor;
+ }
+
+ private ChatColor _getOperatorColor()
{
String colorName = config.getString("ops-name-color", null);
@@ -262,7 +290,7 @@ public class Settings implements ISettings
}
if ("none".equalsIgnoreCase(colorName) || colorName.isEmpty())
{
- throw new Exception();
+ return null;
}
try
@@ -317,7 +345,7 @@ public class Settings implements ISettings
{
return config.getString("backup.command", null);
}
- private Map chatFormats = new HashMap();
+ private Map chatFormats = Collections.synchronizedMap(new HashMap());
@Override
public MessageFormat getChatFormat(String group)
@@ -392,6 +420,17 @@ public class Settings implements ISettings
signUsePerSecond = _getSignUsePerSecond();
kits = _getKits();
chatFormats.clear();
+ changeDisplayName = _changeDisplayName();
+ disabledCommands = getDisabledCommands();
+ nicknamePrefix = _getNicknamePrefix();
+ operatorColor = _getOperatorColor();
+ changePlayerListName = _changePlayerListName();
+ configDebug = _isDebug();
+ prefixsuffixconfigured = _isPrefixSuffixConfigured();
+ addprefixsuffix = _addPrefixSuffix();
+ disablePrefix = _disablePrefix();
+ disableSuffix = _disableSuffix();
+ chatRadius = _getChatRadius();
}
private List itemSpawnBl = new ArrayList();
@@ -479,11 +518,17 @@ public class Settings implements ISettings
return config.getBoolean("protect.disable.warn-on-build-disallow", false);
}
private boolean debug = false;
+ private boolean configDebug = false;
+
+ private boolean _isDebug()
+ {
+ return config.getBoolean("debug", false);
+ }
@Override
public boolean isDebug()
{
- return debug || config.getBoolean("debug", false);
+ return debug || configDebug;
}
@Override
@@ -610,43 +655,79 @@ public class Settings implements ISettings
{
return config.getBoolean("remove-god-on-disconnect", false);
}
+ private boolean changeDisplayName = true;
- @Override
- public boolean changeDisplayName()
+ private boolean _changeDisplayName()
{
return config.getBoolean("change-displayname", true);
}
@Override
- public boolean changePlayerListName()
+ public boolean changeDisplayName()
+ {
+ return changeDisplayName;
+ }
+ private boolean changePlayerListName = false;
+
+ private boolean _changePlayerListName()
{
return config.getBoolean("change-playerlist", false);
}
+ @Override
+ public boolean changePlayerListName()
+ {
+ return changePlayerListName;
+ }
+
@Override
public boolean useBukkitPermissions()
{
return config.getBoolean("use-bukkit-permissions", false);
}
+ private boolean prefixsuffixconfigured = false;
+ private boolean addprefixsuffix = false;
+
+ private boolean _addPrefixSuffix()
+ {
+ return config.getBoolean("add-prefix-suffix", false);
+ }
+
+ private boolean _isPrefixSuffixConfigured()
+ {
+ return config.hasProperty("add-prefix-suffix");
+ }
@Override
public boolean addPrefixSuffix()
{
- return config.getBoolean("add-prefix-suffix", ess.getServer().getPluginManager().isPluginEnabled("EssentialsChat"));
+ return prefixsuffixconfigured ? addprefixsuffix : ess.getServer().getPluginManager().isPluginEnabled("EssentialsChat");
}
+ private boolean disablePrefix = false;
- @Override
- public boolean disablePrefix()
+ private boolean _disablePrefix()
{
return config.getBoolean("disablePrefix", false);
}
@Override
- public boolean disableSuffix()
+ public boolean disablePrefix()
+ {
+ return disablePrefix;
+ }
+ private boolean disableSuffix = false;
+
+ private boolean _disableSuffix()
{
return config.getBoolean("disableSuffix", false);
}
+ @Override
+ public boolean disableSuffix()
+ {
+ return disableSuffix;
+ }
+
@Override
public long getAutoAfk()
{
@@ -713,7 +794,7 @@ public class Settings implements ISettings
{
return config.getBoolean("world-teleport-permissions", false);
}
-
+
@Override
public boolean isWorldHomePermissions()
{
@@ -800,38 +881,35 @@ public class Settings implements ISettings
{
return (config.getLong("teleport-invulnerability", 0) > 0);
}
-
+
@Override
public boolean isTeleportInvulnerability()
{
return teleportInvulnerability;
}
-
private long loginAttackDelay;
-
+
private long _getLoginAttackDelay()
{
return config.getLong("login-attack-delay", 0) * 1000;
}
-
+
@Override
public long getLoginAttackDelay()
{
return loginAttackDelay;
}
-
private int signUsePerSecond;
-
+
private int _getSignUsePerSecond()
{
final int perSec = config.getInt("sign-use-per-second", 4);
return perSec > 0 ? perSec : 1;
}
-
+
@Override
public int getSignUsePerSecond()
{
return signUsePerSecond;
}
-
}
diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java
index 3da49ad8b..5b6eff1fb 100644
--- a/Essentials/src/com/earth2me/essentials/User.java
+++ b/Essentials/src/com/earth2me/essentials/User.java
@@ -7,6 +7,7 @@ import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -284,10 +285,10 @@ public class User extends UserData implements Comparable, IReplyTo, IUser
{
try
{
- final String opPrefix = ess.getSettings().getOperatorColor().toString();
- if (opPrefix.length() > 0)
+ final ChatColor opPrefix = ess.getSettings().getOperatorColor();
+ if (opPrefix != null && opPrefix.toString().length() > 0)
{
- prefix.insert(0, opPrefix);
+ prefix.insert(0, opPrefix.toString());
suffix = "§f";
}
}
@@ -325,7 +326,8 @@ public class User extends UserData implements Comparable, IReplyTo, IUser
{
output = Util.lastCode(strPrefix) + nickname.substring(0, 14);
}
- if (output.charAt(output.length() - 1) == '§') {
+ if (output.charAt(output.length() - 1) == '§')
+ {
output = output.substring(0, output.length() - 1);
}
return output;
@@ -639,7 +641,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser
{
return vanished;
}
-
+
public void setVanished(final boolean set)
{
vanished = set;
@@ -671,21 +673,23 @@ public class User extends UserData implements Comparable, IReplyTo, IUser
final boolean set = !vanished;
this.setVanished(set);
}
-
- public boolean checkSignThrottle() {
- if (isSignThrottled()) {
+
+ public boolean checkSignThrottle()
+ {
+ if (isSignThrottled())
+ {
return true;
}
updateThrottle();
return false;
}
-
+
public boolean isSignThrottled()
{
final long minTime = lastThrottledAction + (1000 / ess.getSettings().getSignUsePerSecond());
return (System.currentTimeMillis() < minTime);
}
-
+
public void updateThrottle()
{
lastThrottledAction = System.currentTimeMillis();;
diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java
index 7dd9ebf97..8ae1b7a3f 100644
--- a/Essentials/src/com/earth2me/essentials/UserData.java
+++ b/Essentials/src/com/earth2me/essentials/UserData.java
@@ -440,14 +440,14 @@ public abstract class UserData extends PlayerExtension implements IConf
public List getIgnoredPlayers()
{
- return config.getStringList("ignore");
+ return Collections.synchronizedList(config.getStringList("ignore"));
}
public void setIgnoredPlayers(List players)
{
if (players == null || players.isEmpty())
{
- ignoredPlayers = new ArrayList();
+ ignoredPlayers = Collections.synchronizedList(new ArrayList());
config.removeProperty("ignore");
}
else
@@ -466,7 +466,7 @@ public abstract class UserData extends PlayerExtension implements IConf
{
return false;
}
- return isIgnoredPlayer(user);
+ return isIgnoredPlayer(user);
}
public boolean isIgnoredPlayer(IUser user)
diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java
index 112477ecb..4f8f10887 100644
--- a/Essentials/src/com/earth2me/essentials/Util.java
+++ b/Essentials/src/com/earth2me/essentials/Util.java
@@ -215,10 +215,11 @@ public class Util
{
c.add(Calendar.SECOND, seconds * (future ? 1 : -1));
}
-
+
Calendar max = new GregorianCalendar();
max.add(Calendar.YEAR, 10);
- if (c.after(max)) {
+ if (c.after(max))
+ {
return max.getTimeInMillis();
}
return c.getTimeInMillis();
@@ -295,12 +296,14 @@ public class Util
int x = loc.getBlockX();
int y = (int)Math.round(loc.getY());
int z = loc.getBlockZ();
+ final int origY = y;
while (isBlockAboveAir(world, x, y, z))
{
y -= 1;
if (y < 0)
{
+ y = origY;
break;
}
}
@@ -310,10 +313,36 @@ public class Util
y += 1;
if (y >= world.getHighestBlockYAt(x, z))
{
- x += 1;
+ x -= 3;
+ z -= 3;
+ y = origY + 4;
break;
}
}
+
+ while (isBlockUnsafe(world, x, y, z))
+ {
+ y -= 1;
+ if (y + 4 < origY)
+ {
+ x += 1;
+ if (x - 3 > loc.getBlockX())
+ {
+ x = loc.getBlockX() - 3;
+ z += 1;
+ if (z - 3 > loc.getBlockZ())
+ {
+ x = loc.getBlockX() + 4;
+ z = loc.getBlockZ();
+ y = world.getHighestBlockYAt(x, z);
+ break;
+ }
+ }
+
+ y = origY + 4;
+ }
+ }
+
while (isBlockUnsafe(world, x, y, z))
{
y -= 1;
@@ -321,7 +350,7 @@ public class Util
{
x += 1;
y = world.getHighestBlockYAt(x, z);
- if (x - 32 > loc.getBlockX())
+ if (x - 48 > loc.getBlockX())
{
throw new Exception(_("holeInFloor"));
}
@@ -510,15 +539,16 @@ public class Util
}
return buf.toString();
}
-
- public static String lastCode(final String input) {
+
+ public static String lastCode(final String input)
+ {
int pos = input.lastIndexOf("§");
- if (pos == -1 || (pos + 1) == input.length()) {
+ if (pos == -1 || (pos + 1) == input.length())
+ {
return "";
}
- return input.substring(pos, pos + 2);
+ return input.substring(pos, pos + 2);
}
-
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])");
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandexp.java b/Essentials/src/com/earth2me/essentials/commands/Commandexp.java
index de4727fa0..0f1fe4ea6 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandexp.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandexp.java
@@ -2,7 +2,6 @@ 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 org.bukkit.Server;
import org.bukkit.command.CommandSender;
@@ -122,8 +121,7 @@ public class Commandexp extends EssentialsCommand
private void showExp(final CommandSender sender, final User target)
{
final int totalExp = SetExpFix.getTotalExperience(target);
- final int expLeft = (int)Util.roundDouble(((((3.5 * target.getLevel()) + 6.7) - (totalExp - ((1.75 * (target.getLevel() * target.getLevel())) + (5.00 * target.getLevel())))) + 1));
- sender.sendMessage(_("exp", target.getDisplayName(), SetExpFix.getTotalExperience(target), target.getLevel(), expLeft));
+ sender.sendMessage(_("exp", target.getDisplayName(), SetExpFix.getTotalExperience(target), target.getLevel(), SetExpFix.getExpUntilNextLevel(target)));
}
private void setExp(final CommandSender sender, final User target, final String strAmount, final boolean give)
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java b/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java
index 5fdc69d68..39f7d936a 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java
@@ -19,53 +19,57 @@ public class Commandgamemode extends EssentialsCommand
@Override
protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
- if (args.length < 1)
+ if (args.length < 2)
{
throw new NotEnoughArgumentsException();
}
-
gamemodeOtherPlayers(server, sender, args);
}
@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().length() > 2 && user.isAuthorized("essentials.gamemode.others"))
+ if (args.length < 1)
+ {
+ throw new NotEnoughArgumentsException();
+ }
+
+ if (args.length > 1 && args[1].trim().length() > 2 && user.isAuthorized("essentials.gamemode.others"))
{
gamemodeOtherPlayers(server, user, args);
return;
}
-
- user.setGameMode(user.getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL);
+ performSetMode(args[0].toLowerCase(Locale.ENGLISH), user);
user.sendMessage(_("gameMode", _(user.getGameMode().toString().toLowerCase(Locale.ENGLISH)), user.getDisplayName()));
}
private void gamemodeOtherPlayers(final Server server, final CommandSender sender, final String[] args)
{
- for (Player matchPlayer : server.matchPlayer(args[0]))
+ for (Player matchPlayer : server.matchPlayer(args[1]))
{
final User player = ess.getUser(matchPlayer);
if (player.isHidden())
{
continue;
}
-
- if (args.length > 1)
- {
- if (args[1].contains("creat") || args[1].equalsIgnoreCase("1"))
- {
- player.setGameMode(GameMode.CREATIVE);
- }
- else
- {
- player.setGameMode(GameMode.SURVIVAL);
- }
- }
- else
- {
- player.setGameMode(player.getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL);
- }
+ performSetMode(args[0].toLowerCase(Locale.ENGLISH), player);
sender.sendMessage(_("gameMode", _(player.getGameMode().toString().toLowerCase(Locale.ENGLISH)), player.getDisplayName()));
}
}
-}
+
+ private void performSetMode(String mode, Player player)
+ {
+ if (mode.contains("survi") || mode.equalsIgnoreCase("0") || mode.equalsIgnoreCase("s"))
+ {
+ player.setGameMode(GameMode.SURVIVAL);
+ }
+ else if (mode.contains("creat") || mode.equalsIgnoreCase("1") || mode.equalsIgnoreCase("c"))
+ {
+ player.setGameMode(GameMode.CREATIVE);
+ }
+ else if (mode.contains("advent") || mode.equalsIgnoreCase("2") || mode.equalsIgnoreCase("a"))
+ {
+ player.setGameMode(GameMode.ADVENTURE);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java
index d9b08b50f..c8d5b732e 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java
@@ -38,8 +38,19 @@ public class Commandgc extends EssentialsCommand
for (World w : server.getWorlds())
{
+ String worldType = "World";
+ switch (w.getEnvironment())
+ {
+ case NETHER:
+ worldType = "Nether";
+ break;
+ case THE_END:
+ worldType = "The End";
+ break;
+ }
+
sender.sendMessage(
- (w.getEnvironment() == World.Environment.NETHER ? "Nether" : "World") + " \"" + w.getName() + "\": "
+ worldType + " \"" + w.getName() + "\": "
+ w.getLoadedChunks().length + _("gcchunks")
+ w.getEntities().size() + _("gcentities"));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java b/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java
index 8a408924d..f41c7684f 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java
@@ -34,7 +34,7 @@ public class Commanditemdb extends EssentialsCommand
{
itemStack = ess.getItemDb().get(args[0]);
}
- sender.sendMessage(itemStack.getType().toString() + "- " + itemStack.getTypeId() + ":" + Integer.toString(itemStack.getData().getData()));
+ sender.sendMessage(itemStack.getType().toString() + "- " + itemStack.getTypeId() + ":" + Integer.toString(itemStack.getDurability()));
if (itemStack.getType() != Material.AIR)
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java
index d6d6b76f9..c1d4347c6 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java
@@ -58,7 +58,7 @@ public class Commandtp extends EssentialsCommand
throw new Exception(_("teleportDisabled", toPlayer.getDisplayName()));
}
if (target.getWorld() != toPlayer.getWorld() && ess.getSettings().isWorldTeleportPermissions()
- && !user.isAuthorized("essentials.world." + toPlayer.getWorld().getName()))
+ && !target.isAuthorized("essentials.world." + toPlayer.getWorld().getName()))
{
throw new Exception(_("noPerm", "essentials.world." + toPlayer.getWorld().getName()));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java
index 9d389ecac..dba6bdb87 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java
@@ -26,7 +26,7 @@ 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()))
+ && !player.isAuthorized("essentials.world." + user.getWorld().getName()))
{
throw new Exception(_("noPerm", "essentials.world." + user.getWorld().getName()));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java
index 6335a4a54..98e232609 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java
@@ -43,7 +43,7 @@ public class Commandtpall extends EssentialsCommand
continue;
}
if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
- && !user.isAuthorized("essentials.world." + user.getWorld().getName()))
+ && !player.isAuthorized("essentials.world." + user.getWorld().getName()))
{
continue;
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java
index 92eb87226..804176bd3 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java
@@ -23,7 +23,7 @@ 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()))
+ && !player.isAuthorized("essentials.world." + user.getWorld().getName()))
{
throw new Exception(_("noPerm", "essentials.world." + user.getWorld().getName()));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java
index 880c4e362..3f650f96d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java
@@ -31,7 +31,7 @@ public class Commandtpohere extends EssentialsCommand
}
if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions()
- && !user.isAuthorized("essentials.world." + user.getWorld().getName()))
+ && !player.isAuthorized("essentials.world." + user.getWorld().getName()))
{
throw new Exception(_("noPerm", "essentials.world." + user.getWorld().getName()));
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandworkbench.java b/Essentials/src/com/earth2me/essentials/commands/Commandworkbench.java
new file mode 100644
index 000000000..265c519ab
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandworkbench.java
@@ -0,0 +1,20 @@
+package com.earth2me.essentials.commands;
+
+import com.earth2me.essentials.User;
+import org.bukkit.Server;
+
+
+public class Commandworkbench extends EssentialsCommand
+{
+ public Commandworkbench()
+ {
+ super("workbench");
+ }
+
+
+ @Override
+ public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
+ {
+ user.openWorkbench(null, true);
+ }
+}
\ No newline at end of file
diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java
index ce617fcd5..93a33fcea 100644
--- a/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java
+++ b/Essentials/src/com/earth2me/essentials/craftbukkit/FakeWorld.java
@@ -669,4 +669,10 @@ public class FakeWorld implements World
{
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public Entity spawnEntity(Location lctn, EntityType et)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java b/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java
index b788fa7ee..e4a226da0 100644
--- a/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java
+++ b/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java
@@ -16,7 +16,7 @@ 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;
@@ -40,26 +40,42 @@ public class SetExpFix
}
private static int getExpToLevel(final Player player)
- {
+ {
return getExpToLevel(player.getLevel());
}
-
+
private static int getExpToLevel(final int level)
- {
- return 7 + (level * 7 >> 1);
+ {
+ if (level >= 30)
+ {
+ return 62 + (level - 30) * 7;
+ }
+ if (level >= 15)
+ {
+ return 17 + (level - 15) * 3;
+ }
+ return 17;
}
-
+
//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)Math.round(getExpToLevel(player) * player.getExp());
int currentLevel = player.getLevel();
-
- while (currentLevel > 0) {
+
+ while (currentLevel > 0)
+ {
currentLevel--;
exp += getExpToLevel(currentLevel);
}
return exp;
}
+
+ public static int getExpUntilNextLevel(final Player player)
+ {
+ int exp = (int)Math.round(getExpToLevel(player) * player.getExp());
+ int nextLevel = player.getLevel() + 1;
+ return getExpToLevel(nextLevel) - exp;
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
index 389effc64..f3faa2de0 100644
--- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
+++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
@@ -412,6 +412,7 @@ public class EssentialsSign
if (item.equalsIgnoreCase("times"))
{
sign.setLine(index, (quantity - decrement) + " times");
+ sign.updateSign();
return new Trade(signName.toLowerCase(Locale.ENGLISH) + "sign", ess);
}
else if (item.equalsIgnoreCase("exp") || item.equalsIgnoreCase("xp"))
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java
index c159510c7..162457baf 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java
@@ -75,8 +75,8 @@ public class SignBlockListener implements Listener
return false;
}
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public void onSignChange(final SignChangeEvent event)
+ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
+ public void onSignChange2(final SignChangeEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
@@ -88,6 +88,15 @@ public class SignBlockListener implements Listener
{
event.setLine(i, Util.formatString(user, "essentials.signs", event.getLine(i)));
}
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ public void onSignChange(final SignChangeEvent event)
+ {
+ if (ess.getSettings().areSignsDisabled())
+ {
+ return;
+ }
for (Signs signs : Signs.values())
{
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignGameMode.java b/Essentials/src/com/earth2me/essentials/signs/SignGameMode.java
index 37a9fb1b8..e3166db78 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignGameMode.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignGameMode.java
@@ -7,6 +7,7 @@ import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import java.util.Locale;
import org.bukkit.GameMode;
+import org.bukkit.entity.Player;
public class SignGameMode extends EssentialsSign
@@ -19,19 +20,53 @@ public class SignGameMode extends EssentialsSign
@Override
protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException
{
- validateTrade(sign, 1, ess);
+ final String gamemode = sign.getLine(1);
+ if (gamemode.isEmpty())
+ {
+ sign.setLine(1, "Survival");
+ }
+
+ validateTrade(sign, 2, ess);
+
return true;
}
@Override
protected boolean onSignInteract(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, ChargeException
{
- final Trade charge = getTrade(sign, 1, ess);
+ final Trade charge = getTrade(sign, 2, ess);
+ final String mode = sign.getLine(1).trim();
+
+ if (mode.isEmpty())
+ {
+ throw new SignException(_("invalidSignLine", 2));
+ }
+
charge.isAffordableFor(player);
- player.setGameMode(player.getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL);
+ performSetMode(mode.toLowerCase(Locale.ENGLISH), player);
player.sendMessage(_("gameMode", _(player.getGameMode().toString().toLowerCase(Locale.ENGLISH)), player.getDisplayName()));
charge.charge(player);
return true;
}
+
+ private void performSetMode(String mode, Player player) throws SignException
+ {
+ if (mode.contains("survi") || mode.equalsIgnoreCase("0"))
+ {
+ player.setGameMode(GameMode.SURVIVAL);
+ }
+ else if (mode.contains("creat") || mode.equalsIgnoreCase("1"))
+ {
+ player.setGameMode(GameMode.CREATIVE);
+ }
+ else if (mode.contains("advent") || mode.equalsIgnoreCase("2"))
+ {
+ player.setGameMode(GameMode.ADVENTURE);
+ }
+ else
+ {
+ throw new SignException(_("invalidSignLine", 2));
+ }
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignInfo.java b/Essentials/src/com/earth2me/essentials/signs/SignInfo.java
new file mode 100644
index 000000000..e75b060e3
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/signs/SignInfo.java
@@ -0,0 +1,54 @@
+package com.earth2me.essentials.signs;
+
+import com.earth2me.essentials.ChargeException;
+import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.Trade;
+import com.earth2me.essentials.User;
+import com.earth2me.essentials.textreader.IText;
+import com.earth2me.essentials.textreader.KeywordReplacer;
+import com.earth2me.essentials.textreader.TextInput;
+import com.earth2me.essentials.textreader.TextPager;
+import java.io.IOException;
+
+
+public class SignInfo extends EssentialsSign
+{
+ public SignInfo()
+ {
+ super("Info");
+ }
+
+ @Override
+ protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException
+ {
+ validateTrade(sign, 3, ess);
+ return true;
+ }
+
+ @Override
+ protected boolean onSignInteract(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, ChargeException
+ {
+ final Trade charge = getTrade(sign, 3, ess);
+ charge.isAffordableFor(player);
+
+ String chapter = sign.getLine(1);
+ String page = sign.getLine(2);
+
+ final IText input;
+ try
+ {
+ input = new TextInput(player, "info", true, ess);
+ final IText output = new KeywordReplacer(input, player, ess);
+ final TextPager pager = new TextPager(output);
+ pager.showPage(chapter, page, null, player);
+
+ }
+ catch (IOException ex)
+ {
+ throw new SignException(ex.getMessage(), ex);
+ }
+
+ charge.charge(player);
+ return true;
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignRepair.java b/Essentials/src/com/earth2me/essentials/signs/SignRepair.java
new file mode 100644
index 000000000..dd1b3ae0d
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/signs/SignRepair.java
@@ -0,0 +1,57 @@
+package com.earth2me.essentials.signs;
+
+import static com.earth2me.essentials.I18n._;
+import com.earth2me.essentials.ChargeException;
+import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.Trade;
+import com.earth2me.essentials.User;
+import com.earth2me.essentials.commands.Commandrepair;
+
+
+public class SignRepair extends EssentialsSign
+{
+ public SignRepair()
+ {
+ super("Repair");
+ }
+
+ @Override
+ protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException
+ {
+ final String repairTarget = sign.getLine(1);
+ if (repairTarget.isEmpty())
+ {
+ sign.setLine(1, "Hand");
+ }
+ else if (!repairTarget.equalsIgnoreCase("all") && !repairTarget.equalsIgnoreCase("hand") )
+ {
+ throw new SignException(_("invalidSignLine", 2));
+ }
+ validateTrade(sign, 2, ess);
+ return true;
+ }
+
+ @Override
+ protected boolean onSignInteract(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, ChargeException
+ {
+ final Trade charge = getTrade(sign, 2, ess);
+ charge.isAffordableFor(player);
+
+ Commandrepair command = new Commandrepair();
+ command.setEssentials(ess);
+ String[] args = new String[]
+ {
+ sign.getLine(1)
+ };
+ try
+ {
+ command.run(ess.getServer(), player, "repair", args);
+ }
+ catch (Exception ex)
+ {
+ throw new SignException(ex.getMessage(), ex);
+ }
+ charge.charge(player);
+ return true;
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/signs/Signs.java b/Essentials/src/com/earth2me/essentials/signs/Signs.java
index 2cf05ee77..41de479d3 100644
--- a/Essentials/src/com/earth2me/essentials/signs/Signs.java
+++ b/Essentials/src/com/earth2me/essentials/signs/Signs.java
@@ -10,9 +10,11 @@ public enum Signs
FREE(new SignFree()),
GAMEMODE(new SignGameMode()),
HEAL(new SignHeal()),
+ INFO(new SignInfo()),
KIT(new SignKit()),
MAIL(new SignMail()),
PROTECTION(new SignProtection()),
+ REPAIR(new SignRepair()),
SELL(new SignSell()),
SPAWNMOB(new SignSpawnmob()),
TIME(new SignTime()),
diff --git a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
index d8e590300..4c875098b 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
@@ -40,8 +40,8 @@ public class KeywordReplacer implements IText
user.setDisplayNick();
displayName = user.getDisplayName();
userName = user.getName();
- ipAddress = user.getAddress().getAddress().toString();
- address = user.getAddress().toString();
+ ipAddress = user.getAddress() == null || user.getAddress().getAddress() == null ? "" : user.getAddress().getAddress().toString();
+ address = user.getAddress() == null ? "" : user.getAddress().toString();
balance = Double.toString(user.getMoney());
mails = Integer.toString(user.getMails().size());
world = user.getLocation() == null || user.getLocation().getWorld() == null ? "" : user.getLocation().getWorld().getName();
diff --git a/Essentials/src/com/earth2me/essentials/textreader/TextPager.java b/Essentials/src/com/earth2me/essentials/textreader/TextPager.java
index cb70839dd..7b73f49ab 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/TextPager.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/TextPager.java
@@ -48,7 +48,7 @@ public class TextPager
final int start = onePage ? 0 : (page - 1) * 9;
final int pages = lines.size() / 9 + (lines.size() % 9 > 0 ? 1 : 0);
- if (!onePage)
+ if (!onePage && commandName != null)
{
StringBuilder content = new StringBuilder();
final String[] title = commandName.split(" ", 2);
@@ -72,7 +72,7 @@ public class TextPager
{
sender.sendMessage(lines.get(i));
}
- if (!onePage && page < pages)
+ if (!onePage && page < pages && commandName != null)
{
sender.sendMessage(_("readNextPage", commandName, page + 1));
}
@@ -130,7 +130,7 @@ public class TextPager
}
int pages = end / 9 + (end % 9 > 0 ? 1 : 0);
- if (!onePage)
+ if (!onePage && commandName != null)
{
sender.sendMessage(_("infoPages", page, pages, I18n.capitalCase(commandName)));
@@ -139,7 +139,7 @@ public class TextPager
{
sender.sendMessage(lines.get(i));
}
- if (!onePage && page < pages)
+ if (!onePage && page < pages && commandName != null)
{
sender.sendMessage(_("readNextPage", commandName, page + 1));
}
@@ -183,7 +183,7 @@ public class TextPager
final int page = chapterpage + 1;
final int pages = (chapterend - chapterstart) / 9 + ((chapterend - chapterstart) % 9 > 0 ? 1 : 0);
- if (!onePage)
+ if (!onePage && commandName != null)
{
sender.sendMessage(_("infoChapterPages", pageStr, page, pages));
}
@@ -191,7 +191,7 @@ public class TextPager
{
sender.sendMessage(lines.get(i));
}
- if (!onePage && page < pages)
+ if (!onePage && page < pages && commandName != null)
{
sender.sendMessage(_("readNextPage", commandName, pageStr + " " + (page + 1)));
}
diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml
index cea97aa92..34d13bf5a 100644
--- a/Essentials/src/config.yml
+++ b/Essentials/src/config.yml
@@ -7,7 +7,7 @@
# If you want to use special characters in this document, such as accented letters, you MUST save the file as UTF-8, not ANSI.
# If you receive an error when Essentials loads, ensure that:
# - No tabs are present: YAML only allows spaces
-# - Indents are correct: YAML heirarchy is based entirely on indentation
+# - Indents are correct: YAML hierarchy is based entirely on indentation
# - You have "escaped" all apostrophes in your text: If you want to write "don't", for example, write "don''t" instead (note the doubled apostrphe)
# - List items are prefixed with a hyphen and indented:
# lists:
@@ -41,7 +41,7 @@ change-displayname: true
# The prefix/suffix can be set using Permissions, Group Manager or PermissionsEx.
# The value of change-displayname (above) has to be true.
# If you don't set this, it will default to true if essentials chat is installed.
-# Don't forget to remove the # infront of the line
+# Don't forget to remove the # in front of the line
#add-prefix-suffix: false
# The delay, in seconds, required between /home, /tp, etc.
@@ -218,7 +218,9 @@ enabledSigns:
#- enchant
#- gamemode
#- heal
+ #- info
#- spawnmob
+ #- repair
#- time
#- weather
#- protection
@@ -226,7 +228,7 @@ enabledSigns:
# How many times per second can Essentials signs be interacted with.
# Values should be between 1-20, 20 being virtually no lag protection.s
-# Lower numbers will reduce the possiblity of lag, but may annoy players.
+# Lower numbers will reduce the possibility of lag, but may annoy players.
sign-use-per-second: 4
# Backup runs a command while saving is disabled
@@ -302,7 +304,7 @@ default-stack-size: -1
# Oversized stacks are stacks that ignore the normal max stacksize.
# They can be obtained using /give and /item, if the player has essentials.oversizedstacks permission.
-# How many items should be in a oversized stack?
+# How many items should be in an oversized stack?
oversized-stacksize: 64
# Do you allow to repair enchanted weapons and armor?
@@ -375,7 +377,7 @@ 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 (must be above the negitive of max-money).
+# Set the minimum amount of money a player can have (must be above the negative 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
@@ -391,7 +393,7 @@ economy-log-enabled: false
# Show other plugins commands in help
non-ess-in-help: true
-# Hide plugins which dont give a permission
+# Hide plugins which do not give a permission
# You can override a true value here for a single plugin by adding a permission to a user/group.
# The individual permission is: essentials.help., anyone with essentials.* or '*' will see all help this setting reguardless.
# You can use negitive permissions to remove access to just a single plugins help if the following is enabled.
@@ -424,7 +426,7 @@ chat:
# Default: '{WORLDNAME} {DISPLAYNAME}&7:&f {MESSAGE}'
# Admins: '{WORLDNAME} &c[{GROUP}]&f {DISPLAYNAME}&7:&c {MESSAGE}'
- # If your using group formats make sure to remove the '#' to allow the setting to be read.
+ # If you are using group formats make sure to remove the '#' to allow the setting to be read.
############################################################
# +------------------------------------------------------+ #
@@ -608,7 +610,7 @@ newbies:
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.
+ # This kit will be given regardless of cost, and permissions.
#kit: ''
kit: tools
diff --git a/Essentials/src/items.csv b/Essentials/src/items.csv
index 458999827..29920e69f 100644
--- a/Essentials/src/items.csv
+++ b/Essentials/src/items.csv
@@ -7,7 +7,11 @@ smoothstone,1,0
rock,1,0
grass,2,0
greendirt,2,0
+greenearth,2,0
+greenland,2,0
dirt,3,0
+earth,3,0
+land,3,0
cobblestone,4,0
cstone,4,0
cobble,4,0
@@ -32,20 +36,20 @@ 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
+spruceplank,5,1
+sprucewoodenplank,5,1
+sprucewoodplank,5,1
+sprucewplank,5,1
+spruceplankwooden,5,1
+spruceplankwood,5,1
+spruceplankw,5,1
+splank,5,1
+swoodenplank,5,1
+swoodplank,5,1
+swplank,5,1
+splankwooden,5,1
+splankwood,5,1
+splankw,5,1
lightplank,5,2
lightwoodenplank,5,2
lightwoodplank,5,2
@@ -53,13 +57,6 @@ 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
@@ -119,25 +116,11 @@ oaktreesap,6,0
oaklogsap,6,0
oaktrunksap,6,0
oakwoodsap,6,0
-normaltreesap,6,0
-normallogsap,6,0
-normaltrunksap,6,0
-normalwoodsap,6,0
osap,6,0
otreesap,6,0
ologsap,6,0
otrunksap,6,0
owoodsap,6,0
-nsap,6,0
-ntreesap,6,0
-nlogsap,6,0
-ntrunksap,6,0
-nwoodsap,6,0
-redsapling,6,1
-redtreesapling,6,1
-redlogsapling,6,1
-redtrunksapling,6,1
-redwoodsapling,6,1
darksapling,6,1
darktreesapling,6,1
darklogsapling,6,1
@@ -148,21 +131,11 @@ blacktreesapling,6,1
blacklogsapling,6,1
blacktrunksapling,6,1
blackwoodsapling,6,1
-pinesapling,6,1
-pinetreesapling,6,1
-pinelogsapling,6,1
-pinetrunksapling,6,1
-pinewoodsapling,6,1
sprucesapling,6,1
sprucetreesapling,6,1
sprucelogsapling,6,1
sprucetrunksapling,6,1
sprucewoodsapling,6,1
-rsapling,6,1
-rtreesapling,6,1
-rlogsapling,6,1
-rtrunksapling,6,1
-rwoodsapling,6,1
dsapling,6,1
dtreesapling,6,1
dlogsapling,6,1
@@ -173,21 +146,11 @@ bltreesapling,6,1
bllogsapling,6,1
bltrunksapling,6,1
blwoodsapling,6,1
-psapling,6,1
-ptreesapling,6,1
-plogsapling,6,1
-ptrunksapling,6,1
-pwoodsapling,6,1
ssapling,6,1
streesapling,6,1
slogsapling,6,1
strunksapling,6,1
swoodsapling,6,1
-redsap,6,1
-redtreesap,6,1
-redlogsap,6,1
-redtrunksap,6,1
-redwoodsap,6,1
darksap,6,1
darktreesap,6,1
darklogsap,6,1
@@ -208,11 +171,6 @@ sprucetreesap,6,1
sprucelogsap,6,1
sprucetrunksap,6,1
sprucewoodsap,6,1
-rsap,6,1
-rtreesap,6,1
-rlogsap,6,1
-rtrunksap,6,1
-rwoodsap,6,1
dsap,6,1
dtreesap,6,1
dlogsap,6,1
@@ -223,11 +181,6 @@ bltreesap,6,1
bllogsap,6,1
bltrunksap,6,1
blwoodsap,6,1
-psap,6,1
-ptreesap,6,1
-plogsap,6,1
-ptrunksap,6,1
-pwoodsap,6,1
ssap,6,1
streesap,6,1
slogsap,6,1
@@ -238,11 +191,6 @@ birchtreesapling,6,2
birchlogsapling,6,2
birchtrunksapling,6,2
birchwoodsapling,6,2
-pandasapling,6,2
-pandatreesapling,6,2
-pandalogsapling,6,2
-pandatrunksapling,6,2
-pandawoodsapling,6,2
whitesapling,6,2
whitetreesapling,6,2
whitelogsapling,6,2
@@ -273,11 +221,6 @@ birchtreesap,6,2
birchlogsap,6,2
birchtrunksap,6,2
birchwoodsap,6,2
-pandasap,6,2
-pandatreesap,6,2
-pandalogsap,6,2
-pandatrunksap,6,2
-pandawoodsap,6,2
whitesap,6,2
whitetreesap,6,2
whitelogsap,6,2
@@ -352,22 +295,10 @@ oaktree,17,0
oaklog,17,0
oaktrunk,17,0
oakwood,17,0
-normaltree,17,0
-normallog,17,0
-normaltrunk,17,0
-normalwood,17,0
otree,17,0
olog,17,0
otrunk,17,0
owood,17,0
-ntree,17,0
-nlog,17,0
-ntrunk,17,0
-nwood,17,0
-redtree,17,1
-redlog,17,1
-redtrunk,17,1
-redwood,17,1
darktree,17,1
darklog,17,1
darktrunk,17,1
@@ -376,20 +307,11 @@ blacktree,17,1
blacklog,17,1
blacktrunk,17,1
blackwood,17,1
-pine,17,1
-pinetree,17,1
-pinelog,17,1
-pinetrunk,17,1
-pinewood,17,1
spruce,17,1
sprucetree,17,1
sprucelog,17,1
sprucetrunk,17,1
sprucewood,17,1
-rtree,17,1
-rlog,17,1
-rtrunk,17,1
-rwood,17,1
dtree,17,1
dlog,17,1
dtrunk,17,1
@@ -398,10 +320,6 @@ bltree,17,1
bllog,17,1
bltrunk,17,1
blwood,17,1
-ptree,17,1
-plog,17,1
-ptrunk,17,1
-pwood,17,1
stree,17,1
slog,17,1
strunk,17,1
@@ -411,10 +329,6 @@ birchtree,17,2
birchlog,17,2
birchtrunk,17,2
birchwood,17,2
-pandatree,17,2
-pandalog,17,2
-pandatrunk,17,2
-pandawood,17,2
whitetree,17,2
whitelog,17,2
whitetrunk,17,2
@@ -427,10 +341,6 @@ btree,17,2
blog,17,2
btrunk,17,2
bwood,17,2
-patree,17,2
-palog,17,2
-patrunk,17,2
-pawood,17,2
wtree,17,2
wlog,17,2
wtrunk,17,2
@@ -451,18 +361,10 @@ oaktreeleaves,18,4
oaklogleaves,18,4
oaktrunkleaves,18,4
oakwoodleaves,18,4
-normaltreeleaves,18,4
-normallogleaves,18,4
-normaltrunkleaves,18,4
-normalwoodleaves,18,4
otreeleaves,18,4
ologleaves,18,4
otrunkleaves,18,4
owoodleaves,18,4
-ntreeleaves,18,4
-nlogleaves,18,4
-ntrunkleaves,18,4
-nwoodleaves,18,4
treeleaf,18,4
logleaf,18,4
trunkleaf,18,4
@@ -471,44 +373,10 @@ oaktreeleaf,18,4
oaklogleaf,18,4
oaktrunkleaf,18,4
oakwoodleaf,18,4
-normaltreeleaf,18,4
-normallogleaf,18,4
-normaltrunkleaf,18,4
-normalwoodleaf,18,4
otreeleaf,18,4
ologleaf,18,4
otrunkleaf,18,4
owoodleaf,18,4
-ntreeleaf,18,4
-nlogleaf,18,4
-ntrunkleaf,18,4
-nwoodleaf,18,4
-pineleaves,18,5
-pineleaf,18,5
-pinetreeleaves,18,5
-pinelogleaves,18,5
-pinetrunkleaves,18,5
-pinewoodleaves,18,5
-ptreeleaves,18,5
-plogleaves,18,5
-ptrunkleaves,18,5
-pwoodleaves,18,5
-pitreeleaves,18,5
-pilogleaves,18,5
-pitrunkleaves,18,5
-piwoodleaves,18,5
-pinetreeleaf,18,5
-pinelogleaf,18,5
-pinetrunkleaf,18,5
-pinewoodleaf,18,5
-ptreeleaf,18,5
-plogleaf,18,5
-ptrunkleaf,18,5
-pwoodleaf,18,5
-pitreeleaf,18,5
-pilogleaf,18,5
-pitrunkleaf,18,5
-piwoodleaf,18,5
birchleaves,18,6
birchleaf,18,6
birchtreeleaves,18,6
@@ -636,9 +504,6 @@ grasswild,31,0
lgrass,31,0
tgrass,31,0
wgrass,31,0
-grassl,31,0
-grasst,31,0
-grassw,31,0
deadshrub,32,0
shrubdead,32,0
dshrub,32,0
@@ -659,28 +524,16 @@ pistonbase,33,7
piston,33,7
pistonblock,33,7
pistonextensionnormal,34,0
-pistonextensionnorm,34,0
-pistonextensionn,34,0
pistonextension,34,0
pistonextnormal,34,0
-pistonextnorm,34,0
-pistonextn,34,0
pistonext,34,0
pistonenormal,34,0
-pistonenorm,34,0
-pistonen,34,0
pistone,34,0
extensionpistonnormal,34,0
-extensionpistonnorm,34,0
-extensionpistonn,34,0
extensionpiston,34,0
extpistonnormal,34,0
-extpistonnorm,34,0
-extpistonn,34,0
extpiston,34,0
epistonnormal,34,0
-epistonnorm,34,0
-epistonn,34,0
episton,34,0
whitecloth,35,0
whitewool,35,0
@@ -881,19 +734,6 @@ dstonehalfblock,43,0
doubleshalfblock,43,0
doublehalfblock,43,0
dhalfblock,43,0
-smoothstonedoublehblock,43,0
-smoothstonedhblock,43,0
-stonedoublehblock,43,0
-stonedhblock,43,0
-sdoublehblock,43,0
-sdhblock,43,0
-doublesmoothstonehblock,43,0
-dsmoothstonehblock,43,0
-doublestonehblock,43,0
-dstonehblock,43,0
-doubleshblock,43,0
-doublehblock,43,0
-dhblock,43,0
sandstonedoublestep,43,1
sandstonedstep,43,1
sstonedoublestep,43,1
@@ -930,194 +770,90 @@ doublesstonehalfblock,43,1
dsstonehalfblock,43,1
doublesshalfblock,43,1
dsshalfblock,43,1
-sandstonedoublehblock,43,1
-sandstonedhblock,43,1
-sstonedoublehblock,43,1
-sstonedhblock,43,1
-ssdoublehblock,43,1
-ssdhblock,43,1
-doublesandstonehblock,43,1
-dsandstonehblock,43,1
-doublesstonehblock,43,1
-dsstonehblock,43,1
-doublesshblock,43,1
-dsshblock,43,1
-woodenplankdoublehalfblock,43,2
-woodenplankdhalfblock,43,2
-woodplankdoublehalfblock,43,2
-woodplankdhalfblock,43,2
-wplankdoublehalfblock,43,2
-wplankdhalfblock,43,2
-plankdoublehalfblock,43,2
-plankdhalfblock,43,2
-woodenpdoublehalfblock,43,2
-woodenpdhalfblock,43,2
-woodpdoublehalfblock,43,2
-woodpdhalfblock,43,2
-wpdoublehalfblock,43,2
-wpdhalfblock,43,2
-pdoublehalfblock,43,2
-pdhalfblock,43,2
-woodendoublehalfblock,43,2
-woodendhalfblock,43,2
-wooddoublehalfblock,43,2
-wooddhalfblock,43,2
-wdoublehalfblock,43,2
-wdhalfblock,43,2
-doublewoodenplankhalfblock,43,2
-dwoodenplankhalfblock,43,2
-doublewoodplankhalfblock,43,2
-dwoodplankhalfblock,43,2
-doublewplankhalfblock,43,2
-dwplankhalfblock,43,2
-doubleplankhalfblock,43,2
-dplankhalfblock,43,2
-doublewoodenphalfblock,43,2
-dwoodenphalfblock,43,2
-doublewoodphalfblock,43,2
-dwoodphalfblock,43,2
-doublewphalfblock,43,2
-dwphalfblock,43,2
-doublephalfblock,43,2
-dphalfblock,43,2
-doublewoodenhalfblock,43,2
-dwoodenhalfblock,43,2
-doublewoodhalfblock,43,2
-dwoodhalfblock,43,2
-doublewhalfblock,43,2
-dwhalfblock,43,2
-woodenplankdoublehblock,43,2
-woodenplankdhblock,43,2
-woodplankdoublehblock,43,2
-woodplankdhblock,43,2
-wplankdoublehblock,43,2
-wplankdhblock,43,2
-plankdoublehblock,43,2
-plankdhblock,43,2
-woodenpdoublehblock,43,2
-woodenpdhblock,43,2
-woodpdoublehblock,43,2
-woodpdhblock,43,2
-wpdoublehblock,43,2
-wpdhblock,43,2
-pdoublehblock,43,2
-pdhblock,43,2
-woodendoublehblock,43,2
-woodendhblock,43,2
-wooddoublehblock,43,2
-wooddhblock,43,2
-wdoublehblock,43,2
-wdhblock,43,2
-doublewoodenplankhblock,43,2
-dwoodenplankhblock,43,2
-doublewoodplankhblock,43,2
-dwoodplankhblock,43,2
-doublewplankhblock,43,2
-dwplankhblock,43,2
-doubleplankhblock,43,2
-dplankhblock,43,2
-doublewoodenphblock,43,2
-dwoodenphblock,43,2
-doublewoodphblock,43,2
-dwoodphblock,43,2
-doublewphblock,43,2
-dwphblock,43,2
-doublewoodenhblock,43,2
-dwoodenhblock,43,2
-doublewoodhblock,43,2
-dwoodhblock,43,2
-doublewhblock,43,2
-dwhblock,43,2
-doublephblock,43,2
-dphblock,43,2
-woodenplankdoublestep,43,2
-woodenplankdstep,43,2
-woodplankdoublestep,43,2
-woodplankdstep,43,2
-wplankdoublestep,43,2
-wplankdstep,43,2
-plankdoublestep,43,2
-plankdstep,43,2
-woodenpdoublestep,43,2
-woodenpdstep,43,2
-woodpdoublestep,43,2
-woodpdstep,43,2
-wpdoublestep,43,2
-wpdstep,43,2
-pdoublestep,43,2
-pdstep,43,2
-woodendoublestep,43,2
-woodendstep,43,2
-wooddoublestep,43,2
-wooddstep,43,2
-wdoublestep,43,2
-wdstep,43,2
-doublewoodenplankstep,43,2
-dwoodenplankstep,43,2
-doublewoodplankstep,43,2
-dwoodplankstep,43,2
-doublewplankstep,43,2
-dwplankstep,43,2
-doubleplankstep,43,2
-dplankstep,43,2
-doublewoodenpstep,43,2
-dwoodenpstep,43,2
-doublewoodpstep,43,2
-dwoodpstep,43,2
-doublewpstep,43,2
-dwpstep,43,2
-doublepstep,43,2
-dpstep,43,2
-doublewoodenstep,43,2
-dwoodenstep,43,2
-doublewoodstep,43,2
-dwoodstep,43,2
-doublewstep,43,2
-dwstep,43,2
-woodenplankdoubleslab,43,2
-woodenplankdslab,43,2
-woodplankdoubleslab,43,2
-woodplankdslab,43,2
-wplankdoubleslab,43,2
-wplankdslab,43,2
-plankdoubleslab,43,2
-plankdslab,43,2
-woodenpdoubleslab,43,2
-woodenpdslab,43,2
-woodpdoubleslab,43,2
-woodpdslab,43,2
-wpdoubleslab,43,2
-wpdslab,43,2
-pdoubleslab,43,2
-pdslab,43,2
-woodendoubleslab,43,2
-woodendslab,43,2
-wooddoubleslab,43,2
-wooddslab,43,2
-wdoubleslab,43,2
-wdslab,43,2
-doublewoodenplankslab,43,2
-dwoodenplankslab,43,2
-doublewoodplankslab,43,2
-dwoodplankslab,43,2
-doublewplankslab,43,2
-dwplankslab,43,2
-doubleplankslab,43,2
-dplankslab,43,2
-doublewoodenpslab,43,2
-dwoodenpslab,43,2
-doublewoodpslab,43,2
-dwoodpslab,43,2
-doublewpslab,43,2
-dwpslab,43,2
-doublewoodenslab,43,2
-dwoodenslab,43,2
-doublewoodslab,43,2
-dwoodslab,43,2
-doublewslab,43,2
-dwslab,43,2
-doublepslab,43,2
-dpslab,43,2
+woodenplankstonedoublehalfblock,43,2
+woodenplankstonedhalfblock,43,2
+woodplankstonedoublehalfblock,43,2
+woodplankstonedhalfblock,43,2
+wplankstonedoublehalfblock,43,2
+wplankstonedhalfblock,43,2
+plankstonedoublehalfblock,43,2
+planstonekdhalfblock,43,2
+woodenstonedoublehalfblock,43,2
+woodenstonedhalfblock,43,2
+woodstonedoublehalfblock,43,2
+woodstonedhalfblock,43,2
+wstonedoublehalfblock,43,2
+wstonedhalfblock,43,2
+doublewoodenplankstonehalfblock,43,2
+dwoodenplankstonehalfblock,43,2
+doublewoodplankstonehalfblock,43,2
+dwoodplankstonehalfblock,43,2
+doublewplankstonehalfblock,43,2
+dwplankstonehalfblock,43,2
+doubleplankstonehalfblock,43,2
+dplankstonehalfblock,43,2
+doublewoodenstonehalfblock,43,2
+dwoodenstonehalfblock,43,2
+doublewoodstonehalfblock,43,2
+dwoodstonehalfblock,43,2
+doublewstonehalfblock,43,2
+dwstonehalfblock,43,2
+woodenplankstonedoublestep,43,2
+woodenplankstonedstep,43,2
+woodplankstonedoublestep,43,2
+woodplankstonedstep,43,2
+wplankstonedoublestep,43,2
+wplankstonedstep,43,2
+plankstonedoublestep,43,2
+plankstonedstep,43,2
+woodenstonedoublestep,43,2
+woodenstonedstep,43,2
+woodstonedoublestep,43,2
+woodstonedstep,43,2
+wstonedoublestep,43,2
+wstonedstep,43,2
+doublewoodenplankstonestep,43,2
+dwoodenplankstonestep,43,2
+doublewoodplankstonestep,43,2
+dwoodplankstonestep,43,2
+doublewplankstonestep,43,2
+dwplankstonestep,43,2
+doubleplankstonestep,43,2
+dplankstonestep,43,2
+doublewoodenstonestep,43,2
+dwoodenstonestep,43,2
+doublewoodstonestep,43,2
+dwoodstonestep,43,2
+doublewstonestep,43,2
+dwstonestep,43,2
+woodenplankstonedoubleslab,43,2
+woodenplankstonedslab,43,2
+woodplankstonedoubleslab,43,2
+woodplankstonedslab,43,2
+wplankstonedoubleslab,43,2
+wplankstonedslab,43,2
+plankstonedoubleslab,43,2
+plankstonedslab,43,2
+woodenstonedoubleslab,43,2
+woodenstonedslab,43,2
+woodstonedoubleslab,43,2
+woodstonedslab,43,2
+wstonedoubleslab,43,2
+wstonedslab,43,2
+doublewoodenplankstoneslab,43,2
+dwoodenplankstoneslab,43,2
+doublewoodplankstoneslab,43,2
+dwoodplankstoneslab,43,2
+doublewplankstoneslab,43,2
+dwplankstoneslab,43,2
+doubleplankstoneslab,43,2
+dplankstoneslab,43,2
+doublewoodenstoneslab,43,2
+dwoodenstoneslab,43,2
+doublewoodstoneslab,43,2
+dwoodstoneslab,43,2
+doublewstoneslab,43,2
+dwstoneslab,43,2
cobblestonedoublestep,43,3
cobblestonedstep,43,3
cobbledoublestep,43,3
@@ -1166,22 +902,6 @@ doublecstonehalfblock,43,3
dcstonehalfblock,43,3
doublecshalfblock,43,3
dcshalfblock,43,3
-cobblestonedoublehblock,43,3
-cobblestonedhblock,43,3
-cobbledoublehblock,43,3
-cobbledhblock,43,3
-cstonedoublehblock,43,3
-cstonedhblock,43,3
-csdoublehblock,43,3
-csdhblock,43,3
-doublecobblestonehblock,43,3
-dcobblestonehblock,43,3
-doublecobblehblock,43,3
-dcobblehblock,43,3
-doublecstonehblock,43,3
-dcstonehblock,43,3
-doublecshblock,43,3
-dcshblock,43,3
brickblockdoublestep,43,4
brickblockdstep,43,4
brickbdoublestep,43,4
@@ -1222,14 +942,6 @@ brickdoublehalfblock,43,4
brickdhalfblock,43,4
bdoublehalfblock,43,4
bdhalfblock,43,4
-brickblockdoublehblock,43,4
-brickblockdhblock,43,4
-brickbdoublehblock,43,4
-brickbdhblock,43,4
-brickdoublehblock,43,4
-brickdhblock,43,4
-bdoublehblock,43,4
-bdhblock,43,4
doublebrickblockhalfblock,43,4
dbrickblockhalfblock,43,4
doublebrickbhalfblock,43,4
@@ -1238,14 +950,6 @@ doublebrickhalfblock,43,4
dbrickhalfblock,43,4
doublebhalfblock,43,4
dbhalfblock,43,4
-doublebrickblockhblock,43,4
-dbrickblockhblock,43,4
-doublebrickbhblock,43,4
-dbrickbhblock,43,4
-doublebrickhblock,43,4
-dbrickhblock,43,4
-doublebhblock,43,4
-dbhblock,43,4
stonebrickdoublestep,43,5
stonebrickdstep,43,5
stonebdoublestep,43,5
@@ -1286,14 +990,6 @@ sbrickdoublehalfblock,43,5
sbrickdhalfblock,43,5
sbdoublehalfblock,43,5
sbdhalfblock,43,5
-stonebrickdoublehblock,43,5
-stonebrickdhblock,43,5
-stonebdoublehblock,43,5
-stonebdhblock,43,5
-sbrickdoublehblock,43,5
-sbrickdhblock,43,5
-sbdoublehblock,43,5
-sbdhblock,43,5
doublestonebrickhalfblock,43,5
dstonebrickhalfblock,43,5
doublestonebhalfblock,43,5
@@ -1302,14 +998,6 @@ doublesbrickhalfblock,43,5
dsbrickhalfblock,43,5
doublesbhalfblock,43,5
dsbhalfblock,43,5
-doublestonebrickhblock,43,5
-dstonebrickhblock,43,5
-doublestonebhblock,43,5
-dstonebhblock,43,5
-doublesbrickhblock,43,5
-dsbrickdhblock,43,5
-doublesbhblock,43,5
-dsbhblock,43,5
adminslab,43,6
magicslab,43,6
adslab,43,6
@@ -1325,10 +1013,6 @@ smoothstonehalfblock,44,0
stonehalfblock,44,0
shalfblock,44,0
halfblock,44,0
-smoothstonehblock,44,0
-stonehblock,44,0
-shblock,44,0
-hblock,44,0
sanddstonestep,44,1
sstonestep,44,1
ssstep,44,1
@@ -1338,51 +1022,27 @@ ssslab,44,1
sanddstonehalfblock,44,1
sstonehalfblock,44,1
sshalfblock,44,1
-sanddstonehblock,44,1
-sstonehblock,44,1
-sshblock,44,1
-woodenplankstep,44,2
-woodplankstep,44,2
-wplankstep,44,2
-plankstep,44,2
-woodenpstep,44,2
-woodpstep,44,2
-wpstep,44,2
-woodenstep,44,2
-woodstep,44,2
-wstep,44,2
-pstep,44,2
-woodplankslab,44,2
-wplankslab,44,2
-plankslab,44,2
-woodenpslab,44,2
-woodpslab,44,2
-wpslab,44,2
-woodenslab,44,2
-woodslab,44,2
-wslab,44,2
-pslab,44,2
-woodenplankhalfblock,44,2
-woodplankhalfblock,44,2
-wplankhalfblock,44,2
-plankhalfblock,44,2
-woodenphalfblock,44,2
-woodphalfblock,44,2
-wphalfblock,44,2
-woodenhalfblock,44,2
-woodhalfblock,44,2
-whalfblock,44,2
-phalfblock,44,2
-woodplankhblock,44,2
-wplankhblock,44,2
-plankhblock,44,2
-woodenphblock,44,2
-woodphblock,44,2
-wphblock,44,2
-woodenhblock,44,2
-woodhblock,44,2
-whblock,44,2
-phblock,44,2
+woodenplankstonestep,44,2
+woodplankstonestep,44,2
+wplankstonestep,44,2
+plankstonestep,44,2
+woodenstonestep,44,2
+woodstonestep,44,2
+wstonestep,44,2
+woodenplankstoneslab,44,2
+woodplankstoneslab,44,2
+wplankstoneslab,44,2
+plankstoneslab,44,2
+woodenstoneslab,44,2
+woodstoneslab,44,2
+wstoneslab,44,2
+woodenplankstonehalfblock,44,2
+woodplankstonehalfblock,44,2
+wplankstonehalfblock,44,2
+plankstonehalfblock,44,2
+woodenstonehalfblock,44,2
+woodstonehalfblock,44,2
+wstonehalfblock,44,2
cobblestonestep,44,3
cobblestep,44,3
cstonestep,44,3
@@ -1395,10 +1055,6 @@ cobblestonehalfblock,44,3
cobblehalfblock,44,3
cstonehalfblock,44,3
cshalfblock,44,3
-cobblestonehblock,44,3
-cobblehblock,44,3
-cstonehblock,44,3
-cshblock,44,3
brickblockstep,44,4
brickbstep,44,4
brickstep,44,4
@@ -1411,10 +1067,6 @@ brickblockhalfblock,44,4
brickbhalfblock,44,4
brickhalfblock,44,4
bhalfblock,44,4
-brickblockhblock,44,4
-brickbhblock,44,4
-brickhblock,44,4
-bhblock,44,4
stonebrickstep,44,5
stonebstep,44,5
sbrickstep,44,5
@@ -1427,10 +1079,6 @@ stonebrickhalfblock,44,5
stonebhalfblock,44,5
sbrickhalfblock,44,5
sbhalfblock,44,5
-stonebrickhblock,44,5
-stonebhblock,44,5
-sbrickhblock,44,5
-sbhblock,44,5
brickblock,45,0
blockbrick,45,0
bblock,45,0
@@ -1460,6 +1108,8 @@ obsidian,49,0
obsi,49,0
obby,49,0
torch,50,0
+burningstick,50,0
+burnstick,50,0
fire,51,0
flame,51,0
flames,51,0
@@ -1477,13 +1127,8 @@ wstairs,53,0
woodenstair,53,0
woodstair,53,0
wstair,53,0
-stairswooden,53,0
-stairswood,53,0
-stairsw,53,0
-stairwooden,53,0
-stairwood,53,0
-stairw,53,0
chest,54,0
+container,54,0
redstonewireblock,55,0
rstonewireblock,55,0
redswireblock,55,0
@@ -1563,20 +1208,6 @@ cobblestair,67,0
csstair,67,0
sstair,67,0
cstair,67,0
-stairscobblestone,67,0
-stairscstone,67,0
-stairsstone,67,0
-stairscobble,67,0
-stairscs,67,0
-stairss,67,0
-stairsc,67,0
-staircobblestone,67,0
-staircstone,67,0
-stairstone,67,0
-staircobble,67,0
-staircs,67,0
-stairs,67,0
-stairc,67,0
wallsign,68,0
wsign,68,0
lever,69,0
@@ -1688,6 +1319,10 @@ snowcovering,78,0
snowcover,78,0
scover,78,0
ice,79,0
+frozenwater,79,0
+waterfrozen,79,0
+freezewater,79,0
+waterfreeze,79,0
snowblock,80,0
blocksnow,80,0
sblock,80,0
@@ -1799,14 +1434,60 @@ tdoor,96,0
doort,96,0
trapd,96,0
dtrap,96,0
-silverstone,97,0
-silverfishstone,97,0
-silverfishs,97,0
-sfstone,97,0
-stonesilverfish,97,0
-fishstone,97,0
-trapstone,97,0
silverfish,97,0
+monstereggsmoothstone,97,0
+monstereggsstone,97,0
+meggsmoothstone,97,0
+meggsstone,97,0
+mesmoothstone,97,0
+messtone,97,0
+silverfishsmoothstone,97,0
+silverfishsstone,97,0
+silverfishstone,97,0
+sfishsmoothstone,97,0
+sfishsstone,97,0
+sfishstone,97,0
+fishsmoothstone,97,0
+fishsstone,97,0
+fishstone,97,0
+sfsmoothstone,97,0
+sfsstone,97,0
+sfstone,97,0
+trapsmoothstone,97,0
+trapsstone,97,0
+trapstone,97,0
+monstereggcobblestone,97,1
+monstereggcstone,97,1
+meggcobblestone,97,1
+meggcstone,97,1
+mecobblestone,97,1
+mecstone,97,1
+silverfishcobblestone,97,1
+silverfishcstone,97,1
+sfishcobblestone,97,1
+sfishcstone,97,1
+fishcobblestone,97,1
+fishcstone,97,1
+sfcobblestone,97,1
+sfcstone,97,1
+trapcobblestone,97,1
+trapcstone,97,1
+monstereggstonebrick,97,2
+monstereggsbrick,97,2
+meggstonebrick,97,2
+meggsbrick,97,2
+mestonebrick,97,2
+mesbrick,97,2
+silverfishstonebrick,97,2
+silverfishsbrick,97,2
+sfishstonebrick,97,2
+sfishsbrick,97,2
+fishstonebrick,97,2
+fishsbrick,97,2
+sfstonebrick,97,2
+sfsbrick,97,2
+trapstonebrick,97,2
+trapsbrick,97,2
stonebrick,98,0
stonebricks,98,0
stonebrickblock,98,0
@@ -1918,19 +1599,6 @@ redbstair,108,0
rbrickstair,108,0
bstair,108,0
redstair,108,0
-stairsbrick,108,0
-stairsredbrick,108,0
-stairsredb,108,0
-stairsrbrick,108,0
-stairsb,108,0
-stairsred,108,0
-stairbrick,108,0
-stairredbrick,108,0
-stairredb,108,0
-stairrbrick,108,0
-stairb,108,0
-stairred,108,0
-stairsstonebrick,109,0
stonebrickstairs,109,0
stonebstairs,109,0
sbstairs,109,0
@@ -2071,6 +1739,8 @@ endrock,121,0
enderrock,121,0
erock,121,0
estone,121,0
+enderdragonegg,122,0
+endegg,122,0
dragonegg,122,0
degg,122,0
bossegg,122,0
@@ -2084,6 +1754,1045 @@ rslampoff,123,0
redstonelampon,124,0
redlampon,124,0
rslampon,124,0
+woodenplankdoublehalfblock,125,0
+woodenplankdhalfblock,125,0
+woodplankdoublehalfblock,125,0
+woodplankdhalfblock,125,0
+wplankdoublehalfblock,125,0
+wplankdhalfblock,125,0
+plankdoublehalfblock,125,0
+plankdhalfblock,125,0
+woodendoublehalfblock,125,0
+woodendhalfblock,125,0
+wooddoublehalfblock,125,0
+wooddhalfblock,125,0
+wdoublehalfblock,125,0
+wdhalfblock,125,0
+doublewoodenplankhalfblock,125,0
+dwoodenplankhalfblock,125,0
+doublewoodplankhalfblock,125,0
+dwoodplankhalfblock,125,0
+doublewplankhalfblock,125,0
+dwplankhalfblock,125,0
+doubleplankhalfblock,125,0
+dplankhalfblock,125,0
+doublewoodenhalfblock,125,0
+dwoodenhalfblock,125,0
+doublewoodhalfblock,125,0
+dwoodhalfblock,125,0
+doublewhalfblock,125,0
+dwhalfblock,125,0
+woodenplankdoublestep,125,0
+woodenplankdstep,125,0
+woodplankdoublestep,125,0
+woodplankdstep,125,0
+wplankdoublestep,125,0
+wplankdstep,125,0
+plankdoublestep,125,0
+plankdstep,125,0
+woodendoublestep,125,0
+woodendstep,125,0
+wooddoublestep,125,0
+wooddstep,125,0
+wdoublestep,125,0
+wdstep,125,0
+doublewoodenplankstep,125,0
+dwoodenplankstep,125,0
+doublewoodplankstep,125,0
+dwoodplankstep,125,0
+doublewplankstep,125,0
+dwplankstep,125,0
+doubleplankstep,125,0
+dplankstep,125,0
+doublewoodenstep,125,0
+dwoodenstep,125,0
+doublewoodstep,125,0
+dwoodstep,125,0
+doublewstep,125,0
+dwstep,125,0
+woodenplankdoubleslab,125,0
+woodenplankdslab,125,0
+woodplankdoubleslab,125,0
+woodplankdslab,125,0
+wplankdoubleslab,125,0
+wplankdslab,125,0
+plankdoubleslab,125,0
+plankdslab,125,0
+woodendoubleslab,125,0
+woodendslab,125,0
+wooddoubleslab,125,0
+wooddslab,125,0
+wdoubleslab,125,0
+wdslab,125,0
+doublewoodenplankslab,125,0
+dwoodenplankslab,125,0
+doublewoodplankslab,125,0
+dwoodplankslab,125,0
+doublewplankslab,125,0
+dwplankslab,125,0
+doubleplankslab,125,0
+dplankslab,125,0
+doublewoodenslab,125,0
+dwoodenslab,125,0
+doublewoodslab,125,0
+dwoodslab,125,0
+doublewslab,125,0
+dwslab,125,0
+oakwoodenplankdoublehalfblock,125,0
+oakwoodenplankdhalfblock,125,0
+oakwoodplankdoublehalfblock,125,0
+oakwoodplankdhalfblock,125,0
+oakwplankdoublehalfblock,125,0
+oakwplankdhalfblock,125,0
+oakplankdoublehalfblock,125,0
+oakplankdhalfblock,125,0
+oakwoodendoublehalfblock,125,0
+oakwoodendhalfblock,125,0
+oakwooddoublehalfblock,125,0
+oakwooddhalfblock,125,0
+oakwdoublehalfblock,125,0
+oakwdhalfblock,125,0
+oakdoublewoodenplankhalfblock,125,0
+oakdwoodenplankhalfblock,125,0
+oakdoublewoodplankhalfblock,125,0
+oakdwoodplankhalfblock,125,0
+oakdoublewplankhalfblock,125,0
+oakdwplankhalfblock,125,0
+oakdoubleplankhalfblock,125,0
+oakdplankhalfblock,125,0
+oakdoublewoodenhalfblock,125,0
+oakdwoodenhalfblock,125,0
+oakdoublewoodhalfblock,125,0
+oakdwoodhalfblock,125,0
+oakdoublewhalfblock,125,0
+oakdwhalfblock,125,0
+oakdoublehalfblock,125,0
+oakdhalfblock,125,0
+oakwoodenplankdoublestep,125,0
+oakwoodenplankdstep,125,0
+oakwoodplankdoublestep,125,0
+oakwoodplankdstep,125,0
+oakwplankdoublestep,125,0
+oakwplankdstep,125,0
+oakplankdoublestep,125,0
+oakplankdstep,125,0
+oakwoodendoublestep,125,0
+oakwoodendstep,125,0
+oakwooddoublestep,125,0
+oakwooddstep,125,0
+oakwdoublestep,125,0
+oakwdstep,125,0
+oakdoublewoodenplankstep,125,0
+oakdwoodenplankstep,125,0
+oakdoublewoodplankstep,125,0
+oakdwoodplankstep,125,0
+oakdoublewplankstep,125,0
+oakdwplankstep,125,0
+oakdoubleplankstep,125,0
+oakdplankstep,125,0
+oakdoublewoodenstep,125,0
+oakdwoodenstep,125,0
+oakdoublewoodstep,125,0
+oakdwoodstep,125,0
+oakdoublewstep,125,0
+oakdwstep,125,0
+oakdoublestep,125,0
+oakdstep,125,0
+oakwoodenplankdoubleslab,125,0
+oakwoodenplankdslab,125,0
+oakwoodplankdoubleslab,125,0
+oakwoodplankdslab,125,0
+oakwplankdoubleslab,125,0
+oakwplankdslab,125,0
+oakplankdoubleslab,125,0
+oakplankdslab,125,0
+oakwoodendoubleslab,125,0
+oakwoodendslab,125,0
+oakwooddoubleslab,125,0
+oakwooddslab,125,0
+oakwdoubleslab,125,0
+oakwdslab,125,0
+oakdoublewoodenplankslab,125,0
+oakdwoodenplankslab,125,0
+oakdoublewoodplankslab,125,0
+oakdwoodplankslab,125,0
+oakdoublewplankslab,125,0
+oakdwplankslab,125,0
+oakdoubleplankslab,125,0
+oakdplankslab,125,0
+oakdoublewoodenslab,125,0
+oakdwoodenslab,125,0
+oakdoublewoodslab,125,0
+oakdwoodslab,125,0
+oakdoublewslab,125,0
+oakdwslab,125,0
+oakdoubleslab,125,0
+oakdslab,125,0
+sprucewoodenplankdoublehalfblock,125,1
+sprucewoodenplankdhalfblock,125,1
+sprucewoodplankdoublehalfblock,125,1
+sprucewoodplankdhalfblock,125,1
+sprucewplankdoublehalfblock,125,1
+sprucewplankdhalfblock,125,1
+spruceplankdoublehalfblock,125,1
+spruceplankdhalfblock,125,1
+sprucewoodendoublehalfblock,125,1
+sprucewoodendhalfblock,125,1
+sprucewooddoublehalfblock,125,1
+sprucewooddhalfblock,125,1
+sprucewdoublehalfblock,125,1
+sprucewdhalfblock,125,1
+sprucedoublewoodenplankhalfblock,125,1
+sprucedwoodenplankhalfblock,125,1
+sprucedoublewoodplankhalfblock,125,1
+sprucedwoodplankhalfblock,125,1
+sprucedoublewplankhalfblock,125,1
+sprucedwplankhalfblock,125,1
+sprucedoubleplankhalfblock,125,1
+sprucedplankhalfblock,125,1
+sprucedoublewoodenhalfblock,125,1
+sprucedwoodenhalfblock,125,1
+sprucedoublewoodhalfblock,125,1
+sprucedwoodhalfblock,125,1
+sprucedoublewhalfblock,125,1
+sprucedwhalfblock,125,1
+sprucedoublehalfblock,125,1
+sprucedhalfblock,125,1
+sprucewoodenplankdoublestep,125,1
+sprucewoodenplankdstep,125,1
+sprucewoodplankdoublestep,125,1
+sprucewoodplankdstep,125,1
+sprucewplankdoublestep,125,1
+sprucewplankdstep,125,1
+spruceplankdoublestep,125,1
+spruceplankdstep,125,1
+sprucewoodendoublestep,125,1
+sprucewoodendstep,125,1
+sprucewooddoublestep,125,1
+sprucewooddstep,125,1
+sprucewdoublestep,125,1
+sprucewdstep,125,1
+sprucedoublewoodenplankstep,125,1
+sprucedwoodenplankstep,125,1
+sprucedoublewoodplankstep,125,1
+sprucedwoodplankstep,125,1
+sprucedoublewplankstep,125,1
+sprucedwplankstep,125,1
+sprucedoubleplankstep,125,1
+sprucedplankstep,125,1
+sprucedoublewoodenstep,125,1
+sprucedwoodenstep,125,1
+sprucedoublewoodstep,125,1
+sprucedwoodstep,125,1
+sprucedoublewstep,125,1
+sprucedwstep,125,1
+sprucedoublestep,125,1
+sprucedstep,125,1
+sprucewoodenplankdoubleslab,125,1
+sprucewoodenplankdslab,125,1
+sprucewoodplankdoubleslab,125,1
+sprucewoodplankdslab,125,1
+sprucewplankdoubleslab,125,1
+sprucewplankdslab,125,1
+spruceplankdoubleslab,125,1
+spruceplankdslab,125,1
+sprucewoodendoubleslab,125,1
+sprucewoodendslab,125,1
+sprucewooddoubleslab,125,1
+sprucewooddslab,125,1
+sprucewdoubleslab,125,1
+sprucewdslab,125,1
+sprucedoublewoodenplankslab,125,1
+sprucedwoodenplankslab,125,1
+sprucedoublewoodplankslab,125,1
+sprucedwoodplankslab,125,1
+sprucedoublewplankslab,125,1
+sprucedwplankslab,125,1
+sprucedoubleplankslab,125,1
+sprucedplankslab,125,1
+sprucedoublewoodenslab,125,1
+sprucedwoodenslab,125,1
+sprucedoublewoodslab,125,1
+sprucedwoodslab,125,1
+sprucedoublewslab,125,1
+sprucedwslab,125,1
+sprucedoubleslab,125,1
+sprucedslab,125,1
+darkwoodenplankdoublehalfblock,125,1
+darkwoodenplankdhalfblock,125,1
+darkwoodplankdoublehalfblock,125,1
+darkwoodplankdhalfblock,125,1
+darkwplankdoublehalfblock,125,1
+darkwplankdhalfblock,125,1
+darkplankdoublehalfblock,125,1
+darkplankdhalfblock,125,1
+darkwoodendoublehalfblock,125,1
+darkwoodendhalfblock,125,1
+darkwooddoublehalfblock,125,1
+darkwooddhalfblock,125,1
+darkwdoublehalfblock,125,1
+darkwdhalfblock,125,1
+darkdoublewoodenplankhalfblock,125,1
+darkdwoodenplankhalfblock,125,1
+darkdoublewoodplankhalfblock,125,1
+darkdwoodplankhalfblock,125,1
+darkdoublewplankhalfblock,125,1
+darkdwplankhalfblock,125,1
+darkdoubleplankhalfblock,125,1
+darkdplankhalfblock,125,1
+darkdoublewoodenhalfblock,125,1
+darkdwoodenhalfblock,125,1
+darkdoublewoodhalfblock,125,1
+darkdwoodhalfblock,125,1
+darkdoublewhalfblock,125,1
+darkdwhalfblock,125,1
+darkdoublehalfblock,125,1
+darkdhalfblock,125,1
+darkwoodenplankdoublestep,125,1
+darkwoodenplankdstep,125,1
+darkwoodplankdoublestep,125,1
+darkwoodplankdstep,125,1
+darkwplankdoublestep,125,1
+darkwplankdstep,125,1
+darkplankdoublestep,125,1
+darkplankdstep,125,1
+darkwoodendoublestep,125,1
+darkwoodendstep,125,1
+darkwooddoublestep,125,1
+darkwooddstep,125,1
+darkwdoublestep,125,1
+darkwdstep,125,1
+darkdoublewoodenplankstep,125,1
+darkdwoodenplankstep,125,1
+darkdoublewoodplankstep,125,1
+darkdwoodplankstep,125,1
+darkdoublewplankstep,125,1
+darkdwplankstep,125,1
+darkdoubleplankstep,125,1
+darkdplankstep,125,1
+darkdoublewoodenstep,125,1
+darkdwoodenstep,125,1
+darkdoublewoodstep,125,1
+darkdwoodstep,125,1
+darkdoublewstep,125,1
+darkdwstep,125,1
+darkdoublestep,125,1
+darkdstep,125,1
+darkwoodenplankdoubleslab,125,1
+darkwoodenplankdslab,125,1
+darkwoodplankdoubleslab,125,1
+darkwoodplankdslab,125,1
+darkwplankdoubleslab,125,1
+darkwplankdslab,125,1
+darkplankdoubleslab,125,1
+darkplankdslab,125,1
+darkwoodendoubleslab,125,1
+darkwoodendslab,125,1
+darkwooddoubleslab,125,1
+darkwooddslab,125,1
+darkwdoubleslab,125,1
+darkwdslab,125,1
+darkdoublewoodenplankslab,125,1
+darkdwoodenplankslab,125,1
+darkdoublewoodplankslab,125,1
+darkdwoodplankslab,125,1
+darkdoublewplankslab,125,1
+darkdwplankslab,125,1
+darkdoubleplankslab,125,1
+darkdplankslab,125,1
+darkdoublewoodenslab,125,1
+darkdwoodenslab,125,1
+darkdoublewoodslab,125,1
+darkdwoodslab,125,1
+darkdoublewslab,125,1
+darkdwslab,125,1
+darkdoubleslab,125,1
+darkdslab,125,1
+birchwoodenplankdoublehalfblock,125,2
+birchwoodenplankdhalfblock,125,2
+birchwoodplankdoublehalfblock,125,2
+birchwoodplankdhalfblock,125,2
+birchwplankdoublehalfblock,125,2
+birchwplankdhalfblock,125,2
+birchplankdoublehalfblock,125,2
+birchplankdhalfblock,125,2
+birchwoodendoublehalfblock,125,2
+birchwoodendhalfblock,125,2
+birchwooddoublehalfblock,125,2
+birchwooddhalfblock,125,2
+birchwdoublehalfblock,125,2
+birchwdhalfblock,125,2
+birchdoublewoodenplankhalfblock,125,2
+birchdwoodenplankhalfblock,125,2
+birchdoublewoodplankhalfblock,125,2
+birchdwoodplankhalfblock,125,2
+birchdoublewplankhalfblock,125,2
+birchdwplankhalfblock,125,2
+birchdoubleplankhalfblock,125,2
+birchdplankhalfblock,125,2
+birchdoublewoodenhalfblock,125,2
+birchdwoodenhalfblock,125,2
+birchdoublewoodhalfblock,125,2
+birchdwoodhalfblock,125,2
+birchdoublewhalfblock,125,2
+birchdwhalfblock,125,2
+birchdoublehalfblock,125,2
+birchdhalfblock,125,2
+birchwoodenplankdoublestep,125,2
+birchwoodenplankdstep,125,2
+birchwoodplankdoublestep,125,2
+birchwoodplankdstep,125,2
+birchwplankdoublestep,125,2
+birchwplankdstep,125,2
+birchplankdoublestep,125,2
+birchplankdstep,125,2
+birchwoodendoublestep,125,2
+birchwoodendstep,125,2
+birchwooddoublestep,125,2
+birchwooddstep,125,2
+birchwdoublestep,125,2
+birchwdstep,125,2
+birchdoublewoodenplankstep,125,2
+birchdwoodenplankstep,125,2
+birchdoublewoodplankstep,125,2
+birchdwoodplankstep,125,2
+birchdoublewplankstep,125,2
+birchdwplankstep,125,2
+birchdoubleplankstep,125,2
+birchdplankstep,125,2
+birchdoublewoodenstep,125,2
+birchdwoodenstep,125,2
+birchdoublewoodstep,125,2
+birchdwoodstep,125,2
+birchdoublewstep,125,2
+birchdwstep,125,2
+birchdoublestep,125,2
+birchdstep,125,2
+birchwoodenplankdoubleslab,125,2
+birchwoodenplankdslab,125,2
+birchwoodplankdoubleslab,125,2
+birchwoodplankdslab,125,2
+birchwplankdoubleslab,125,2
+birchwplankdslab,125,2
+birchplankdoubleslab,125,2
+birchplankdslab,125,2
+birchwoodendoubleslab,125,2
+birchwoodendslab,125,2
+birchwooddoubleslab,125,2
+birchwooddslab,125,2
+birchwdoubleslab,125,2
+birchwdslab,125,2
+birchdoublewoodenplankslab,125,2
+birchdwoodenplankslab,125,2
+birchdoublewoodplankslab,125,2
+birchdwoodplankslab,125,2
+birchdoublewplankslab,125,2
+birchdwplankslab,125,2
+birchdoubleplankslab,125,2
+birchdplankslab,125,2
+birchdoublewoodenslab,125,2
+birchdwoodenslab,125,2
+birchdoublewoodslab,125,2
+birchdwoodslab,125,2
+birchdoublewslab,125,2
+birchdwslab,125,2
+birchdoubleslab,125,2
+birchdslab,125,2
+lightwoodenplankdoublehalfblock,125,2
+lightwoodenplankdhalfblock,125,2
+lightwoodplankdoublehalfblock,125,2
+lightwoodplankdhalfblock,125,2
+lightwplankdoublehalfblock,125,2
+lightwplankdhalfblock,125,2
+lightplankdoublehalfblock,125,2
+lightplankdhalfblock,125,2
+lightwoodendoublehalfblock,125,2
+lightwoodendhalfblock,125,2
+lightwooddoublehalfblock,125,2
+lightwooddhalfblock,125,2
+lightwdoublehalfblock,125,2
+lightwdhalfblock,125,2
+lightdoublewoodenplankhalfblock,125,2
+lightdwoodenplankhalfblock,125,2
+lightdoublewoodplankhalfblock,125,2
+lightdwoodplankhalfblock,125,2
+lightdoublewplankhalfblock,125,2
+lightdwplankhalfblock,125,2
+lightdoubleplankhalfblock,125,2
+lightdplankhalfblock,125,2
+lightdoublewoodenhalfblock,125,2
+lightdwoodenhalfblock,125,2
+lightdoublewoodhalfblock,125,2
+lightdwoodhalfblock,125,2
+lightdoublewhalfblock,125,2
+lightdwhalfblock,125,2
+lightdoublehalfblock,125,2
+lightdhalfblock,125,2
+lightwoodenplankdoublestep,125,2
+lightwoodenplankdstep,125,2
+lightwoodplankdoublestep,125,2
+lightwoodplankdstep,125,2
+lightwplankdoublestep,125,2
+lightwplankdstep,125,2
+lightplankdoublestep,125,2
+lightplankdstep,125,2
+lightwoodendoublestep,125,2
+lightwoodendstep,125,2
+lightwooddoublestep,125,2
+lightwooddstep,125,2
+lightwdoublestep,125,2
+lightwdstep,125,2
+lightdoublewoodenplankstep,125,2
+lightdwoodenplankstep,125,2
+lightdoublewoodplankstep,125,2
+lightdwoodplankstep,125,2
+lightdoublewplankstep,125,2
+lightdwplankstep,125,2
+lightdoubleplankstep,125,2
+lightdplankstep,125,2
+lightdoublewoodenstep,125,2
+lightdwoodenstep,125,2
+lightdoublewoodstep,125,2
+lightdwoodstep,125,2
+lightdoublewstep,125,2
+lightdwstep,125,2
+lightdoublestep,125,2
+lightdstep,125,2
+lightwoodenplankdoubleslab,125,2
+lightwoodenplankdslab,125,2
+lightwoodplankdoubleslab,125,2
+lightwoodplankdslab,125,2
+lightwplankdoubleslab,125,2
+lightwplankdslab,125,2
+lightplankdoubleslab,125,2
+lightplankdslab,125,2
+lightwoodendoubleslab,125,2
+lightwoodendslab,125,2
+lightwooddoubleslab,125,2
+lightwooddslab,125,2
+lightwdoubleslab,125,2
+lightwdslab,125,2
+lightdoublewoodenplankslab,125,2
+lightdwoodenplankslab,125,2
+lightdoublewoodplankslab,125,2
+lightdwoodplankslab,125,2
+lightdoublewplankslab,125,2
+lightdwplankslab,125,2
+lightdoubleplankslab,125,2
+lightdplankslab,125,2
+lightdoublewoodenslab,125,2
+lightdwoodenslab,125,2
+lightdoublewoodslab,125,2
+lightdwoodslab,125,2
+lightdoublewslab,125,2
+lightdwslab,125,2
+lightdoubleslab,125,2
+lightdslab,125,2
+junglewoodenplankdoublehalfblock,125,3
+junglewoodenplankdhalfblock,125,3
+junglewoodplankdoublehalfblock,125,3
+junglewoodplankdhalfblock,125,3
+junglewplankdoublehalfblock,125,3
+junglewplankdhalfblock,125,3
+jungleplankdoublehalfblock,125,3
+jungleplankdhalfblock,125,3
+junglewoodendoublehalfblock,125,3
+junglewoodendhalfblock,125,3
+junglewooddoublehalfblock,125,3
+junglewooddhalfblock,125,3
+junglewdoublehalfblock,125,3
+junglewdhalfblock,125,3
+jungledoublewoodenplankhalfblock,125,3
+jungledwoodenplankhalfblock,125,3
+jungledoublewoodplankhalfblock,125,3
+jungledwoodplankhalfblock,125,3
+jungledoublewplankhalfblock,125,3
+jungledwplankhalfblock,125,3
+jungledoubleplankhalfblock,125,3
+jungledplankhalfblock,125,3
+jungledoublewoodenhalfblock,125,3
+jungledwoodenhalfblock,125,3
+jungledoublewoodhalfblock,125,3
+jungledwoodhalfblock,125,3
+jungledoublewhalfblock,125,3
+jungledwhalfblock,125,3
+jungledoublehalfblock,125,3
+jungledhalfblock,125,3
+junglewoodenplankdoublestep,125,3
+junglewoodenplankdstep,125,3
+junglewoodplankdoublestep,125,3
+junglewoodplankdstep,125,3
+junglewplankdoublestep,125,3
+junglewplankdstep,125,3
+jungleplankdoublestep,125,3
+jungleplankdstep,125,3
+junglewoodendoublestep,125,3
+junglewoodendstep,125,3
+junglewooddoublestep,125,3
+junglewooddstep,125,3
+junglewdoublestep,125,3
+junglewdstep,125,3
+jungledoublewoodenplankstep,125,3
+jungledwoodenplankstep,125,3
+jungledoublewoodplankstep,125,3
+jungledwoodplankstep,125,3
+jungledoublewplankstep,125,3
+jungledwplankstep,125,3
+jungledoubleplankstep,125,3
+jungledplankstep,125,3
+jungledoublewoodenstep,125,3
+jungledwoodenstep,125,3
+jungledoublewoodstep,125,3
+jungledwoodstep,125,3
+jungledoublewstep,125,3
+jungledwstep,125,3
+jungledoublestep,125,3
+jungledstep,125,3
+junglewoodenplankdoubleslab,125,3
+junglewoodenplankdslab,125,3
+junglewoodplankdoubleslab,125,3
+junglewoodplankdslab,125,3
+junglewplankdoubleslab,125,3
+junglewplankdslab,125,3
+jungleplankdoubleslab,125,3
+jungleplankdslab,125,3
+junglewoodendoubleslab,125,3
+junglewoodendslab,125,3
+junglewooddoubleslab,125,3
+junglewooddslab,125,3
+junglewdoubleslab,125,3
+junglewdslab,125,3
+jungledoublewoodenplankslab,125,3
+jungledwoodenplankslab,125,3
+jungledoublewoodplankslab,125,3
+jungledwoodplankslab,125,3
+jungledoublewplankslab,125,3
+jungledwplankslab,125,3
+jungledoubleplankslab,125,3
+jungledplankslab,125,3
+jungledoublewoodenslab,125,3
+jungledwoodenslab,125,3
+jungledoublewoodslab,125,3
+jungledwoodslab,125,3
+jungledoublewslab,125,3
+jungledwslab,125,3
+jungledoubleslab,125,3
+jungledslab,125,3
+forestwoodenplankdoublehalfblock,125,3
+forestwoodenplankdhalfblock,125,3
+forestwoodplankdoublehalfblock,125,3
+forestwoodplankdhalfblock,125,3
+forestwplankdoublehalfblock,125,3
+forestwplankdhalfblock,125,3
+forestplankdoublehalfblock,125,3
+forestplankdhalfblock,125,3
+forestwoodendoublehalfblock,125,3
+forestwoodendhalfblock,125,3
+forestwooddoublehalfblock,125,3
+forestwooddhalfblock,125,3
+forestwdoublehalfblock,125,3
+forestwdhalfblock,125,3
+forestdoublewoodenplankhalfblock,125,3
+forestdwoodenplankhalfblock,125,3
+forestdoublewoodplankhalfblock,125,3
+forestdwoodplankhalfblock,125,3
+forestdoublewplankhalfblock,125,3
+forestdwplankhalfblock,125,3
+forestdoubleplankhalfblock,125,3
+forestdplankhalfblock,125,3
+forestdoublewoodenhalfblock,125,3
+forestdwoodenhalfblock,125,3
+forestdoublewoodhalfblock,125,3
+forestdwoodhalfblock,125,3
+forestdoublewhalfblock,125,3
+forestdwhalfblock,125,3
+forestdoublehalfblock,125,3
+forestdhalfblock,125,3
+forestwoodenplankdoublestep,125,3
+forestwoodenplankdstep,125,3
+forestwoodplankdoublestep,125,3
+forestwoodplankdstep,125,3
+forestwplankdoublestep,125,3
+forestwplankdstep,125,3
+forestplankdoublestep,125,3
+forestplankdstep,125,3
+forestwoodendoublestep,125,3
+forestwoodendstep,125,3
+forestwooddoublestep,125,3
+forestwooddstep,125,3
+forestwdoublestep,125,3
+forestwdstep,125,3
+forestdoublewoodenplankstep,125,3
+forestdwoodenplankstep,125,3
+forestdoublewoodplankstep,125,3
+forestdwoodplankstep,125,3
+forestdoublewplankstep,125,3
+forestdwplankstep,125,3
+forestdoubleplankstep,125,3
+forestdplankstep,125,3
+forestdoublewoodenstep,125,3
+forestdwoodenstep,125,3
+forestdoublewoodstep,125,3
+forestdwoodstep,125,3
+forestdoublewstep,125,3
+forestdwstep,125,3
+forestdoublestep,125,3
+forestdstep,125,3
+forestwoodenplankdoubleslab,125,3
+forestwoodenplankdslab,125,3
+forestwoodplankdoubleslab,125,3
+forestwoodplankdslab,125,3
+forestwplankdoubleslab,125,3
+forestwplankdslab,125,3
+forestplankdoubleslab,125,3
+forestplankdslab,125,3
+forestwoodendoubleslab,125,3
+forestwoodendslab,125,3
+forestwooddoubleslab,125,3
+forestwooddslab,125,3
+forestwdoubleslab,125,3
+forestwdslab,125,3
+forestdoublewoodenplankslab,125,3
+forestdwoodenplankslab,125,3
+forestdoublewoodplankslab,125,3
+forestdwoodplankslab,125,3
+forestdoublewplankslab,125,3
+forestdwplankslab,125,3
+forestdoubleplankslab,125,3
+forestdplankslab,125,3
+forestdoublewoodenslab,125,3
+forestdwoodenslab,125,3
+forestdoublewoodslab,125,3
+forestdwoodslab,125,3
+forestdoublewslab,125,3
+forestdwslab,125,3
+forestdoubleslab,125,3
+forestdslab,125,3
+woodenplankstep,126,0
+woodplankstep,126,0
+wplankstep,126,0
+plankstep,126,0
+woodenstep,126,0
+woodstep,126,0
+wstep,126,0
+woodenplankslab,126,0
+woodplankslab,126,0
+wplankslab,126,0
+plankslab,126,0
+woodenslab,126,0
+woodslab,126,0
+wslab,126,0
+woodenplankhalfblock,126,0
+woodplankhalfblock,126,0
+wplankhalfblock,126,0
+plankhalfblock,126,0
+woodenhalfblock,126,0
+woodhalfblock,126,0
+whalfblock,126,0
+oakwoodenplankstep,126,0
+oakwoodplankstep,126,0
+oakwplankstep,126,0
+oakplankstep,126,0
+oakwoodenstep,126,0
+oakwoodstep,126,0
+oakwstep,126,0
+oakstep,126,0
+oakwoodenplankslab,126,0
+oakwoodplankslab,126,0
+oakwplankslab,126,0
+oakplankslab,126,0
+oakwoodenslab,126,0
+oakwoodslab,126,0
+oakwslab,126,0
+oakslab,126,0
+oakwoodenplankhalfblock,126,0
+oakwoodplankhalfblock,126,0
+oakwplankhalfblock,126,0
+oakplankhalfblock,126,0
+oakwoodenhalfblock,126,0
+oakwoodhalfblock,126,0
+oakwhalfblock,126,0
+oakhalfblock,126,0
+sprucewoodenplankstep,126,1
+sprucewoodplankstep,126,1
+sprucewplankstep,126,1
+spruceplankstep,126,1
+sprucewoodenstep,126,1
+sprucewoodstep,126,1
+sprucewstep,126,1
+sprucestep,126,1
+sprucewoodenplankslab,126,1
+sprucewoodplankslab,126,1
+sprucewplankslab,126,1
+spruceplankslab,126,1
+sprucewoodenslab,126,1
+sprucewoodslab,126,1
+sprucewslab,126,1
+spruceslab,126,1
+sprucewoodenplankhalfblock,126,1
+sprucewoodplankhalfblock,126,1
+sprucewplankhalfblock,126,1
+spruceplankhalfblock,126,1
+sprucewoodenhalfblock,126,1
+sprucewoodhalfblock,126,1
+sprucewhalfblock,126,1
+sprucehalfblock,126,1
+darkwoodenplankstep,126,1
+darkwoodplankstep,126,1
+darkwplankstep,126,1
+darkplankstep,126,1
+darkwoodenstep,126,1
+darkwoodstep,126,1
+darkwstep,126,1
+darkstep,126,1
+darkwoodenplankslab,126,1
+darkwoodplankslab,126,1
+darkwplankslab,126,1
+darkplankslab,126,1
+darkwoodenslab,126,1
+darkwoodslab,126,1
+darkwslab,126,1
+darkslab,126,1
+darkwoodenplankhalfblock,126,1
+darkwoodplankhalfblock,126,1
+darkwplankhalfblock,126,1
+darkplankhalfblock,126,1
+darkwoodenhalfblock,126,1
+darkwoodhalfblock,126,1
+darkwhalfblock,126,1
+darkhalfblock,126,1
+birchwoodenplankstep,126,2
+birchwoodplankstep,126,2
+birchwplankstep,126,2
+birchplankstep,126,2
+birchwoodenstep,126,2
+birchwoodstep,126,2
+birchwstep,126,2
+birchstep,126,2
+birchwoodenplankslab,126,2
+birchwoodplankslab,126,2
+birchwplankslab,126,2
+birchplankslab,126,2
+birchwoodenslab,126,2
+birchwoodslab,126,2
+birchwslab,126,2
+birchslab,126,2
+birchwoodenplankhalfblock,126,2
+birchwoodplankhalfblock,126,2
+birchwplankhalfblock,126,2
+birchplankhalfblock,126,2
+birchwoodenhalfblock,126,2
+birchwoodhalfblock,126,2
+birchwhalfblock,126,2
+birchhalfblock,126,2
+lightwoodenplankstep,126,2
+lightwoodplankstep,126,2
+lightwplankstep,126,2
+lightplankstep,126,2
+lightwoodenstep,126,2
+lightwoodstep,126,2
+lightwstep,126,2
+lightstep,126,2
+lightwoodenplankslab,126,2
+lightwoodplankslab,126,2
+lightwplankslab,126,2
+lightplankslab,126,2
+lightwoodenslab,126,2
+lightwoodslab,126,2
+lightwslab,126,2
+lightslab,126,2
+lightwoodenplankhalfblock,126,2
+lightwoodplankhalfblock,126,2
+lightwplankhalfblock,126,2
+lightplankhalfblock,126,2
+lightwoodenhalfblock,126,2
+lightwoodhalfblock,126,2
+lightwhalfblock,126,2
+lighthalfblock,126,2
+junglewoodenplankstep,126,3
+junglewoodplankstep,126,3
+junglewplankstep,126,3
+jungleplankstep,126,3
+junglewoodenstep,126,3
+junglewoodstep,126,3
+junglewstep,126,3
+junglestep,126,3
+junglewoodenplankslab,126,3
+junglewoodplankslab,126,3
+junglewplankslab,126,3
+jungleplankslab,126,3
+junglewoodenslab,126,3
+junglewoodslab,126,3
+junglewslab,126,3
+jungleslab,126,3
+junglewoodenplankhalfblock,126,3
+junglewoodplankhalfblock,126,3
+junglewplankhalfblock,126,3
+jungleplankhalfblock,126,3
+junglewoodenhalfblock,126,3
+junglewoodhalfblock,126,3
+junglewhalfblock,126,3
+junglehalfblock,126,3
+forestwoodenplankstep,126,3
+forestwoodplankstep,126,3
+forestwplankstep,126,3
+forestplankstep,126,3
+forestwoodenstep,126,3
+forestwoodstep,126,3
+forestwstep,126,3
+foreststep,126,3
+forestwoodenplankslab,126,3
+forestwoodplankslab,126,3
+forestwplankslab,126,3
+forestplankslab,126,3
+forestwoodenslab,126,3
+forestwoodslab,126,3
+forestwslab,126,3
+forestslab,126,3
+forestwoodenplankhalfblock,126,3
+forestwoodplankhalfblock,126,3
+forestwplankhalfblock,126,3
+forestplankhalfblock,126,3
+forestwoodenhalfblock,126,3
+forestwoodhalfblock,126,3
+forestwhalfblock,126,3
+foresthalfblock,126,3
+cocoaplant,127,0
+cocopant,127,0
+cocoafruit,127,0
+cocofruit,127,0
+sandstairs,128,0
+sandstonestairs,128,0
+sandsstairs,128,0
+sstonestairs,128,0
+ssstairs,128,0
+sandstair,128,0
+sandstonestair,128,0
+sandsstair,128,0
+sstonestair,128,0
+ssstair,128,0
+emeraldore,129,0
+eore,129,0
+oreemerald,129,0
+oree,129,0
+enderchest,130,0
+endchest,130,0
+echest,130,0
+chestender,130,0
+chestend,130,0
+cheste,130,0
+endercontainer,130,0
+endcontainer,130,0
+econtainer,130,0
+tripwirehook,131,0
+tripwire,131,0
+trip,131,0
+tripwirelever,131,0
+triphook,131,0
+tripwireblock,132,0
+tripblock,132,0
+blocktrip,132,0
+blocktripwire,132,0
+emeraldblock,133,0
+blockemerald,133,0
+eblock,133,0
+blocke,133,0
+sprucewoodenplankstairs,134,0
+sprucewoodplankstairs,134,0
+sprucewplankstairs,134,0
+spruceplankstairs,134,0
+sprucewoodenstairs,134,0
+sprucewoodstairs,134,0
+sprucewstairs,134,0
+sprucestairs,134,0
+darkwoodenplankstairs,134,0
+darkwoodplankstairs,134,0
+darkwplankstairs,134,0
+darkplankstairs,134,0
+darkwoodenstairs,134,0
+darkwoodstairs,134,0
+darkwstairs,134,0
+darkstairs,134,0
+sprucewoodenplankstair,134,0
+sprucewoodplankstair,134,0
+sprucewplankstair,134,0
+spruceplankstair,134,0
+sprucewoodenstair,134,0
+sprucewoodstair,134,0
+sprucewstair,134,0
+sprucestair,134,0
+darkwoodenplankstair,134,0
+darkwoodplankstair,134,0
+darkwplankstair,134,0
+darkplankstair,134,0
+darkwoodenstair,134,0
+darkwoodstair,134,0
+darkwstair,134,0
+darkstair,134,0
+birchwoodenplankstairs,135,0
+birchwoodplankstairs,135,0
+birchwplankstairs,135,0
+birchplankstairs,135,0
+birchwoodenstairs,135,0
+birchwoodstairs,135,0
+birchwstairs,135,0
+birchstairs,135,0
+lightwoodenplankstairs,135,0
+lightwoodplankstairs,135,0
+lightwplankstairs,135,0
+lightplankstairs,135,0
+lightwoodenstairs,135,0
+lightwoodstairs,135,0
+lightwstairs,135,0
+lightstairs,135,0
+birchwoodenplankstair,135,0
+birchwoodplankstair,135,0
+birchwplankstair,135,0
+birchplankstair,135,0
+birchwoodenstair,135,0
+birchwoodstair,135,0
+birchwstair,135,0
+birchstair,135,0
+lightwoodenplankstair,135,0
+lightwoodplankstair,135,0
+lightwplankstair,135,0
+lightplankstair,135,0
+lightwoodenstair,135,0
+lightwoodstair,135,0
+lightwstair,135,0
+lightstair,135,0
+junglewoodenplankstairs,136,0
+junglewoodplankstairs,136,0
+junglewplankstairs,136,0
+jungleplankstairs,136,0
+junglewoodenstairs,136,0
+junglewoodstairs,136,0
+junglewstairs,136,0
+junglestairs,136,0
+forestwoodenplankstairs,136,0
+forestwoodplankstairs,136,0
+forestwplankstairs,136,0
+forestplankstairs,136,0
+forestwoodenstairs,136,0
+forestwoodstairs,136,0
+forestwstairs,136,0
+foreststairs,136,0
+junglewoodenplankstair,136,0
+junglewoodplankstair,136,0
+junglewplankstair,136,0
+jungleplankstair,136,0
+junglewoodenstair,136,0
+junglewoodstair,136,0
+junglewstair,136,0
+junglestair,136,0
+forestwoodenplankstair,136,0
+forestwoodplankstair,136,0
+forestwplankstair,136,0
+forestplankstair,136,0
+forestwoodenstair,136,0
+forestwoodstair,136,0
+forestwstair,136,0
+foreststair,136,0
ironshovel,256,0
ironspade,256,0
ishovel,256,0
@@ -2231,6 +2940,8 @@ diamondaxe,279,0
crystalaxe,279,0
daxe,279,0
stick,280,0
+twig,280,0
+branch,280,0
bowl,281,0
mushroomsoup,282,0
mrsoup,282,0
@@ -2528,6 +3239,7 @@ redsdust,331,0
reddust,331,0
rsdust,331,0
rdust,331,0
+snow,332,0
snowball,332,0
snball,332,0
boat,333,0
@@ -2712,12 +3424,16 @@ greencactusdye,351,2
greencolour,351,2
greencolor,351,2
greendye,351,2
+cocoabeans,351,3
+cocoabean,351,3
cocobeans,351,3
cocobean,351,3
cbeans,351,3
cbean,351,3
beans,351,3
bean,351,3
+browncocoabeans,351,3
+browncocoabean,351,3
browncocobeans,351,3
browncocobean,351,3
browncbeans,351,3
@@ -2725,12 +3441,16 @@ browncbean,351,3
brownbeans,351,3
brownbean,351,3
brownb,351,3
+cocoabeanscolour,351,3
+cocoabeancolour,351,3
cocobeanscolour,351,3
cocobeancolour,351,3
cbeanscolour,351,3
cbeancolour,351,3
beanscolour,351,3
beancolour,351,3
+browncocoabeanscolour,351,3
+browncocoabeancolour,351,3
browncocobeanscolour,351,3
browncocobeancolour,351,3
browncbeanscolour,351,3
@@ -2738,12 +3458,16 @@ browncbeancolour,351,3
brownbeanscolour,351,3
brownbeancolour,351,3
brownbcolour,351,3
+cocoabeanscolor,351,3
+cocoabeancolor,351,3
cocobeanscolor,351,3
cocobeancolor,351,3
cbeanscolor,351,3
cbeancolor,351,3
beanscolor,351,3
beancolor,351,3
+browncocoabeanscolor,351,3
+browncocoabeancolor,351,3
browncocobeanscolor,351,3
browncocobeancolor,351,3
browncbeanscolor,351,3
@@ -2751,12 +3475,16 @@ browncbeancolor,351,3
brownbeanscolor,351,3
brownbeancolor,351,3
brownbcolor,351,3
+cocoabeansdye,351,3
+cocoabeandye,351,3
cocobeansdye,351,3
cocobeandye,351,3
cbeansdye,351,3
cbeandye,351,3
beansdye,351,3
beandye,351,3
+browncocoabeansdye,351,3
+browncocoabeandye,351,3
browncocobeansdye,351,3
browncocobeandye,351,3
browncbeansdye,351,3
@@ -2891,10 +3619,6 @@ sugar,353,0
whitedust,353,0
cake,354,0
bed,355,0
-sleepingtable,355,0
-sleeptable,355,0
-tablesleeping,355,0
-tablesleep,355,0
repeater,356,0
repeat,356,0
delayer,356,0
@@ -3012,6 +3736,750 @@ hstalk,372,0
potion,373,0
mixture,373,0
potions,373,0
+waterbottle,373,0
+fullbottle,373,0
+watervase,373,0
+fullvase,373,0
+awkwardpotion,373,16
+awkwardpot,373,16
+thickpotion,373,32
+thickpot,373,32
+mundaneexpotion,373,64
+mundaneextendedpotion,373,64
+mundaneexpot,373,64
+mundaneextendedpot,373,64
+mundanepotion,373,8192
+mundanepot,373,8192
+regenerationpotion,373,8193
+regeneratepotion,373,8193
+regenpotion,373,8193
+regenerationpot,373,8193
+regeneratepot,373,8193
+regenpot,373,8193
+rpot,373,8193
+swiftnesspotion,373,8194
+swiftpotion,373,8194
+swiftnesspot,373,8194
+swiftpot,373,8194
+swpot,373,8194
+fireresistancepotion,373,8195
+fireresistpotion,373,8195
+firerespotion,373,8195
+fireresistancepot,373,8195
+fireresistpot,373,8195
+firerespot,373,8195
+fpot,373,8195
+posionpotion,373,8196
+acidpotion,373,8196
+posionpot,373,8196
+acidpot,373,8196
+ppot,373,8196
+healingpotion,373,8197
+healpotion,373,8197
+lifepotion,373,8197
+healingpot,373,8197
+healpot,373,8197
+lifepot,373,8197
+hpot,373,8197
+weaknesspotion,373,8200
+weakpotion,373,8200
+weaknesspot,373,8200
+weakpot,373,8200
+wpot,373,8200
+strengthpotion,373,8201
+strongpotion,373,8201
+strpotion,373,8201
+strengthpot,373,8201
+strongpot,373,8201
+strpot,373,8201
+spot,373,8201
+slownesspotion,373,8202
+slowpotion,373,8202
+slownesspot,373,8202
+slowpot,373,8202
+slpot,373,8202
+harmingpotion,373,8204
+damagepotion,373,8204
+dmgpotion,373,8204
+harmingpot,373,8204
+damagepot,373,8204
+dmgpot,373,8204
+dpot,373,8204
+regenerationleveliipotion,373,8225
+regenerateleveliipotion,373,8225
+regenleveliipotion,373,8225
+regenerationlevel2potion,373,8225
+regeneratelevel2potion,373,8225
+regenlevel2potion,373,8225
+regenerationiipotion,373,8225
+regenerateiipotion,373,8225
+regeniipotion,373,8225
+regenerationleveliipot,373,8225
+regenerateleveliipot,373,8225
+regenleveliipot,373,8225
+regenerationlevel2pot,373,8225
+regeneratelevel2pot,373,8225
+regenlevel2pot,373,8225
+regenerationiipot,373,8225
+regenerateiipot,373,8225
+regeniipot,373,8225
+r2pot,373,8225
+swiftnessleveliipotion,373,8226
+swiftleveliipotion,373,8226
+swiftnesslevel2potion,373,8226
+swiftlevel2potion,373,8226
+swiftnessiipotion,373,8226
+swiftiipotion,373,8226
+swiftnessleveliipot,373,8226
+swiftleveliipot,373,8226
+swiftnesslevel2pot,373,8226
+swiftlevel2pot,373,8226
+swiftnessiipot,373,8226
+swiftiipot,373,8226
+sw2pot,373,8226
+posionleveliipotion,373,8228
+acidleveliipotion,373,8228
+posionlevel2potion,373,8228
+acidlevel2potion,373,8228
+posioniipotion,373,8228
+acidiipotion,373,8228
+posionleveliipot,373,8228
+acidleveliipot,373,8228
+posionlevel2pot,373,8228
+acidlevel2pot,373,8228
+posioniipot,373,8228
+acidiipot,373,8228
+p2pot,373,8228
+healingleveliipotion,373,8229
+healleveliipotion,373,8229
+healinglevel2potion,373,8229
+heallevel2potion,373,8229
+healingiipotion,373,8229
+healiipotion,373,8229
+healingleveliipot,373,8229
+healleveliipot,373,8229
+healinglevel2pot,373,8229
+heallevel2pot,373,8229
+healingiipot,373,8229
+healiipot,373,8229
+h2potpot,373,8229
+strengthleveliipotion,373,8233
+strongleveliipotion,373,8233
+strleveliipotion,373,8233
+strengthlevel2potion,373,8233
+stronglevel2potion,373,8233
+strlevel2potion,373,8233
+strengthiipotion,373,8233
+strongiipotion,373,8233
+striipotion,373,8233
+strengthleveliipot,373,8233
+strongleveliipot,373,8233
+strleveliipot,373,8233
+strengthlevel2pot,373,8233
+stronglevel2pot,373,8233
+strlevel2pot,373,8233
+strengthiipot,373,8233
+strongiipot,373,8233
+striipot,373,8233
+s2pot,373,8233
+harmingleveliipotion,373,8236
+damageleveliipotion,373,8236
+dmgleveliipotion,373,8236
+harminglevel2potion,373,8236
+damagelevel2potion,373,8236
+dmglevel2potion,373,8236
+harmingiipotion,373,8236
+damageiipotion,373,8236
+dmgiipotion,373,8236
+harmingleveliipot,373,8236
+damageleveliipot,373,8236
+dmgleveliipot,373,8236
+harminglevel2pot,373,8236
+damagelevel2pot,373,8236
+dmglevel2pot,373,8236
+harmingiipot,373,8236
+damageiipot,373,8236
+dmgiipot,373,8236
+d2pot,373,8236
+regenerationextendedpotion,373,8257
+regenerateextendedpotion,373,8257
+regenextendepotion,373,8257
+regenerationexpotion,373,8257
+regenerateexpotion,373,8257
+regenexpotion,373,8257
+regenerationextendedpot,373,8257
+regenerateextendedpot,373,8257
+regenextendepot,373,8257
+regenerationexpot,373,8257
+regenerateexpot,373,8257
+regenexpot,373,8257
+repot,373,8257
+swiftnessextendedpotion,373,8258
+swiftextendedpotion,373,8258
+swiftnessexpotion,373,8258
+swiftexpotion,373,8258
+swiftnessextendedpot,373,8258
+swiftextendedpot,373,8258
+swiftnessexpot,373,8258
+swiftexpot,373,8258
+swepot,373,8258
+fireresistanceextendedpotion,373,8259
+fireresistextendedpotion,373,8259
+fireresextendedpotion,373,8259
+fireresistanceexpotion,373,8259
+fireresistexpotion,373,8259
+fireresexpotion,373,8259
+fireresistanceextendedpot,373,8259
+fireresistextendedpot,373,8259
+fireresextendedpot,373,8259
+fireresistanceexpot,373,8259
+fireresistexpot,373,8259
+fireresexpot,373,8259
+fepot,373,8259
+posionextendedpotion,373,8260
+acidextendedpotion,373,8260
+posionexpotion,373,8260
+acidexpotion,373,8260
+posionextendedpot,373,8260
+acidextendedpot,373,8260
+posionexpot,373,8260
+acidexpot,373,8260
+pepot,373,8260
+weaknessextendedpotion,373,8264
+weakextendedpotion,373,8264
+weaknessexpotion,373,8264
+weakexpotion,373,8264
+weaknessextendedpot,373,8264
+weakextendedpot,373,8264
+weaknessexpot,373,8264
+weakexpot,373,8264
+wepot,373,8264
+strengthextendedpotion,373,8265
+strongextendedpotion,373,8265
+strextendedpotion,373,8265
+strengthexpotion,373,8265
+strongexpotion,373,8265
+strexpotion,373,8265
+strengthextendedpot,373,8265
+strongextendedpot,373,8265
+strextendedpot,373,8265
+strengthexpot,373,8265
+strongexpot,373,8265
+strexpot,373,8265
+sepot,373,8265
+slownessextendedpotion,373,8266
+slowextenedpotion,373,8266
+slownessexpotion,373,8266
+slowexpotion,373,8266
+slownessextendedpot,373,8266
+slowextenedpot,373,8266
+slownessexpot,373,8266
+slowexpot,373,8266
+slepot,373,8266
+regenerationdualbitpotion,373,8289
+regeneratedualbitpotion,373,8289
+regendualbitpotion,373,8289
+regenerationdualbitpot,373,8289
+regeneratedualbitpot,373,8289
+regendualbitpot,373,8289
+rdbpot,373,8289
+swiftnessdualbitpotion,373,8290
+swiftdualbitpotion,373,8290
+swiftnessdualbitpot,373,8290
+swiftdualbitpot,373,8290
+swdbpot,373,8290
+poisondualbitpotion,373,8292
+aciddualbitpotion,373,8292
+poisondualbitpot,373,8292
+aciddualbitpot,373,8292
+pdbpot,373,8292
+strengthdualbitpotion,373,8297
+strongdualbitpotion,373,8297
+strdualbitpotion,373,8297
+strengthdualbitpot,373,8297
+strongdualbitpot,373,8297
+strdualbitpot,373,8297
+sdbpot,373,8297
+splashmundanepotion,373,16384
+splmundanepotion,373,16384
+splashregenerationpotion,373,16385
+splashregeneratepotion,373,16385
+splashregenpotion,373,16385
+splashregenerationpot,373,16385
+splashregeneratepot,373,16385
+splashregenpot,373,16385
+regenerationsplashpotion,373,16385
+regeneratesplashpotion,373,16385
+regensplashpotion,373,16385
+splregenerationpotion,373,16385
+splregeneratepotion,373,16385
+splregenpotion,373,16385
+splregenerationpot,373,16385
+splregeneratepot,373,16385
+splregenpot,373,16385
+sprpot,373,16385
+splashswiftnesspotion,373,16386
+splashswiftpotion,373,16386
+splashswiftnesspot,373,16386
+splashswiftpot,373,16386
+splswiftnesspotion,373,16386
+splswiftpotion,373,16386
+splswiftnesspot,373,16386
+splswiftpot,373,16386
+spswpot,373,16386
+splashfireresistancepotion,373,16387
+splashfireresistpotion,373,16387
+splashfirerespotion,373,16387
+splashfireresistancepot,373,16387
+splashfireresistpot,373,16387
+splashfirerespot,373,16387
+splfireresistancepotion,373,16387
+splfireresistpotion,373,16387
+splfirerespotion,373,16387
+splfireresistancepot,373,16387
+splfireresistpot,373,16387
+splfirerespot,373,16387
+spfpot,373,16387
+splashposionpotion,373,16388
+splashacidpotion,373,16388
+splashposionpot,373,16388
+splashacidpot,373,16388
+splposionpotion,373,16388
+splacidpotion,373,16388
+splposionpot,373,16388
+splacidpot,373,16388
+spppot,373,16388
+splashhealingpotion,373,16389
+splashhealpotion,373,16389
+splashlifepotion,373,16389
+splashhealingpot,373,16389
+splashhealpot,373,16389
+splashlifepot,373,16389
+splhealingpotion,373,16389
+splhealpotion,373,16389
+spllifepotion,373,16389
+splhealingpot,373,16389
+splhealpot,373,16389
+spllifepot,373,16389
+sphpot,373,16389
+splashweaknesspotion,373,16392
+splashweakpotion,373,16392
+splashweaknesspot,373,16392
+splashweakpot,373,16392
+splweaknesspotion,373,16392
+splweakpotion,373,16392
+splweaknesspot,373,16392
+splweakpot,373,16392
+spwpot,373,16392
+splashstrengthpotion,373,16393
+splashstrongpotion,373,16393
+splashstrpotion,373,16393
+splashstrengthpot,373,16393
+splashstrongpot,373,16393
+splashstrpot,373,16393
+splstrengthpotion,373,16393
+splstrongpotion,373,16393
+splstrpotion,373,16393
+splstrengthpot,373,16393
+splstrongpot,373,16393
+splstrpot,373,16393
+spspot,373,16393
+splashslownesspotion,373,16394
+splashslowpotion,373,16394
+splashslownesspot,373,16394
+splashslowpot,373,16394
+splslownesspotion,373,16394
+splslowpotion,373,16394
+splslownesspot,373,16394
+splslowpot,373,16394
+spslpot,373,16394
+splashharmingpotion,373,16396
+splashdamagepotion,373,16396
+splashdmgpotion,373,16396
+splashharmingpot,373,16396
+splashdamagepot,373,16396
+splashdmgpot,373,16396
+dmgsplashpot,373,16396
+splharmingpotion,373,16396
+spldamagepotion,373,16396
+spldmgpotion,373,16396
+splharmingpot,373,16396
+spldamagepot,373,16396
+spldmgpot,373,16396
+sdpot,373,16396
+splashregenerationleveliipotion,373,16417
+splashregenerateleveliipotion,373,16417
+splashregenleveliipotion,373,16417
+splashregenerationlevel2potion,373,16417
+splashregeneratelevel2potion,373,16417
+splashregenlevel2potion,373,16417
+splashregenerationiipotion,373,16417
+splashregenerateiipotion,373,16417
+splashregeniipotion,373,16417
+splashregenerationleveliipot,373,16417
+splashregenerateleveliipot,373,16417
+splashregenleveliipot,373,16417
+splashregenerationlevel2pot,373,16417
+splashregeneratelevel2pot,373,16417
+splashregenlevel2pot,373,16417
+splashregenerationiipot,373,16417
+splashregenerateiipot,373,16417
+splashregeniipot,373,16417
+splregenerationleveliipotion,373,16417
+splregenerateleveliipotion,373,16417
+splregenleveliipotion,373,16417
+splregenerationlevel2potion,373,16417
+splregeneratelevel2potion,373,16417
+splregenlevel2potion,373,16417
+splregenerationiipotion,373,16417
+splregenerateiipotion,373,16417
+splregeniipotion,373,16417
+splregenerationleveliipot,373,16417
+splregenerateleveliipot,373,16417
+splregenleveliipot,373,16417
+splregenerationlevel2pot,373,16417
+splregeneratelevel2pot,373,16417
+splregenlevel2pot,373,16417
+splregenerationiipot,373,16417
+splregenerateiipot,373,16417
+splregeniipot,373,16417
+spr2pot,373,16417
+splashswiftnessleveliipotion,373,16418
+splashswiftleveliipotion,373,16418
+splashswiftnesslevel2potion,373,16418
+splashswiftlevel2potion,373,16418
+splashswiftnessiipotion,373,16418
+splashswiftiipotion,373,16418
+splashswiftnessleveliipot,373,16418
+splashswiftleveliipot,373,16418
+splashswiftnesslevel2pot,373,16418
+splashswiftlevel2pot,373,16418
+splashswiftnessiipot,373,16418
+splashswiftiipot,373,16418
+splswiftnessleveliipotion,373,16418
+splswiftleveliipotion,373,16418
+splswiftnesslevel2potion,373,16418
+splswiftlevel2potion,373,16418
+splswiftnessiipotion,373,16418
+splswiftiipotion,373,16418
+splswiftnessleveliipot,373,16418
+splswiftleveliipot,373,16418
+splswiftnesslevel2pot,373,16418
+splswiftlevel2pot,373,16418
+splswiftnessiipot,373,16418
+splswiftiipot,373,16418
+spsw2pot,373,16418
+splashposionleveliipotion,373,16420
+splashacidleveliipotion,373,16420
+splashposionlevel2potion,373,16420
+splashacidlevel2potion,373,16420
+splashposioniipotion,373,16420
+splashacidiipotion,373,16420
+splashposionleveliipot,373,16420
+splashacidleveliipot,373,16420
+splashposionlevel2pot,373,16420
+splashacidlevel2pot,373,16420
+splashposioniipot,373,16420
+splashacidiipot,373,16420
+splposionleveliipotion,373,16420
+splacidleveliipotion,373,16420
+splposionlevel2potion,373,16420
+splcidlevel2potion,373,16420
+splposioniipotion,373,16420
+splacidiipotion,373,16420
+splposionleveliipot,373,16420
+splacidleveliipot,373,16420
+splposionlevel2pot,373,16420
+splacidlevel2pot,373,16420
+splposioniipot,373,16420
+splacidiipot,373,16420
+spp2pot,373,16420
+splashhealingleveliipotion,373,16421
+splashhealleveliipotion,373,16421
+splashhealinglevel2potion,373,16421
+splashheallevel2potion,373,16421
+splashhealingiipotion,373,16421
+splashhealiipotion,373,16421
+splashhealingleveliipot,373,16421
+splashhealleveliipot,373,16421
+splashhealinglevel2pot,373,16421
+splashheallevel2pot,373,16421
+splashhealingiipot,373,16421
+splashhealiipot,373,16421
+splhealingleveliipotion,373,16421
+splhealleveliipotion,373,16421
+splhealinglevel2potion,373,16421
+splheallevel2potion,373,16421
+splhealingiipotion,373,16421
+splhealiipotion,373,16421
+splhealingleveliipot,373,16421
+splhealleveliipot,373,16421
+splhealinglevel2pot,373,16421
+splheallevel2pot,373,16421
+splhealingiipot,373,16421
+splhealiipot,373,16421
+sph2pot,373,16421
+splashstrengthleveliipotion,373,16425
+splashstrongleveliipotion,373,16425
+splashstrleveliipotion,373,16425
+splashstrengthlevel2potion,373,16425
+splashstronglevel2potion,373,16425
+splashstrlevel2potion,373,16425
+splashstrengthiipotion,373,16425
+splashstrongiipotion,373,16425
+splashstriipotion,373,16425
+splashstrengthleveliipot,373,16425
+splashstrongleveliipot,373,16425
+splashstrleveliipot,373,16425
+splashstrengthlevel2pot,373,16425
+splashstronglevel2pot,373,16425
+splashstrlevel2pot,373,16425
+splashstrengthiipot,373,16425
+splashstrongiipot,373,16425
+splashstriipot,373,16425
+splstrengthleveliipotion,373,16425
+splstrongleveliipotion,373,16425
+splstrleveliipotion,373,16425
+splstrengthlevel2potion,373,16425
+splstronglevel2potion,373,16425
+splstrlevel2potion,373,16425
+splstrengthiipotion,373,16425
+splstrongiipotion,373,16425
+splstriipotion,373,16425
+splstrengthleveliipot,373,16425
+splstrongleveliipot,373,16425
+splstrleveliipot,373,16425
+splstrengthlevel2pot,373,16425
+splstronglevel2pot,373,16425
+splstrlevel2pot,373,16425
+splstrengthiipot,373,16425
+splstrongiipot,373,16425
+splstriipot,373,16425
+sps2pot,373,16425
+splashharmingleveliipotion,373,16428
+splashdamageleveliipotion,373,16428
+splashdmgleveliipotion,373,16428
+splashharminglevel2potion,373,16428
+splashdamagelevel2potion,373,16428
+splashdmglevel2potion,373,16428
+splashharmingiipotion,373,16428
+splashdamageiipotion,373,16428
+splashdmgiipotion,373,16428
+splashharmingleveliipot,373,16428
+splashdamageleveliipot,373,16428
+splashdmgleveliipot,373,16428
+splashharminglevel2pot,373,16428
+splashdamagelevel2pot,373,16428
+splashdmglevel2pot,373,16428
+splashharmingiipot,373,16428
+splashdamageiipot,373,16428
+splashdmgiipot,373,16428
+splharmingleveliipotion,373,16428
+spldamageleveliipotion,373,16428
+spldmgleveliipotion,373,16428
+splharminglevel2potion,373,16428
+spldamagelevel2potion,373,16428
+spldmglevel2potion,373,16428
+splharmingiipotion,373,16428
+spldamageiipotion,373,16428
+spldmgiipotion,373,16428
+splharmingleveliipot,373,16428
+spldamageleveliipot,373,16428
+spldmgleveliipot,373,16428
+splharminglevel2pot,373,16428
+spldamagelevel2pot,373,16428
+spldmglevel2pot,373,16428
+splharmingiipot,373,16428
+spldamageiipot,373,16428
+spldmgiipot,373,16428
+spd2pot,373,16428
+splashregenerationextendedpotion,373,16449
+splashregenerateextendedpotion,373,16449
+splashregenextendepotion,373,16449
+splashregenerationexpotion,373,16449
+splashregenerateexpotion,373,16449
+splashregenexpotion,373,16449
+splashregenerationextendedpot,373,16449
+splashregenerateextendedpot,373,16449
+splashregenextendepot,373,16449
+splashregenerationexpot,373,16449
+splashregenerateexpot,373,16449
+splashregenexpot,373,16449
+splregenerationextendedpotion,373,16449
+splregenerateextendedpotion,373,16449
+splregenextendepotion,373,16449
+splregenerationexpotion,373,16449
+splregenerateexpotion,373,16449
+splregenexpotion,373,16449
+splregenerationextendedpot,373,16449
+splregenerateextendedpot,373,16449
+splregenextendepot,373,16449
+splregenerationexpot,373,16449
+splregenerateexpot,373,16449
+splregenexpot,373,16449
+sprepot,373,16449
+splashswiftnessextendedpotion,373,16450
+splashswiftextendedpotion,373,16450
+splashswiftnessexpotion,373,16450
+splashswiftexpotion,373,16450
+splashswiftnessextendedpot,373,16450
+splashswiftextendedpot,373,16450
+splashswiftnessexpot,373,16450
+splashswiftexpot,373,16450
+splswiftnessextendedpotion,373,16450
+splswiftextendedpotion,373,16450
+splswiftnessexpotion,373,16450
+splswiftexpotion,373,16450
+splswiftnessextendedpot,373,16450
+splswiftextendedpot,373,16450
+splswiftnessexpot,373,16450
+splswiftexpot,373,16450
+spswepot,373,16450
+splashfireresistanceextendedpotion,373,16451
+splashfireresistextendedpotion,373,16451
+splashfireresextendedpotion,373,16451
+splashfireresistanceexpotion,373,16451
+splashfireresistexpotion,373,16451
+splashfireresexpotion,373,16451
+splashfireresistanceextendedpot,373,16451
+splashfireresistextendedpot,373,16451
+splashfireresextendedpot,373,16451
+splashfireresistanceexpot,373,16451
+splashfireresistexpot,373,16451
+splashfireresexpot,373,16451
+splfireresistanceextendedpotion,373,16451
+splfireresistextendedpotion,373,16451
+splfireresextendedpotion,373,16451
+splfireresistanceexpotion,373,16451
+splfireresistexpotion,373,16451
+splfireresexpotion,373,16451
+splfireresistanceextendedpot,373,16451
+splfireresistextendedpot,373,16451
+splfireresextendedpot,373,16451
+splfireresistanceexpot,373,16451
+splfireresistexpot,373,16451
+splfireresexpot,373,16451
+spfepot,373,16451
+splashposionextendedpotion,373,16452
+splashacidextendedpotion,373,16452
+splashposionexpotion,373,16452
+splashacidexpotion,373,16452
+splashposionextendedpot,373,16452
+splashacidextendedpot,373,16452
+splashposionexpot,373,16452
+splashacidexpot,373,16452
+splposionextendedpotion,373,16452
+splacidextendedpotion,373,16452
+splposionexpotion,373,16452
+splacidexpotion,373,16452
+splposionextendedpot,373,16452
+splacidextendedpot,373,16452
+splposionexpot,373,16452
+splacidexpot,373,16452
+sppepot,373,16452
+splashweaknessextendedpotion,373,16456
+splashweakextendedpotion,373,16456
+splashweaknessexpotion,373,16456
+splashweakexpotion,373,16456
+splashweaknessextendedpot,373,16456
+splashweakextendedpot,373,16456
+splashweaknessexpot,373,16456
+splashweakexpot,373,16456
+splweaknessextendedpotion,373,16456
+sphweakextendedpotion,373,16456
+splweaknessexpotion,373,16456
+splweakexpotion,373,16456
+splweaknessextendedpot,373,16456
+splweakextendedpot,373,16456
+splweaknessexpot,373,16456
+splweakexpot,373,16456
+spwepot,373,16456
+splashstrengthextendedpotion,373,16457
+splashstrongextendedpotion,373,16457
+splashstrextendedpotion,373,16457
+splashstrengthexpotion,373,16457
+splashstrongexpotion,373,16457
+splashstrexpotion,373,16457
+splashstrengthextendedpot,373,16457
+splashstrongextendedpot,373,16457
+splashstrextendedpot,373,16457
+splashstrengthexpot,373,16457
+splashstrongexpot,373,16457
+splashstrexpot,373,16457
+splstrengthextendedpotion,373,16457
+splstrongextendedpotion,373,16457
+splstrextendedpotion,373,16457
+splstrengthexpotion,373,16457
+splstrongexpotion,373,16457
+splstrexpotion,373,16457
+splstrengthextendedpot,373,16457
+splstrongextendedpot,373,16457
+splstrextendedpot,373,16457
+splstrengthexpot,373,16457
+splstrongexpot,373,16457
+splstrexpot,373,16457
+spsepot,373,16457
+splashslownessextendedpotion,373,16458
+splashslowextenedpotion,373,16458
+splashslownessexpotion,373,16458
+splashslowexpotion,373,16458
+splashslownessextendedpot,373,16458
+splashslowextenedpot,373,16458
+splashslownessexpot,373,16458
+splashslowexpot,373,16458
+splslownessextendedpotion,373,16458
+splslowextenedpotion,373,16458
+splslownessexpotion,373,16458
+splslowexpotion,373,16458
+splslownessextendedpot,373,16458
+splslowextenedpot,373,16458
+splslownessexpot,373,16458
+splslowexpot,373,16458
+spslepot,373,16458
+splashregenerationdualbitpotion,373,16481
+splashregeneratedualbitpotion,373,16481
+splashregendualbitpotion,373,16481
+splashregenerationdualbitpot,373,16481
+splashregeneratedualbitpot,373,16481
+splashregendualbitpot,373,16481
+splregenerationdualbitpotion,373,16481
+splregeneratedualbitpotion,373,16481
+splregendualbitpotion,373,16481
+splregenerationdualbitpot,373,16481
+splregeneratedualbitpot,373,16481
+splregendualbitpot,373,16481
+sprdbpot,373,16481
+splashswiftnessdualbitpotion,373,16482
+splashswiftdualbitpotion,373,16482
+splashswiftnessdualbitpot,373,16482
+splashswiftdualbitpot,373,16482
+splswiftnessdualbitpotion,373,16482
+splswiftdualbitpotion,373,16482
+splswiftnessdualbitpot,373,16482
+splswiftdualbitpot,373,16482
+spswdbpot,373,16482
+splashpoisondualbitpotion,373,16484
+splashaciddualbitpotion,373,16484
+splashpoisondualbitpot,373,16484
+splashaciddualbitpot,373,16484
+splpoisondualbitpotion,373,16484
+splaciddualbitpotion,373,16484
+splpoisondualbitpot,373,16484
+splaciddualbitpot,373,16484
+sppdbpot,373,16484
+splashstrengthdualbitpotion,373,16489
+splashstrongdualbitpotion,373,16489
+splashstrdualbitpotion,373,16489
+splashstrengthdualbitpot,373,16489
+splashstrongdualbitpot,373,16489
+splashstrdualbitpot,373,16489
+splstrengthdualbitpotion,373,16489
+splstrongdualbitpotion,373,16489
+splstrdualbitpotion,373,16489
+splstrengthdualbitpot,373,16489
+splstrongdualbitpot,373,16489
+splstrdualbitpot,373,16489
+spsdbpot,373,16489
glassbottle,374,0
bottle,374,0
gbottle,374,0
@@ -3172,9 +4640,26 @@ bottleofenchanting,384,0
enchantingbottle,384,0
expbottle,384,0
xpbottle,384,0
+bottleexp,384,0
+bottlexp,384,0
+enchantbottle,384,0
+bottleenchanting,384,0
+bottleenchant,384,0
+bottleoenchanting,384,0
firecharge,385,0
fireball,385,0
grenade,385,0
+bookandquill,386,0
+booknquill,386,0
+bookandfeather,386,0
+booknfeather,386,0
+writeablebook,386,0
+writtenbook,387,0
+readablebook,387,0
+sealedbook,387,0
+diary,387,0
+ownedbook,387,0
+emerald,388,0
goldmusicrecord,2256,0
goldmusicdisk,2256,0
goldmusicdisc,2256,0
diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties
index 6f0d47990..9e274c165 100644
--- a/Essentials/src/messages.properties
+++ b/Essentials/src/messages.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} has been added to your account.
addedToOthersAccount=\u00a7a{0} added to {1}\u00a7a account. New balance: {2}
+adventure = adventure
alertBroke=broke:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3}
alertPlaced=placed:
diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties
index 1dbb58af0..5a85918c6 100644
--- a/Essentials/src/messages_cs.properties
+++ b/Essentials/src/messages_cs.properties
@@ -8,6 +8,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} bylo pripsano na tvuj ucet.
addedToOthersAccount=\u00a7a{0} bylo pripsano na {1}\u00a7a ucet. Nova hodnota: {2}
+adventure = adventure
alertBroke=zniceno:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} v: {3}
alertPlaced=polozeno:
diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties
index 731679961..b33fa99e2 100644
--- a/Essentials/src/messages_da.properties
+++ b/Essentials/src/messages_da.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} er blevet tilf\u00f8jet til din konto.
addedToOthersAccount=\u00a7a{0} added to {1}\u00a7a account. New balance: {2}
+adventure = adventure
alertBroke=\u00f8delagde:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} ved: {3}
alertPlaced=placerede:
diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties
index b6e84fb66..22a6d84f9 100644
--- a/Essentials/src/messages_de.properties
+++ b/Essentials/src/messages_de.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} wurden zu deiner Geldb\u00f6rse hinzugef\u00fcgt.
addedToOthersAccount=\u00a7a{0} added to {1}\u00a7a account. New balance: {2}
+adventure = adventure
alertBroke=zerst\u00f6rt:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} bei: {3}
alertPlaced=platziert:
diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties
index 6f0d47990..9e274c165 100644
--- a/Essentials/src/messages_en.properties
+++ b/Essentials/src/messages_en.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} has been added to your account.
addedToOthersAccount=\u00a7a{0} added to {1}\u00a7a account. New balance: {2}
+adventure = adventure
alertBroke=broke:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3}
alertPlaced=placed:
diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties
index 0e3bbd9bb..9cbaa9dfc 100644
--- a/Essentials/src/messages_es.properties
+++ b/Essentials/src/messages_es.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} ha sido agregado a tu cuenta.
addedToOthersAccount=\u00a7a{0} added to {1}\u00a7a account. New balance: {2}
+adventure = adventure
alertBroke=roto:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} en: {3}
alertPlaced=situado:
diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties
index 4cb190c6f..a2ce13b34 100644
--- a/Essentials/src/messages_fi.properties
+++ b/Essentials/src/messages_fi.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} on lis\u00e4tty sinun tilillesi.
addedToOthersAccount=\u00a7a{0} lis\u00e4tty {1}\u00a7a tilille. Uusi rahatilanne: {2}
+adventure = adventure
alertBroke=rikkoi:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} sijainnissa: {3}
alertPlaced=laittoi:
diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties
index c74f68b3a..33fbc4356 100644
--- a/Essentials/src/messages_fr.properties
+++ b/Essentials/src/messages_fr.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} a \u00e9t\u00e9 rajout\u00e9 \u00e0 votre compte.
addedToOthersAccount=\u00a7a{0} added to {1}\u00a7a account. New balance: {2}
+adventure = adventure
alertBroke=a cass\u00e9 :
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} \u00e0:{3}
alertPlaced=a plac\u00e9 :
diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties
index 16c419bf4..b5be7ff6c 100644
--- a/Essentials/src/messages_it.properties
+++ b/Essentials/src/messages_it.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} e'' stato aggiunto al tuo account.
addedToOthersAccount=\u00a7a{0} e'' stato aggiunto all''account {1}\u00a7a. Nuovo bilancio: {2}
+adventure = adventure
alertBroke=fallito:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} a: {3}
alertPlaced=collocato:
diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties
index 1937db5a2..fcf90035d 100644
--- a/Essentials/src/messages_nl.properties
+++ b/Essentials/src/messages_nl.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} is gestort op je rekening.
addedToOthersAccount=\u00a7a{0} toegevoegd aan {1}\u00a7a zijn rekening. Nieuw balans: {2}
+adventure = adventure
alertBroke=gebroken:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} bij: {3}
alertPlaced=geplaatst:
diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties
index f263a8ae9..8c177f987 100644
--- a/Essentials/src/messages_pl.properties
+++ b/Essentials/src/messages_pl.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} zostalo dodane do twojego konta.
addedToOthersAccount=\u00a7a{0} dodane do konta {1}\u00a7. Nowy stan konta: {2}.
+adventure = adventure
alertBroke=broke:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3}
alertPlaced=postawil:
diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties
index 332395ed2..056428eb2 100644
--- a/Essentials/src/messages_pt.properties
+++ b/Essentials/src/messages_pt.properties
@@ -5,6 +5,7 @@
action=* {0} {1}
addedToAccount=\u00a7a{0} foi adicionado a sua conta.
addedToOthersAccount=\u00a7a{0} adicionado a {1}\u00a7a saldo. Novo saldo: {2}
+adventure = adventure
alertBroke=Quebrou:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} em: {3}
alertPlaced=Colocou:
diff --git a/Essentials/src/messages_se.properties b/Essentials/src/messages_se.properties
new file mode 100644
index 000000000..252d077ec
--- /dev/null
+++ b/Essentials/src/messages_se.properties
@@ -0,0 +1,437 @@
+#version: TeamCity
+# Single quotes have to be doubled: ''
+# Translations start here
+# by: oggehej, corrected by NeonMaster.
+action=* {0} {1}
+addedToAccount=\u00a7a{0} har blivit tillagt p\u00c3\u00a5 ditt konto.
+addedToOthersAccount=\u00a7a{0} har blivit tillagt p\u00c3\u00a5 {1}\u00a7a konto. Ny balans: {2}
+adventure = adventure
+alertBroke=gjorde s\u00c3\u00b6nder:
+alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3}
+alertPlaced=placerade:
+alertUsed=anv\u00c3\u00a4nde:
+autoAfkKickReason=Du har blivit utsparkad f\u00c3\u00b6r att ha varit inaktiv i mer \u00c3\u00a4n {0} minuter.
+backAfterDeath=\u00a77Anv\u00c3\u00a4nd /back kommandot f\u00c3\u00b6r att komma tillbaka till din d\u00c3\u00b6dsplats.
+backUsageMsg=\u00a77Tar dig tillbaka till din f\u00c3\u00b6reg\u00c3\u00a5ende position.
+backupDisabled=Ett externt backup-skript har inte blivit konfigurerat.
+backupFinished=Backup klar
+backupStarted=Backup startad
+balance=\u00a77Balans: {0}
+balanceTop=\u00a77Topp balans ({0})
+banExempt=\u00a7cDu kan inte banna den spelaren.
+banIpAddress=\u00a77Bannade IP-adress
+bannedIpsFileError=Kunde inte l\u00c3\u00a4sa banned-ips.txt
+bannedIpsFileNotFound=banned-ips.txt hittades inte
+bannedPlayersFileError=Kunde inte l\u00c3\u00a4sa banned-players.txt
+bannedPlayersFileNotFound=banned-players.txt hittades inte
+bigTreeFailure=\u00a7cEtt stort tr\u00c3\u00a4d kunde inte genereras misslyckades. F\u00c3\u00b6s\u00c3\u00b6k igen p\u00c3\u00a5 gr\u00c3\u00a4s eller jord.
+bigTreeSuccess= \u00a77Stort tr\u00c3\u00a4d genererat.
+blockList=Essentials vidarebefordrade f\u00c3\u00b6ljande kommandon till ett annat insticksprogram:
+broadcast=[\u00a7cUts\u00c3\u00a4ndning\u00a7f]\u00a7a {0}
+buildAlert=\u00a7cDu har inte till\u00c3\u00a5telse att bygga
+bukkitFormatChanged=Bukkit versionsformat bytt. Version \u00c3\u00a4r inte kollad.
+burnMsg=\u00a77Du satte eld p\u00c3\u00a5 {0} i {1} sekunder.
+canTalkAgain=\u00a77Du kan nu prata igen!
+cantFindGeoIpDB=Kunde inte hitta GeoIP-databasen!
+cantReadGeoIpDB=Kunde inte l\u00c3\u00a4sa inneh\u00c3\u00a5ll fr\u00c3\u00a5n GeoIP-databasen!
+cantSpawnItem=\u00a7cDu har inte beh\u00c3\u00b6righet att spawna {0}
+chatTypeLocal=[L]
+chatTypeSpy=[Spy]
+commandFailed=Kommando {0} misslyckades:
+commandHelpFailedForPlugin=Kunde inte hitta hj\u00c3\u00a4lp f\u00c3\u00b6r: {0}
+commandNotLoaded=\u00a7cKommando {0} \u00c3\u00a4r felaktigt laddat.
+compassBearing=\u00a77B\u00c3\u00a4ring: {0} ({1} grader).
+configFileMoveError=Kunde inte flytta config.yml till backup-platsen.
+configFileRenameError=Kunde inte byta namn p\u00c3\u00a5 temp-filen till config.yml
+connectedPlayers=Anslutna spelare:
+connectionFailed=Kunde inte \u00c3\u00b6ppna anslutning.
+cooldownWithMessage=\u00a7cNedkylning: {0}
+corruptNodeInConfig=\u00a74Notice: Din konfigurationsfil har en korrupt {0} nod.
+couldNotFindTemplate=Kunde inte hitta mallen {0}
+creatingConfigFromTemplate=Skapar konfiguration fr\u00c3\u00a5n mallen: {0}
+creatingEmptyConfig=Skapar tom konfiguration: {0}
+creative=kreativ
+currency={0}{1}
+currentWorld=Nuvarande v\u00c3\u00a4rld: {0}
+day=dag
+days=dagar
+defaultBanReason=Banhammaren har talat!
+deleteFileError=Kunde inte radera filen: {0}
+deleteHome=\u00a77Hemmet {0} har tagits bort.
+deleteJail=\u00a77F\u00c3\u00a4ngelset {0} har tagits bort.
+deleteWarp=\u00a77Warpen {0} har tagits bort.
+deniedAccessCommand={0} nekades \u00c3\u00a5tkomst till kommandot.
+dependancyDownloaded=[Essentials] Beroende {0} laddades ner framg\u00c3\u00a5ngsrikt.
+dependancyException=[Essentials] Ett fel uppstod n\u00c3\u00a4r ett beroende laddades ner.
+dependancyNotFound=[Essentials] Ett n\u00c3\u00b6dv\u00c3\u00a4ndigt beroende hittades inte, laddar ner nu.
+depth=\u00a77Du \u00c3\u00a4r p\u00c3\u00a5 havsniv\u00c3\u00a5n.
+depthAboveSea=\u00a77Du \u00c3\u00a4r {0} block ovanf\u00c3\u00b6r havsni\u00c3\u00a5n.
+depthBelowSea=\u00a77Du \u00c3\u00a4r {0} block under havsniv\u00c3\u00a5n.
+destinationNotSet=Ingen destination \u00c3\u00a4r inst\u00c3\u00a4lld.
+disableUnlimited=\u00a77Inaktiverade o\u00c3\u00a4ndligt placerande av {0} f\u00c3\u00b6r {1}.
+disabled=inaktiverad
+disabledToSpawnMob=Att spawna fram den h\u00c3\u00a4r moben \u00c3\u00a4r inaktiverat i configurationsfilen.
+dontMoveMessage=\u00a77Teleporteringen p\u00c3\u00a5b\u00c3\u00b6rjas om {0}. R\u00c3\u00b6r dig inte.
+downloadingGeoIp=Laddar ner GeoIP-databasen... det h\u00c3\u00a4r kan ta en stund (land: 0.6 MB, stad: 20MB)
+duplicatedUserdata=Dublicerad anv\u00c3\u00a4ndardata: {0} och {1}
+durability=\u00a77Det h\u00c3\u00a4r verktyget har \u00a7c{0}\u00a77 anv\u00c3\u00a4ndningar kvar
+enableUnlimited=\u00a77Ger o\u00c3\u00a4ndligt av {0} till {1}.
+enabled=aktiverad
+enchantmentApplied = \u00a77F\u00c3\u00b6rtrollningen {0} har blivit till\u00c3\u00a4mpad p\u00c3\u00a5 saken du har i handen.
+enchantmentNotFound = \u00a7cF\u00c3\u00b6rtrollningen hittades inte
+enchantmentPerm = \u00a7cDu har inte beh\u00c3\u00b6righet att {0}
+enchantmentRemoved = \u00a77F\u00c3\u00b6rtrollningen {0} har tagits bort fr\u00c3\u00a5n saken i din hand.
+enchantments = \u00a77F\u00c3\u00b6rtrollningar: {0}
+errorCallingCommand=Kunde inte kontakta kommandot /{0}
+errorWithMessage=\u00a7cFel: {0}
+essentialsHelp1=Filen \u00c3\u00a4r trasig och Essentials kan inte \u00c3\u00b6ppna den. Essentials \u00c3\u00a4r nu inaktiverat. Om du inte kan fixa problemet sj\u00c3\u00a4lv, g\u00c3\u00a5 till http://tiny.cc/EssentialsChat
+essentialsHelp2=Filen \u00c3\u00a4r trasig och Essentials kan inte \u00c3\u00b6ppna den. Essentials \u00c3\u00a4r nu inaktiverat. Om du inte kan fixa problemet sj\u00c3\u00a4lv, skriv /essentialshelp i spelet eller g\u00c3\u00a5 till http://tiny.cc/EssentialsChat
+essentialsReload=\u00a77Essentials Omladdat {0}
+exp=\u00a7c{0} \u00a77har\u00a7c {1} \u00a77exp (level\u00a7c {2}\u00a77) och beh\u00c3\u00b6ver\u00a7c {3} \u00a77mer erfarenhet f\u00c3\u00b6r att g\u00c3\u00a5 upp en niv\u00c3\u00a5.
+expSet=\u00a7c{0} \u00a77har nu\u00a7c {1} \u00a77erfarenhet.
+extinguish=\u00a77Du sl\u00c3\u00a4ckte dig sj\u00c3\u00a4lv.
+extinguishOthers=\u00a77Du sl\u00c3\u00a4ckte {0}.
+failedToCloseConfig=Kunde inte st\u00c3\u00a4nga konfiguration {0}
+failedToCreateConfig=Kunde inte skapa konfiguration {0}
+failedToWriteConfig=Kunde inte skriva konfiguration {0}
+false=falskt
+feed=\u00a77Din hunger \u00c3\u00a4r m\u00c3\u00a4ttad.
+feedOther=\u00a77Matade {0}.
+fileRenameError=Namnbytet av filen {0} misslyckades
+flyMode=\u00a77Aktiverade flygl\u00c3\u00a4ge {0} f\u00c3\u00b6r {1}.
+foreverAlone=\u00a7cDu har ingen att svara.
+freedMemory=Befriade {0} MB.
+gameMode=\u00a77Satte {0}s spell\u00c3\u00a4ge till {1}.
+gcchunks= bitar,
+gcentities= enheter
+gcfree=Ledigt minne: {0} MB
+gcmax=Maximalt minne: {0} MB
+gctotal=Tilldelat minne: {0} MB
+geoIpUrlEmpty=Nerladdningsadressen f\u00c3\u00b6r GeoIP \u00c3\u00a4r tom.
+geoIpUrlInvalid=Nerladdningsadressen f\u00c3\u00b6r GeoIP \u00c3\u00a4r ogiltig.
+geoipJoinFormat=Spelaren {0} kommer fr\u00c3\u00a5n {1}
+godDisabledFor=inaktiverat f\u00c3\u00b6r {0}
+godEnabledFor=aktiverat f\u00c3\u00b6r {0}
+godMode=\u00a77Od\u00c3\u00b6dlighet {0}.
+hatArmor=\u00a7cFel, du kan inte anv\u00c3\u00a4nda den h\u00c3\u00a4r saken som en hatt!
+hatFail=\u00a7cDu m\u00c3\u00a5ste ha n\u00c3\u00a5gonting att b\u00c3\u00a4ra i din hand.
+hatPlaced=\u00a7eNjut av din nya hatt!
+haveBeenReleased=\u00a77Du har blivit friad
+heal=\u00a77Du har blivit l\u00c3\u00a4kt.
+healOther=\u00a77L\u00c3\u00a4kte {0}.
+helpConsole=F\u00c3\u00b6r att visa hj\u00c3\u00a4lp fr\u00c3\u00a5n konsolen, skriv ?.
+helpFrom=\u00a77Kommandon fr\u00c3\u00a5n {0}:
+helpLine=\u00a76/{0}\u00a7f: {1}
+helpMatching=\u00a77Kommandon matchar "{0}":
+helpOp=\u00a7c[OpHj\u00c3\u00a4lp]\u00a7f \u00a77{0}:\u00a7f {1}
+helpPages=Sida \u00a7c{0}\u00a7f av \u00a7c{1}\u00a7f:
+helpPlugin=\u00a74{0}\u00a7f: Hj\u00c3\u00a4lp f\u00c3\u00b6r insticksprogram: /help {1}
+holeInFloor=H\u00c3\u00a5l i golvet
+homeSet=\u00a77Hem inst\u00c3\u00a4llt.
+homeSetToBed=\u00a77Ditt hem \u00c3\u00a4r nu inst\u00c3\u00a4llt till den h\u00c3\u00a4r s\u00c3\u00a4ngen.
+homes=Hem: {0}
+hour=timme
+hours=timmar
+ignorePlayer=Du ignorerar spelaren {0} fr\u00c3\u00a5n och med nu.
+illegalDate=Felaktigt datumformat.
+infoChapter=V\u00c3\u00a4lj kapitel:
+infoChapterPages=Kapitel {0}, sida \u00a7c{1}\u00a7f av \u00a7c{2}\u00a7f:
+infoFileDoesNotExist=Filen info.txt finns inte. Skapar en f\u00c3\u00b6r dig.
+infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Sida \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
+infoUnknownChapter=Ok\u00c3\u00a4nt kapitel.
+invBigger=De andra anv\u00c3\u00a4ndarnas f\u00c3\u00b6rr\u00c3\u00a5d \u00c3\u00a4r st\u00c3\u00b6rre \u00c3\u00a4n ditt.
+invRestored=Ditt f\u00c3\u00b6rr\u00c3\u00a5d har blivit \u00c3\u00a5terst\u00c3\u00a4llt.
+invSee=Du ser nu {0}s f\u00c3\u00b6rr\u00c3\u00a5d.
+invSeeHelp=Anv\u00c3\u00a4nd /invsee f\u00c3\u00b6r att \u00c3\u00a5terst\u00c3\u00a4lla ditt f\u00c3\u00b6rr\u00c3\u00a5d.
+invalidCharge=\u00a7cOgiltig laddning.
+invalidHome=Hemmet {0} finns inte
+invalidMob=Ogiltig monster-typ.
+invalidServer=Ogiltig server!
+invalidSignLine=Rad {0} p\u00c3\u00a5 skylten \u00c3\u00a4r ogiltig.
+invalidWorld=\u00a7cOgiltig v\u00c3\u00a4rld.
+inventoryCleared=\u00a77F\u00c3\u00b6rr\u00c3\u00a5d rensat.
+inventoryClearedOthers=\u00a77F\u00c3\u00b6rr\u00c3\u00a5det av \u00a7c{0}\u00a77 \u00c3\u00a4r rensat.
+is=\u00c3\u00a4r
+itemCannotBeSold=Det objektet kan inte s\u00c3\u00a4ljas till servern.
+itemMustBeStacked=Objektet m\u00c3\u00a5ste k\u00c3\u00b6pas i staplar. En m\u00c3\u00a4ngd av 2s kommer bli 2 staplar, etc.
+itemNotEnough1=\u00a7cDu har inte tillr\u00c3\u00a4ckligt av den saken f\u00c3\u00b6r att s\u00c3\u00a4lja.
+itemNotEnough2=\u00a77Om du ville s\u00c3\u00a4lja alla block av den typen, anv\u00c3\u00a4nd /sell blocknamn
+itemNotEnough3=\u00a77/sell blocknamn -1 kommer att s\u00c3\u00a4lja allt av den blocktypen f\u00c3\u00b6rutom 1 o.s.v.
+itemSellAir=F\u00c3\u00b6rs\u00c3\u00b6kte du att s\u00c3\u00a4lja luft? S\u00c3\u00a4tt en sak i din hand.
+itemSold=\u00a77S\u00c3\u00a5lde f\u00c3\u00b6r \u00a7c{0} \u00a77({1} {2} f\u00c3\u00b6r {3} styck)
+itemSoldConsole={0} s\u00c3\u00a5lde {1} f\u00c3\u00b6r \u00a77{2} \u00a77({3} saker f\u00c3\u00b6r {4} styck)
+itemSpawn=\u00a77Ger {0} stycken {1}
+itemsCsvNotLoaded=Kunde inte ladda items.csv.
+jailAlreadyIncarcerated=\u00a7cPersonen \u00c3\u00a4r redan i f\u00c3\u00a4ngelse: {0}
+jailMessage=\u00a7cBryter du mot reglerna, f\u00c3\u00a5r du st\u00c3\u00a5 ditt kast.
+jailNotExist=Det f\u00c3\u00a4ngelset finns inte.
+jailReleased=\u00a77Spelaren \u00a7e{0}\u00a77 \u00c3\u00a4r frisl\u00c3\u00a4ppt.
+jailReleasedPlayerNotify=\u00a77Du har blivit frisl\u00c3\u00a4ppt!
+jailSentenceExtended=F\u00c3\u00a4ngelsestraffet f\u00c3\u00b6rl\u00c3\u00a4ngt till: {0)
+jailSet=\u00a77F\u00c3\u00a4ngelset {0} har skapats
+jumpError=Det skulle skadat din dators hj\u00c3\u00a4rna.
+kickDefault=Utsparkad fr\u00c3\u00a5n server
+kickExempt=\u00a7cDu kan inte sparka ut den spelaren.
+kickedAll=\u00a7cSparkade ut alla spelare fr\u00c3\u00a5n servern
+kill=\u00a77D\u00c3\u00b6dade {0}.
+kitError2=\u00a7cDet kit:et finns inte eller har blivit felaktigt definierat.
+kitError=\u00a7cDet finns inga giltiga kit.
+kitErrorHelp=\u00a7cKanske en sak fattar m\u00c3\u00a4ngd i konfigurationen?
+kitGive=\u00a77Ger kit {0}.
+kitInvFull=\u00a7cDitt F\u00c3\u00b6rr\u00c3\u00a5d var fullt, placerar kit p\u00c3\u00a5 golvet
+kitTimed=\u00a7cDu kan inte anv\u00c3\u00a4nda det kit:et igen p\u00c3\u00a5 {0}.
+kits=\u00a77Kit: {0}
+lightningSmited=\u00a77Blixten har slagit ner p\u00c3\u00a5 dig
+lightningUse=\u00a77En blixt kommer sl\u00c3\u00a5 ner p\u00c3\u00a5 {0}
+listAfkTag = \u00a77[AFK]\u00a7f
+listAmount = \u00a79Det \u00c3\u00a4r \u00a7c{0}\u00a79 av maximalt \u00a7c{1}\u00a79 spelare online.
+listAmountHidden = \u00a79Det \u00c3\u00a4r \u00a7c{0}\u00a77/{1}\u00a79 Av maximalt \u00a7c{2}\u00a79 spelare online.
+listGroupTag={0}\u00a7f:
+listHiddenTag = \u00a77[G\u00c3\u0096MD]\u00a7f
+loadWarpError=Kunde inte ladda warp {0}
+localFormat=Lokal: <{0}> {1}
+mailClear=\u00a7cF\u00c3\u00b6r att markera dina meddelanden som l\u00c3\u00a4sta, skriv /mail clear
+mailCleared=\u00a77Meddelanden rensade!
+mailSent=\u00a77Meddelandet skickad!
+markMailAsRead=\u00a7cF\u00c3\u00b6r att markera dina meddelanden som l\u00c3\u00a4sta, skriv /mail clear
+markedAsAway=\u00a77Du \u00c3\u00a4r nu markerad som borta.
+markedAsNotAway=\u00a77Du \u00c3\u00a4r inte l\u00c3\u00a4ngre markerad som borta.
+maxHomes=Du kan inte ha fler \u00c3\u00a4n {0} hem.
+mayNotJail=\u00a7cDu f\u00c3\u00a5r inte s\u00c3\u00a4tta den personen i f\u00c3\u00a4ngelse
+me=jag
+minute=minut
+minutes=minuter
+missingItems=Du har inte {0}x {1}.
+missingPrefixSuffix=Saknar ett prefix eller suffix f\u00c3\u00b6r {0}
+mobSpawnError=Fel n\u00c3\u00a4r mob-spawnaren f\u00c3\u00b6rs\u00c3\u00b6kte att \u00c3\u00a4ndras.
+mobSpawnLimit=M\u00c3\u00a4ngden mobs begr\u00c3\u00a4nsad till serverns maxgr\u00c3\u00a4ns
+mobSpawnTarget=M\u00c3\u00a5lblocket m\u00c3\u00a5ste vara en mob-spawnare.
+mobsAvailable=\u00a77Mobs: {0}
+moneyRecievedFrom=\u00a7a{0} har tagits emot fr\u00c3\u00a5n {1}
+moneySentTo=\u00a7a{0} har skickats till {1}
+moneyTaken={0} \u00c3\u00a4r taget fr\u00c3\u00a5n ditt bankkonto.
+month=m\u00c3\u00a5nad
+months=m\u00c3\u00a5nader
+moreThanZero=M\u00c3\u00a5ngden m\u00c3\u00a5ste vara st\u00c3\u00b6rre \u00c3\u00a4n 0.
+msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
+muteExempt=\u00a7cDu kan inte tysta den spelaren.
+mutedPlayer=Spelaren {0} \u00c3\u00a4r tystad.
+mutedPlayerFor=Spelaren {0} \u00c3\u00a4r tystad i {1}.
+mutedUserSpeaks={0} f\u00c3\u00b6rs\u00c3\u00b6kte att prata, men blev tystad.
+nearbyPlayers=Spelare i n\u00c3\u00a4rheten: {0}
+negativeBalanceError=Anv\u00c3\u00a4ndaren \u00c3\u00a4r inte till\u00c3\u00a5ten att ha en negativ balans.
+nickChanged=Smeknamn \u00c3\u00a4ndrat.
+nickDisplayName=\u00a77Du m\u00c3\u00a5ste aktivera change-displayname i Essentials-konfigurationen.
+nickInUse=\u00a7cDet namnet anv\u00c3\u00a4nds redan.
+nickNamesAlpha=\u00a7cSmeknamn m\u00c3\u00a5ste vara alfanumeriska.
+nickNoMore=\u00a77Du har inte ett smeknamn l\u00c3\u00a4ngre
+nickOthersPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd att \u00c3\u00a4ndra andras smeknamn
+nickSet=\u00a77Ditt smeknamn \u00c3\u00a4r nu \u00a7c{0}
+noAccessCommand=\u00a7cDu har inte tillg\u00c3\u00a5ng till det kommandot.
+noAccessPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd till att komma \u00c3\u00a5t det {0}.
+noBreakBedrock=Du har inte till\u00c3\u00a5telse att f\u00c3\u00b6rst\u00c3\u00b6ra berggrund.
+noDestroyPermission=\u00a7Du har inte till\u00c3\u00a5telse att f\u00c3\u00b6rst\u00c3\u00b6ra det {0}.
+noDurability=\u00a7cDen saken har inte en h\u00c3\u00a5llbarhet.
+noGodWorldWarning=\u00a7cVarning! Od\u00c3\u00b6dlighet i den h\u00c3\u00a4r v\u00c3\u00a4rlden \u00c3\u00a4r inaktiverat.
+noHelpFound=\u00a7cInga matchande kommandon.
+noHomeSet=Du har inte angett ett hem.
+noHomeSetPlayer=Den h\u00c3\u00a4r spelaren har inte ett hem.
+noKitPermission=\u00a7cDu beh\u00c3\u00b6ver \u00a7c{0}\u00a7c tillst\u00c3\u00a5nd f\u00c3\u00b6r att anv\u00c3\u00a4nda det kitet.
+noKits=\u00a77Det finns inga kits tillg\u00c3\u00a4ngliga \u00c3\u00a4n
+noMail=Du har inget meddelande
+noMotd=\u00a7cDet finns inget meddelande f\u00c3\u00b6r dagen.
+noNewMail=\u00a77Du har inget nytt meddelande.
+noPendingRequest=Du har inga v\u00c3\u00a4ntande f\u00c3\u00b6rfr\u00c3\u00a5gan.
+noPerm=\u00a7cDu har inte \u00a7f{0}\u00a7c till\u00c3\u00a5telse.
+noPermToSpawnMob=\u00a7cDu har inte till\u00c3\u00a5telse att spawna den h\u00c3\u00a4r moben.
+noPlacePermission=\u00a7cDu har inte till\u00c3\u00a5telse att placera ett block n\u00c3\u00a4ra den skylten.
+noPowerTools=Du har inga power-tools tilldelade.
+noRules=\u00a7cDet finns inga specifierade regler \u00c3\u00a4n.
+noWarpsDefined=Inga warpar \u00c3\u00a4r definerade
+none=inga
+notAllowedToQuestion=\u00a7cDu har inte tillst\u00c3\u00a5nd att anv\u00c3\u00a4nda den fr\u00c3\u00a5gan.
+notAllowedToShout=\u00a7cDu har inte tillst\u00c3\u00a5nd att ropa.
+notEnoughExperience=Du har inte nog med erfarenhet.
+notEnoughMoney=Du har inte tillr\u00c3\u00a4ckligt med pengar.
+notRecommendedBukkit= * ! * Bukkit-versionen \u00c3\u00a4r inte rekommenderad f\u00c3\u00b6r den h\u00c3\u00a4r versionen av Essentials.
+notSupportedYet=St\u00c3\u00b6ds inte \u00c3\u00a4n.
+nothingInHand = \u00a7cDu har inget i din hand.
+now=nu
+nuke=L\u00c3\u00a5t d\u00c3\u00b6d regna \u00c3\u00b6ver dem
+numberRequired=Det ska vara ett nummer d\u00c3\u00a4r, dumbom.
+onlyDayNight=/time st\u00c3\u00b6der bara day(dag) eller night(natt).
+onlyPlayers=Bara spelare som \u00c3\u00a4r online kan anv\u00c3\u00a4nda {0}.
+onlySunStorm=/weather st\u00c3\u00b6der bara sun(sol) eller storm(storm).
+orderBalances=Best\u00c3\u00a4ller balanser av {0} anv\u00c3\u00a4ndare, v\u00c3\u00a4nligen v\u00c3\u00a4nta...
+pTimeCurrent=\u00a7e{0}'*s\u00a7f klockan \u00c3\u00a4r {1}.
+pTimeCurrentFixed=\u00a7e{0}''s\u00a7f tiden \u00c3\u00a4r fixerad till {1}.
+pTimeNormal=\u00a7e{0}''s\u00a7f tiden \u00c3\u00a4r normal och matchar servern.
+pTimeOthersPermission=\u00a7cDu har inte beh\u00c3\u00b6righet att st\u00c3\u00a4lla in andra spelares tid.
+pTimePlayers=Dessa spelare har sin egen tid:
+pTimeReset=Spelarens tid har blivit \u00c3\u00a5terst\u00c3\u00a4lld till: \u00a7e{0}
+pTimeSet=Spelarens tid \u00c3\u00a4r inst\u00c3\u00a4lld till \u00a73{0}\u00a7f till: \u00a7e{1}
+pTimeSetFixed=Spelarens tid \u00c3\u00a4r fixerad till \u00a73{0}\u00a7f f\u00c3\u00b6r: \u00a7e{1}
+parseError=Fel vid tolkning av {0} p\u00c3\u00a5 rad {1}
+pendingTeleportCancelled=\u00a7cAvvaktande teleporteringsbeg\u00c3\u00a4ran \u00c3\u00a4r avbruten.
+permissionsError=Saknar Permissions/GroupManager; chattens prefixer/suffixer kommer vara inaktiverade.
+playerBanned=\u00a7cSpelaren {0} bannad {1} f\u00c3\u00b6r {2}
+playerInJail=\u00a7cSpelaren \u00c3\u00a4r redan i f\u00c3\u00a4ngelse {0}.
+playerJailed=\u00a77Spelaren {0} f\u00c3\u00a4ngslad.
+playerJailedFor= \u00a77Spelaren {0} f\u00c3\u00a4ngslad f\u00c3\u00b6r {1}.
+playerKicked=\u00a7cSpelaren {0} har sparkat ut {1} f\u00c3\u00b6r {2}
+playerMuted=\u00a77Du har blivit tystad
+playerMutedFor=\u00a77Du har blivit tystad f\u00c3\u00b6r {0}
+playerNeverOnServer=\u00a7cSpelaren {0} har aldrig varit p\u00c3\u00a5 den h\u00c3\u00a4r servern.
+playerNotFound=\u00a7cSpelaren hittades inte.
+playerUnmuted=\u00a77Du kan nu prata
+pong=Pong!
+possibleWorlds=\u00a77M\u00c3\u00b6jliga v\u00c3\u00a4rdar \u00c3\u00a4r nummer mellan 0 och {0}.
+powerToolAir=Kommandot kan inte tilldelas luft.
+powerToolAlreadySet=Kommandot \u00a7c{0}\u00a7f \u00c3\u00a4r redan tilldelat {1}.
+powerToolAttach=\u00a7c{0}\u00a7f kommandot tilldelat {1}.
+powerToolClearAll=Alla powertool-kommandon har blivit rensade.
+powerToolList={1} har f\u00c3\u00b6ljane kommandon: \u00a7c{0}\u00a7f.
+powerToolListEmpty={0} har inga kommandon tilldelade.
+powerToolNoSuchCommandAssigned=Kommandot \u00a7c{0}\u00a7f har inte blivit tilldelat {1}.
+powerToolRemove=Kommandot \u00a7c{0}\u00a7f \u00c3\u00a4r borttaget fr\u00c3\u00a5n {1}.
+powerToolRemoveAll=Alla kommandon \u00c3\u00a4r borttagna fr\u00c3\u00a5n {0}.
+powerToolsDisabled=Alla dina powertools har blivit inaktiverade.
+powerToolsEnabled=Alla dina powertools har blivit aktiverade.
+protectionOwner=\u00a76[EssentialsProtect] Skydds\u00c3\u00a4gare: {0}
+questionFormat=\u00a77[Fr\u00c3\u00a5ga]\u00a7f {0}
+readNextPage=Skriv /{0} {1} f\u00c3\u00b6r att l\u00c3\u00a4sa n\u00c3\u00a4sta sida
+reloadAllPlugins=\u00a77Laddade om alla insticksprogram.
+removed=\u00a77Tog bort {0} enheter.
+repair=Du har reparerat din: \u00a7e{0}.
+repairAlreadyFixed=\u00a77Den h\u00c3\u00a4r saken beh\u00c3\u00b6ver inte repareras.
+repairEnchanted=\u00a77Du har inte beh\u00c3\u00b6righet att reparera f\u00c3\u00b6rtrollade saker.
+repairInvalidType=\u00a7cDen h\u00c3\u00a4r saken kan inte bli reparerad.
+repairNone=Det var inga saker som beh\u00c3\u00b6ver repareras.
+requestAccepted=\u00a77Teleporterings-f\u00c3\u00b6rfr\u00c3\u00a5gan accepterad.
+requestAcceptedFrom=\u00a77{0} accepterade din teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan.
+requestDenied=\u00a77Teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan nekad.
+requestDeniedFrom=\u00a77{0} nekade din teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan.
+requestSent=\u00a77F\u00c3\u00b6rfr\u00c3\u00a5gan skickad till {0}\u00a77.
+requestTimedOut=\u00a7cTeleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan har g\u00c3\u00a5tt ut
+requiredBukkit= * ! * Du beh\u00c3\u00b6ver minst bygge {0} av CraftBukkit, ladda ner den fr\u00c3\u00a5n http://dl.bukkit.org/downloads/craftbukkit/
+returnPlayerToJailError=Ett fel uppstod n\u00c3\u00a4r spelaren {0} skulle \u00c3\u00a5terv\u00c3\u00a4nda till f\u00c3\u00a4ngelset: {1}
+second=sekund
+seconds=sekunder
+seenOffline=Spelaren {0} \u00c3\u00a4r offline sedan {1}
+seenOnline=Spelaren {0} \u00c3\u00a4r online sedan {1}
+serverFull=Servern \u00c3\u00a4r full
+serverTotal=Totalt p\u00c3\u00a5 servern: {0}
+setSpawner=Bytte typen av spawnare till {0}
+sheepMalformedColor=Felformulerad f\u00c3\u00a4rg.
+shoutFormat=\u00a77[Hojtning]\u00a7f {0}
+signFormatFail=\u00a74[{0}]
+signFormatSuccess=\u00a71[{0}]
+signFormatTemplate=[{0}]
+signProtectInvalidLocation=\u00a74Du har inte till\u00c3\u00a5telse att g\u00c3\u00b6ra skyltar h\u00c3\u00a4r.
+similarWarpExist=En warp med ett liknande namn finns redan.
+slimeMalformedSize=Felformulerad storlek.
+soloMob=Det h\u00c3\u00a4r monstret gillar att vara ensam
+spawnSet=\u00a77Spawnpunkten inst\u00c3\u00a4lld f\u00c3\u00b6r gruppen {0}.
+spawned=spawnade
+sudoExempt=Du kan inte g\u00c3\u00b6ra en sudo p\u00c3\u00a5 den h\u00c3\u00a4r anv\u00c3\u00a4ndaren
+sudoRun=Tvingar {0} att springa: /{1} {2}
+suicideMessage=\u00a77Adj\u00c3\u00b6 grymma v\u00c3\u00a4rld...
+suicideSuccess= \u00a77{0} tog sitt eget liv
+survival=\u00c3\u00b6verlevnad
+takenFromAccount=\u00a7c{0} har tagits fr\u00c3\u00a5n ditt konto.
+takenFromOthersAccount=\u00a7c{0} taget fr\u00c3\u00a5n {1}\u00a7c konto. Ny balans: {2}
+teleportAAll=\u00a77Teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan skickad till alla spelare...
+teleportAll=\u00a77Teleporterar alla spelare...
+teleportAtoB=\u00a77{0}\u00a77 teleporterade dig till {1}\u00a77.
+teleportDisabled={0} har teleportering inaktiverat.
+teleportHereRequest=\u00a7c{0}\u00a7c har fr\u00c3\u00a5gat dig om du vill teleportera till dem.
+teleportNewPlayerError=Messlyckades med att teleportera ny spelare
+teleportRequest=\u00a7c{0}\u00a7c har beg\u00c3\u00a4rt att f\u00c3\u00a5 teleportera sig till dig.
+teleportRequestTimeoutInfo=\u00a77Den h\u00c3\u00a4r beg\u00c3\u00a4ran kommer att g\u00c3\u00a5 ut efter {0} sekunder.
+teleportTop=\u00a77Teleporterar till toppen.
+teleportationCommencing=\u00a77Teleporteringen p\u00c3\u00a5b\u00c3\u00b6rjas...
+teleportationDisabled=\u00a77Teleportering inaktiverat.
+teleportationEnabled=\u00a77Teleportering aktiverat.
+teleporting=\u00a77Teleporterar...
+teleportingPortal=\u00a77Teleporterar via portal.
+tempBanned=Tempor\u00c3\u00a4rt bannad fr\u00c3\u00a5n servern f\u00c3\u00b6r {0}
+tempbanExempt=\u00a77Du kan inte tempor\u00c3\u00a4rt banna den spelaren
+thunder= Du {0} \u00c3\u00a5ska i din v\u00c3\u00a4rld
+thunderDuration=Du {0} i din v\u00c3\u00a4rld i {1} sekunder.
+timeBeforeHeal=Tid f\u00c3\u00b6re n\u00c3\u00a4ste l\u00c3\u00a4kning: {0}
+timeBeforeTeleport=Tid f\u00c3\u00b6re n\u00c3\u00a4sta teleportering: {0}
+timeFormat=\u00a73{0}\u00a7f eller \u00a73{1}\u00a7f eller \u00a73{2}\u00a7f
+timePattern=(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
+timeSet=Tid inst\u00c3\u00a4lld i alla v\u00c3\u00a4rldar.
+timeSetPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd att st\u00c3\u00a4lla in tiden.
+timeWorldCurrent=Den nuvarande tiden i {0} \u00c3\u00a4r \u00a73{1}
+timeWorldSet=Tiden \u00c3\u00a4r nu {0} i: \u00a7c{1}
+tps=Nuvarande TPS = {0}
+tradeCompleted=\u00a77K\u00c3\u00b6p avslutat.
+tradeSignEmpty=K\u00c3\u00b6pskylten har inget tillg\u00c3\u00a4ngligt f\u00c3\u00b6r dig.
+tradeSignEmptyOwner=Det finns inget att fr\u00c3\u00a5n den h\u00c3\u00a4r k\u00c3\u00b6pskylten.
+treeFailure=\u00a7cTr\u00c3\u00a4dgenereringn misslyckades. Prova igen p\u00c3\u00a5 gr\u00c3\u00a4s eller jord.
+treeSpawned=\u00a77Tr\u00c3\u00a4d genererat.
+true=sant
+typeTpaccept=\u00a77F\u00c3\u00b6r att teleportera, skriv \u00a7c/tpaccept\u00a77.
+typeTpdeny=\u00a77F\u00c3\u00b6r att neka denna f\u00c3\u00b6rfr\u00c3\u00a5gan, skriv \u00a7c/tpdeny\u00a77.
+typeWorldName=\u00a77Du kan ocks\u00c3\u00a5 skriva namnet av en specifik v\u00c3\u00a4rld.
+unableToSpawnMob=Kunde inte spawna moben.
+unbannedIP=Tog bort bannlysningen fr\u00c3\u00a5n IP-adress.
+unbannedPlayer=Tog bort bannlysningen fr\u00c3\u00a5n spelaren.
+unignorePlayer=Du ignorerar inte spelaren {0} l\u00c3\u00a4ngre.
+unknownItemId=Ok\u00c3\u00a4nt objekt-ID: {0}
+unknownItemInList=Ok\u00c3\u00a4nt objekt {0} i listan {1}.
+unknownItemName=Ok\u00c3\u00a4nt objektnamn: {0}
+unlimitedItemPermission=\u00a7cInget tillst\u00c3\u00a5nd f\u00c3\u00b6r obegr\u00c3\u00a4nsad tillg\u00c3\u00a5ng av {0}.
+unlimitedItems=Obegr\u00c3\u00a4nsade objekt:
+unmutedPlayer=Spelaren {0} \u00c3\u00a4r inte bannlyst l\u00c3\u00a4ngre.
+unvanished=\u00a7aDu \u00c3\u00a4r synlig igen.
+unvanishedReload=\u00a7cEn omladdning har tvingat dig att bli synlig.
+upgradingFilesError=Fel vid uppgradering av filerna
+userDoesNotExist=Anv\u00c3\u00a4ndaren {0} existerar inte.
+userIsAway={0} \u00c3\u00a4r nu AFK
+userIsNotAway={0} \u00c3\u00a4r inte l\u00c3\u00a4ngre AFK
+userJailed=\u00a77Du har blivit f\u00c3\u00a4ngslad
+userUsedPortal={0} anv\u00c3\u00a4nde en existerande utg\u00c3\u00a5ngsportal.
+userdataMoveBackError=Kunde inte flytta userdata/{0}.tmp till userdata/{1}
+userdataMoveError=Kunde inte flytta userdata/{0} till userdata/{1}.tmp
+usingTempFolderForTesting=Anv\u00c3\u00a4nder tempor\u00c3\u00a4r mapp mapp f\u00c3\u00b6r testning:
+vanished=\u00a7aDu \u00c3\u00a4r nu osynlig.
+versionMismatch=Versionerna matchar inte! V\u00c3\u00a4nligen uppgradera {0} till samma version.
+versionMismatchAll=Versionerna matchar inte! V\u00c3\u00a4nligen uppgradera alla Essentials jars till samma version.
+voiceSilenced=\u00a77Din r\u00c3\u00b6st har tystats
+warpDeleteError=Problem med att ta bort warp-filen.
+warpListPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd att lista warparna.
+warpNotExist=Den warpen finns inte.
+warpOverwrite=\u00a7cDu kan inte skriva \u00c3\u00b6ver den warpen.
+warpSet=\u00a77Warpen {0} inst\u00c3\u00a4lld.
+warpUsePermission=\u00a7cDU har inte tillst\u00c3\u00a5nd att anv\u00c3\u00a4nda den warpen.
+warpingTo=\u00a77Warpar till {0}.
+warps=Warpar: {0}
+warpsCount=\u00a77Det finns {0} warpar. Visar sida {1} av {2}.
+weatherStorm=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till storm i {0}
+weatherStormFor=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till storm i {0} f\u00c3\u00b6r {1} sekunder
+weatherSun=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till sol i {0}
+weatherSunFor=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till sol i {0} f\u00c3\u00b6r {1} sekunder
+whoisBanned=\u00a79 - Bannade spelare: {0}
+whoisExp=\u00a79 - Erfarenhet: {0} (Niv\u00c3\u00a5 {1})
+whoisGamemode=\u00a79 - Spell\u00c3\u00a4ge: {0}
+whoisGeoLocation=\u00a79 - Plats: {0}
+whoisGod=\u00a79 - Od\u00c3\u00b6dlighet: {0}
+whoisHealth=\u00a79 - H\u00c3\u00a4lsa: {0}/20
+whoisIPAddress=\u00a79 - IP-Adress: {0}
+whoisIs={0} \u00c3\u00a4r {1}
+whoisJail=\u00a79 - F\u00c3\u00a4ngelse: {0}
+whoisLocation=\u00a79 - Plats: ({0}, {1}, {2}, {3})
+whoisMoney=\u00a79 - Pengar: {0}
+whoisOP=\u00a79 - Operat\u00c3\u00b6rer: {0}
+whoisStatusAvailable=\u00a79 - Status: Tillg\u00c3\u00a4nglig
+whoisStatusAway=\u00a79 - Status: \u00a7cBorta\u00a7f
+worth=\u00a77Stapeln med {0} ({2} objekt) \u00c3\u00a4r v\u00c3\u00a4rd \u00a7c{1}\u00a77 ({3} styck)
+worthMeta=\u00a77Stapeln med {0} av typ {1} ({3} objekt) \u00c3\u00a4r v\u00c3\u00a4rd \u00a7c{2}\u00a77 ({4} styck)
+worthSet=V\u00c3\u00a4rdet inst\u00c3\u00a4llt
+year=\u00c3\u00a5r
+years=\u00c3\u00a5r
+youAreHealed=\u00a77Du har blivit l\u00c3\u00a4kt.
+youHaveNewMail=\u00a7cDu har {0} meddelanden!\u00a7f Skriv \u00a77/mail read\u00a7f f\u00c3\u00b6r att l\u00c3\u00a4sa dina meddelanden.
\ No newline at end of file
diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml
index 1d0a64d6a..98058ab38 100644
--- a/Essentials/src/plugin.yml
+++ b/Essentials/src/plugin.yml
@@ -117,7 +117,7 @@ commands:
aliases: [efireball]
gamemode:
description: Change player gamemode.
- usage: / [player]
+ usage: / [player]
aliases: [gm,creative,creativemode,egamemode,ecreative,ecreativemode,egm]
getpos:
description: Get your current coordinates or those of a player.
@@ -430,6 +430,10 @@ commands:
description: Determine the username behind a nickname.
usage: /
aliases: [ewhois]
+ workbench:
+ description: Opens up a workbench
+ usage: /
+ aliases: [eworkbench,wb,ewb,wbench,ewbench]
world:
description: Switch between worlds.
usage: / [world]
diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java
index 53763b8ca..796599e09 100644
--- a/Essentials/test/com/earth2me/essentials/FakeServer.java
+++ b/Essentials/test/com/earth2me/essentials/FakeServer.java
@@ -741,4 +741,16 @@ public class FakeServer implements Server
{
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public boolean isPrimaryThread()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public String getMotd()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
diff --git a/EssentialsChat/nbproject/build-impl.xml b/EssentialsChat/nbproject/build-impl.xml
index 80a5b5256..2718ae609 100644
--- a/EssentialsChat/nbproject/build-impl.xml
+++ b/EssentialsChat/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -813,8 +1127,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -822,12 +1137,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -839,12 +1150,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -866,6 +1173,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -952,14 +1295,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -972,39 +1315,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1076,9 +1420,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsChat/nbproject/genfiles.properties b/EssentialsChat/nbproject/genfiles.properties
index 98d505913..8f6e6c76c 100644
--- a/EssentialsChat/nbproject/genfiles.properties
+++ b/EssentialsChat/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=7c7f517b
-nbproject/build-impl.xml.script.CRC32=52184b61
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=9ec3d353
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java
index 436bb55e5..f16579a4d 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java
@@ -2,12 +2,13 @@ package com.earth2me.essentials.chat;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
@@ -33,7 +34,7 @@ public class EssentialsChat extends JavaPlugin
}
chatListener = new ConcurrentSkipListMap();
- final Map chatStore = new HashMap();
+ final Map chatStore = Collections.synchronizedMap(new HashMap());
final EssentialsChatPlayerListenerLowest playerListenerLowest = new EssentialsChatPlayerListenerLowest(getServer(), ess, chatListener, chatStore);
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
index 58b094793..9dce1169c 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
@@ -12,7 +12,7 @@ import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
//TODO: Translate the local/spy tags
public abstract class EssentialsChatPlayer implements Listener
@@ -21,12 +21,12 @@ public abstract class EssentialsChatPlayer implements Listener
protected final static Logger logger = Logger.getLogger("Minecraft");
protected final transient Map listeners;
protected final transient Server server;
- protected final transient Map chatStorage;
+ protected final transient Map chatStorage;
public EssentialsChatPlayer(final Server server,
final IEssentials ess,
final Map listeners,
- final Map chatStorage)
+ final Map chatStorage)
{
this.ess = ess;
this.listeners = listeners;
@@ -34,21 +34,24 @@ public abstract class EssentialsChatPlayer implements Listener
this.chatStorage = chatStorage;
}
- public void onPlayerChat(final PlayerChatEvent event)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
}
- public boolean isAborted(final PlayerChatEvent event)
+ public boolean isAborted(final AsyncPlayerChatEvent event)
{
if (event.isCancelled())
{
return true;
}
- for (IEssentialsChatListener listener : listeners.values())
+ synchronized (listeners)
{
- if (listener.shouldHandleThisChat(event))
+ for (IEssentialsChatListener listener : listeners.values())
{
- return true;
+ if (listener.shouldHandleThisChat(event))
+ {
+ return true;
+ }
}
}
return false;
@@ -69,17 +72,17 @@ public abstract class EssentialsChatPlayer implements Listener
}
}
- public ChatStore getChatStore(final PlayerChatEvent event)
+ public ChatStore getChatStore(final AsyncPlayerChatEvent event)
{
return chatStorage.get(event);
}
- public void setChatStore(final PlayerChatEvent event, final ChatStore chatStore)
+ public void setChatStore(final AsyncPlayerChatEvent event, final ChatStore chatStore)
{
chatStorage.put(event, chatStore);
}
- public ChatStore delChatStore(final PlayerChatEvent event)
+ public ChatStore delChatStore(final AsyncPlayerChatEvent event)
{
return chatStorage.remove(event);
}
@@ -89,7 +92,7 @@ public abstract class EssentialsChatPlayer implements Listener
charge.charge(user);
}
- protected boolean charge(final PlayerChatEvent event, final ChatStore chatStore)
+ protected boolean charge(final AsyncPlayerChatEvent event, final ChatStore chatStore)
{
try
{
@@ -104,7 +107,7 @@ public abstract class EssentialsChatPlayer implements Listener
return true;
}
- protected void sendLocalChat(final PlayerChatEvent event, final ChatStore chatStore)
+ protected void sendLocalChat(final AsyncPlayerChatEvent event, final ChatStore chatStore)
{
event.setCancelled(true);
final User sender = chatStore.getUser();
@@ -133,10 +136,13 @@ public abstract class EssentialsChatPlayer implements Listener
{
abort = true;
}
- final double delta = playerLoc.distanceSquared(loc);
- if (delta > chatStore.getRadius())
+ else
{
- abort = true;
+ final double delta = playerLoc.distanceSquared(loc);
+ if (delta > chatStore.getRadius())
+ {
+ abort = true;
+ }
}
if (abort)
{
@@ -152,9 +158,12 @@ public abstract class EssentialsChatPlayer implements Listener
}
String message = String.format(event.getFormat(), type.concat(sender.getDisplayName()), event.getMessage());
- for (IEssentialsChatListener listener : listeners.values())
+ synchronized (listeners)
{
- message = listener.modifyMessage(event, onlinePlayer, message);
+ for (IEssentialsChatListener listener : listeners.values())
+ {
+ message = listener.modifyMessage(event, onlinePlayer, message);
+ }
}
onlineUser.sendMessage(message);
}
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerHighest.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerHighest.java
index e8f785228..db728bd09 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerHighest.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerHighest.java
@@ -5,7 +5,7 @@ import java.util.Map;
import org.bukkit.Server;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
public class EssentialsChatPlayerListenerHighest extends EssentialsChatPlayer
@@ -13,14 +13,14 @@ public class EssentialsChatPlayerListenerHighest extends EssentialsChatPlayer
public EssentialsChatPlayerListenerHighest(final Server server,
final IEssentials ess,
final Map listeners,
- final Map chatStorage)
+ final Map chatStorage)
{
super(server, ess, listeners, chatStorage);
}
@EventHandler(priority = EventPriority.HIGHEST)
@Override
- public void onPlayerChat(final PlayerChatEvent event)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
final ChatStore chatStore = delChatStore(event);
if (isAborted(event))
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
index 599c39dda..410dc3b3b 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
@@ -3,12 +3,13 @@ package com.earth2me.essentials.chat;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
+import java.text.MessageFormat;
import java.util.Locale;
import java.util.Map;
import org.bukkit.Server;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer
@@ -16,14 +17,14 @@ public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer
public EssentialsChatPlayerListenerLowest(final Server server,
final IEssentials ess,
final Map listeners,
- final Map chatStorage)
+ final Map chatStorage)
{
super(server, ess, listeners, chatStorage);
}
@EventHandler(priority = EventPriority.LOWEST)
@Override
- public void onPlayerChat(final PlayerChatEvent event)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
if (isAborted(event))
{
@@ -40,9 +41,13 @@ public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer
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)
- }));
+ MessageFormat format = ess.getSettings().getChatFormat(group);
+ synchronized (format)
+ {
+ event.setFormat(format.format(new Object[]
+ {
+ group, world, world.substring(0, 1).toUpperCase(Locale.ENGLISH)
+ }));
+ }
}
}
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java
index fdaccdc8d..910518302 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java
@@ -8,7 +8,7 @@ import java.util.Map;
import org.bukkit.Server;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
public class EssentialsChatPlayerListenerNormal extends EssentialsChatPlayer
@@ -16,14 +16,14 @@ public class EssentialsChatPlayerListenerNormal extends EssentialsChatPlayer
public EssentialsChatPlayerListenerNormal(final Server server,
final IEssentials ess,
final Map listeners,
- final Map chatStorage)
+ final Map chatStorage)
{
super(server, ess, listeners, chatStorage);
}
@EventHandler(priority = EventPriority.NORMAL)
@Override
- public void onPlayerChat(final PlayerChatEvent event)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
if (isAborted(event))
{
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/IEssentialsChatListener.java b/EssentialsChat/src/com/earth2me/essentials/chat/IEssentialsChatListener.java
index 5c9c5c219..abf5893ea 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/IEssentialsChatListener.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/IEssentialsChatListener.java
@@ -1,12 +1,12 @@
package com.earth2me.essentials.chat;
import org.bukkit.entity.Player;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
public interface IEssentialsChatListener
{
- boolean shouldHandleThisChat(PlayerChatEvent event);
+ boolean shouldHandleThisChat(AsyncPlayerChatEvent event);
- String modifyMessage(PlayerChatEvent event, Player target, String message);
+ String modifyMessage(AsyncPlayerChatEvent event, Player target, String message);
}
diff --git a/EssentialsGeoIP/nbproject/build-impl.xml b/EssentialsGeoIP/nbproject/build-impl.xml
index 4b4feb8d8..13f9bde1f 100644
--- a/EssentialsGeoIP/nbproject/build-impl.xml
+++ b/EssentialsGeoIP/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -813,8 +1127,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -822,12 +1137,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -839,12 +1150,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -866,6 +1173,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -952,14 +1295,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -972,39 +1315,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1076,9 +1420,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsGeoIP/nbproject/genfiles.properties b/EssentialsGeoIP/nbproject/genfiles.properties
index 59191ffde..2aab27202 100644
--- a/EssentialsGeoIP/nbproject/genfiles.properties
+++ b/EssentialsGeoIP/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.44.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=cbf94f59
-nbproject/build-impl.xml.script.CRC32=db2bb7a7
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=af872325
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java
index 0018d09b4..ab72cfa9f 100644
--- a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java
+++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java
@@ -45,7 +45,7 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf
public void onPlayerJoin(PlayerJoinEvent event)
{
User u = ess.getUser(event.getPlayer());
- if (u.isAuthorized("essentials.geoip.hide"))
+ if (u.isAuthorized("essentials.geoip.hide") || event.getPlayer().getAddress() == null)
{
return;
}
diff --git a/EssentialsGroupBridge/nbproject/build-impl.xml b/EssentialsGroupBridge/nbproject/build-impl.xml
index 97400aa02..052fd5da3 100644
--- a/EssentialsGroupBridge/nbproject/build-impl.xml
+++ b/EssentialsGroupBridge/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -156,6 +156,7 @@ is divided into following sections:
+
@@ -200,6 +201,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -332,11 +354,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -345,32 +408,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -402,10 +703,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -463,6 +767,7 @@ is divided into following sections:
+
@@ -479,6 +784,7 @@ is divided into following sections:
+
@@ -486,6 +792,7 @@ is divided into following sections:
+
@@ -512,6 +819,9 @@ is divided into following sections:
+
+
+
@@ -557,7 +867,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -788,8 +1102,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -797,12 +1112,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -814,12 +1125,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -841,6 +1148,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -927,14 +1270,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -947,39 +1290,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1051,9 +1395,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsGroupBridge/nbproject/genfiles.properties b/EssentialsGroupBridge/nbproject/genfiles.properties
index d862c9b42..cf2869f9f 100644
--- a/EssentialsGroupBridge/nbproject/genfiles.properties
+++ b/EssentialsGroupBridge/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=475c8f4d
-nbproject/build-impl.xml.script.CRC32=c7581402
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=09eb9643
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsGroupManager/nbproject/build-impl.xml b/EssentialsGroupManager/nbproject/build-impl.xml
index 8939aa2fa..c0aa4cb1d 100644
--- a/EssentialsGroupManager/nbproject/build-impl.xml
+++ b/EssentialsGroupManager/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -156,6 +156,7 @@ is divided into following sections:
+
@@ -200,6 +201,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -332,11 +354,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -345,32 +408,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -402,10 +703,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -463,6 +767,7 @@ is divided into following sections:
+
@@ -479,6 +784,7 @@ is divided into following sections:
+
@@ -486,6 +792,7 @@ is divided into following sections:
+
@@ -512,6 +819,9 @@ is divided into following sections:
+
+
+
@@ -557,7 +867,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -781,8 +1095,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -790,12 +1105,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -807,12 +1118,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -834,6 +1141,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -920,14 +1263,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -940,39 +1283,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1037,9 +1381,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsGroupManager/nbproject/genfiles.properties b/EssentialsGroupManager/nbproject/genfiles.properties
index d7341b85d..e05d95a66 100644
--- a/EssentialsGroupManager/nbproject/genfiles.properties
+++ b/EssentialsGroupManager/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=a6709b83
-nbproject/build-impl.xml.script.CRC32=fe0fea25
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=3be9db7e
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt
index 4a3c232be..63fa8b9d7 100644
--- a/EssentialsGroupManager/src/Changelog.txt
+++ b/EssentialsGroupManager/src/Changelog.txt
@@ -183,4 +183,13 @@ v 2.0:
- Re-initialize the WorldsHolder on a reload, as un-registering and re-registering a new holder means all plugins have to check for the new service on every quiery.
- Prevent null perms getting past the GlobalGroups loader.
- Fix forgetting sub groups on a manload.
- - Allow 'manucheckp' to notify when superperms reports false but it is really negated.
\ No newline at end of file
+ - Allow 'manucheckp' to notify when superperms reports false but it is really negated.
+ - Only output a Data update message if something has changed.
+ - Fix loading users with only numerals in their names to be seen as strings.
+ - Ignore any sub folders in the Worlds folder which start with a period (fix for storing data in svn respoitories).
+ - Throw a better error than 'null' when someone removes all groups from a yml.
+ - Stop force removing attachments and let Bukkit handle it's own mess.
+ - Change to our own Yaml parsing for globalgroups instead of using the YAMLConfiguration class in bukkit.
+ - Fix a cases sensitivity bug in world loading.
+ - Stop using the YamlConfiguration in bukkit for our config handling. We can now support periods in world names.
+ - Fix GlobalGroups not loading permission nodes.
\ No newline at end of file
diff --git a/EssentialsGroupManager/src/globalgroups.yml b/EssentialsGroupManager/src/globalgroups.yml
index 04b670ae7..a9a1f22cf 100644
--- a/EssentialsGroupManager/src/globalgroups.yml
+++ b/EssentialsGroupManager/src/globalgroups.yml
@@ -6,7 +6,7 @@
# They can also be added as one of a users subgroups, but NOT as a primary group.
# These collections are available to ALL group and user yml's.
#
-# Add to and customize these groups to fit yoru needs.
+# Add to and customize these groups to fit your needs.
groups:
@@ -120,7 +120,9 @@ groups:
- essentials.compass
- essentials.delhome
- essentials.depth
+ - essentials.exp
- essentials.getpos
+ - essentials.hat
- essentials.home
- essentials.ignore
- essentials.itemdb
@@ -173,6 +175,7 @@ groups:
- essentials.clearinventory
- essentials.delwarp
- essentials.eco.loan
+ - essentials.exp.others
- essentials.ext
- essentials.fly
- essentials.getpos
@@ -215,6 +218,8 @@ groups:
- essentials.tptoggle
- essentials.unban
- essentials.unbanip
+ - essentials.vanish
+ - essentials.warp.*
- essentials.weather
- essentials.whois
- essentials.world
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java
index 0832000f2..34b50825a 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java
@@ -5,22 +5,32 @@
package org.anjocaido.groupmanager;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;
import java.util.logging.Level;
import org.anjocaido.groupmanager.utils.Tasks;
-import org.bukkit.configuration.file.YamlConfiguration;
+import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.constructor.SafeConstructor;
+import org.yaml.snakeyaml.reader.UnicodeReader;
/**
*
* @author gabrielcouto
*/
public class GMConfiguration {
+
+ private boolean opOverride;
+ private boolean toggleValidate;
+ private Integer saveInterval;
+ private Integer backupDuration;
+ private String loggerLevel;
+ private Map mirrorsMap;
+
private GroupManager plugin;
- private File configFile;
- private YamlConfiguration GMconfig;
+ private Map GMconfig;
public GMConfiguration(GroupManager plugin) {
@@ -28,12 +38,14 @@ public class GMConfiguration {
load();
}
+ @SuppressWarnings("unchecked")
public void load() {
if (!plugin.getDataFolder().exists()) {
plugin.getDataFolder().mkdirs();
}
- configFile = new File(plugin.getDataFolder(), "config.yml");
+
+ File configFile = new File(plugin.getDataFolder(), "config.yml");
if (!configFile.exists()) {
try {
@@ -43,59 +55,94 @@ public class GMConfiguration {
}
}
- GMconfig = new YamlConfiguration();
+ Yaml configYAML = new Yaml(new SafeConstructor());
try {
- GMconfig.load(configFile);
+ FileInputStream configInputStream = new FileInputStream(configFile);
+ GMconfig = (Map) configYAML.load(new UnicodeReader(configInputStream));
+ configInputStream.close();
+
} catch (Exception ex) {
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex);
}
+ /*
+ * Read our config settings ands store them for reading later.
+ */
+ Map config = getElement("config", getElement("settings", GMconfig));
+
+ opOverride = (Boolean) config.get("opOverrides");
+ toggleValidate = (Boolean) config.get("validate_toggle");
+
+ /*
+ * data node for save/backup timers.
+ */
+ Map save = getElement("save", getElement("data", getElement("settings", GMconfig)));
+
+ saveInterval = (Integer) save.get("minutes");
+ backupDuration = (Integer) save.get("hours");
+
+ loggerLevel = ((Map) getElement("settings", GMconfig).get("logging")).get("level");
+
+ /*
+ * Store our mirrors map for parsing later.
+ */
+ mirrorsMap = (Map) ((Map) GMconfig.get("settings")).get("mirrors");
+
// Setup defaults
adjustLoggerLevel();
plugin.setValidateOnlinePlayer(isToggleValidate());
}
+
+ @SuppressWarnings("unchecked")
+ private Map getElement(String element, Map map) {
+
+ if (!map.containsKey(element)) {
+ throw new IllegalArgumentException("The config.yml has no '" + element + ".\n");
+ }
+
+ return (Map) map.get(element);
+
+ }
public boolean isOpOverride() {
- return GMconfig.getBoolean("settings.config.opOverrides", true);
+ return opOverride;
}
public boolean isToggleValidate() {
-
- return GMconfig.getBoolean("settings.config.validate_toggle", true);
- }
-
- public Map getMirrorsMap() {
-
- // Try to fetch the old mirror path first
- if (GMconfig.isConfigurationSection("settings.permission.world.mirror")) {
- return (Map) GMconfig.getConfigurationSection("settings.permission.world.mirror").getValues(false);
- } else if (GMconfig.isConfigurationSection("settings.mirrors")) {
- return (Map) GMconfig.getConfigurationSection("settings.mirrors").getValues(false);
- }
- return null;
-
+
+ return toggleValidate;
}
public Integer getSaveInterval() {
- return GMconfig.getInt("settings.data.save.minutes", 10);
+ return saveInterval;
}
public Integer getBackupDuration() {
- return GMconfig.getInt("settings.data.save.hours", 24);
+ return backupDuration;
}
public void adjustLoggerLevel() {
try {
- GroupManager.logger.setLevel(Level.parse(GMconfig.getString("settings.logging.level", "INFO")));
+ GroupManager.logger.setLevel(Level.parse(loggerLevel));
return;
} catch (Exception e) {
}
GroupManager.logger.setLevel(Level.INFO);
}
+
+ public Map getMirrorsMap() {
+
+ if (!mirrorsMap.isEmpty()) {
+ return mirrorsMap;
+ }
+ return null;
+
+ }
+
}
\ No newline at end of file
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java
index 04d9e86be..cc8181ddf 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java
@@ -1,6 +1,7 @@
package org.anjocaido.groupmanager;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -20,9 +21,10 @@ import org.anjocaido.groupmanager.events.GroupManagerEventHandler;
import org.anjocaido.groupmanager.utils.PermissionCheckResult;
import org.anjocaido.groupmanager.utils.Tasks;
import org.bukkit.configuration.MemorySection;
-import org.bukkit.configuration.file.YamlConfiguration;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.constructor.SafeConstructor;
+import org.yaml.snakeyaml.reader.UnicodeReader;
/**
* @author ElgarL
@@ -31,7 +33,7 @@ import org.yaml.snakeyaml.Yaml;
public class GlobalGroups {
private GroupManager plugin;
- private YamlConfiguration GGroups;
+ //private Yaml GGroups;
private Map groups;
@@ -89,8 +91,9 @@ public class GlobalGroups {
@SuppressWarnings("unchecked")
public void load() {
- GGroups = new YamlConfiguration();
-
+ Yaml GGroupYAML = new Yaml(new SafeConstructor());
+ Map GGroups;
+
GroupManager.setLoaded(false);
// READ globalGroups FILE
@@ -106,8 +109,13 @@ public class GlobalGroups {
}
}
+ /*
+ * Load the YAML file.
+ */
try {
- GGroups.load(GlobalGroupsFile);
+ FileInputStream groupsInputStream = new FileInputStream(GlobalGroupsFile);
+ GGroups = (Map) GGroupYAML.load(new UnicodeReader(groupsInputStream));
+ groupsInputStream.close();
} catch (Exception ex) {
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + GlobalGroupsFile.getPath(), ex);
}
@@ -115,12 +123,12 @@ public class GlobalGroups {
// Clear out old groups
resetGlobalGroups();
- if (!GGroups.getKeys(false).isEmpty()) {
+ if (!GGroups.keySet().isEmpty()) {
// Read all global groups
Map allGroups = new HashMap();
try {
- allGroups = (Map) GGroups.getConfigurationSection("groups").getValues(false);
+ allGroups = (Map) GGroups.get("groups");
} catch (Exception ex) {
// ex.printStackTrace();
throw new IllegalArgumentException("Your " + GlobalGroupsFile.getPath() + " file is invalid. See console for details.", ex);
@@ -153,7 +161,7 @@ public class GlobalGroups {
Object element;
// Permission nodes
- element = GGroups.get("groups." + groupName + ".permissions");
+ element = ((Map)allGroups.get(groupName)).get("permissions");
if (element != null)
if (element instanceof List) {
@@ -172,7 +180,7 @@ public class GlobalGroups {
throw new IllegalArgumentException("Unknown type of permission node for global group: " + groupName);
// Info nodes
- element = GGroups.get("groups." + groupName + ".info");
+ element = ((Map)allGroups.get(groupName)).get("info");
if (element != null)
if (element instanceof MemorySection) {
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java
index 5f357641a..61bb41dd1 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java
@@ -324,8 +324,8 @@ public class GroupManager extends JavaPlugin {
public void run() {
try {
- worldsHolder.saveChanges(false);
- GroupManager.logger.log(Level.INFO, " Data files refreshed.");
+ if (worldsHolder.saveChanges(false))
+ GroupManager.logger.log(Level.INFO, " Data files refreshed.");
} catch (IllegalStateException ex) {
GroupManager.logger.log(Level.WARNING, ex.getMessage());
}
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java
index fefc698f9..3df3271a3 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java
@@ -508,6 +508,10 @@ public class WorldDataHolder {
} catch (Exception ex) {
throw new IllegalArgumentException("Your " + groupsFile.getPath() + " file is invalid. See console for details.", ex);
}
+
+ if (allGroupsNode == null) {
+ throw new IllegalArgumentException("You have no groups in " + groupsFile.getPath() + ".");
+ }
Iterator groupItr = allGroupsNode.keySet().iterator();
String groupKey;
@@ -775,20 +779,26 @@ public class WorldDataHolder {
Iterator usersItr = allUsersNode.keySet().iterator();
String usersKey;
+ Object node;
Integer userCount = 0;
while (usersItr.hasNext()) {
try {
userCount++;
// Attempt to fetch the next user name.
- usersKey = usersItr.next();
+ node = usersItr.next();
+ if (node instanceof Integer)
+ usersKey = Integer.toString((Integer)node);
+ else
+ usersKey = node.toString();
+
} catch (Exception ex) {
throw new IllegalArgumentException("Invalid node type for user entry (" + userCount + ") in file: " + usersFile.getPath(), ex);
}
Map thisUserNode = null;
try {
- thisUserNode = (Map) allUsersNode.get(usersKey);
+ thisUserNode = (Map) allUsersNode.get(node);
} catch (Exception ex) {
throw new IllegalArgumentException("Bad format found for user: " + usersKey + " in file: " + usersFile.getPath());
}
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java
index 27a7d9a59..f84262eeb 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java
@@ -22,7 +22,6 @@ import org.anjocaido.groupmanager.dataholder.OverloadedWorldHolder;
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
import org.anjocaido.groupmanager.utils.Tasks;
import org.bukkit.World;
-import org.bukkit.configuration.MemorySection;
import org.bukkit.entity.Player;
/**
@@ -97,15 +96,19 @@ public class WorldsHolder {
* Create the data files if they don't already exist,
* and they are not mirrored.
*/
- for (World world : plugin.getServer().getWorlds())
- if ((!worldsData.containsKey(world.getName().toLowerCase())) && ((!mirrorsGroup.containsKey(world.getName().toLowerCase())) || (!mirrorsUser.containsKey(world.getName().toLowerCase()))))
+ for (World world : plugin.getServer().getWorlds()){
+ GroupManager.logger.log(Level.FINE, "Checking data for " + world.getName() + ".");
+ if ((!worldsData.containsKey(world.getName().toLowerCase())) && ((!mirrorsGroup.containsKey(world.getName().toLowerCase())) || (!mirrorsUser.containsKey(world.getName().toLowerCase())))) {
+ GroupManager.logger.log(Level.FINE, "Creating folders for " + world.getName() + ".");
setupWorldFolder(world.getName());
+ }
+ }
/*
* Loop over all folders within the worlds folder
* and attempt to load the world data
*/
for (File folder : worldsFolder.listFiles()) {
- if (folder.isDirectory()) {
+ if (folder.isDirectory() && !folder.getName().startsWith(".")) {
GroupManager.logger.info("World Found: " + folder.getName());
/*
@@ -164,12 +167,12 @@ public class WorldsHolder {
} else
GroupManager.logger.log(Level.WARNING, "Mirroring error with " + o.toString() + ". Recursive loop detected!");
}
- } else if (mirrorsMap.get(source) instanceof MemorySection) {
- MemorySection subSection = (MemorySection) mirrorsMap.get(source);
+ } else if (mirrorsMap.get(source) instanceof Map) {
+ Map subSection = (Map) mirrorsMap.get(source);
- for (String key : subSection.getKeys(true)) {
+ for (Object key : subSection.keySet()) {
- if (key.toLowerCase() != serverDefaultWorldName) {
+ if (((String)key).toLowerCase() != serverDefaultWorldName) {
if (subSection.get(key) instanceof ArrayList) {
ArrayList mirrorList = (ArrayList) subSection.get(key);
@@ -179,28 +182,32 @@ public class WorldsHolder {
String type = o.toString().toLowerCase();
try {
if (type.equals("groups"))
- mirrorsGroup.remove(key.toLowerCase());
+ mirrorsGroup.remove(((String)key).toLowerCase());
if (type.equals("users"))
- mirrorsUser.remove(key.toLowerCase());
+ mirrorsUser.remove(((String)key).toLowerCase());
} catch (Exception e) {
}
- if (type.equals("groups"))
- mirrorsGroup.put(key.toLowerCase(), getWorldData(source).getName());
+ if (type.equals("groups")) {
+ mirrorsGroup.put(((String)key).toLowerCase(), getWorldData(source).getName());
+ GroupManager.logger.log(Level.FINE, "Adding groups mirror for " + key + ".");
+ }
- if (type.equals("users"))
- mirrorsUser.put(key.toLowerCase(), getWorldData(source).getName());
+ if (type.equals("users")) {
+ mirrorsUser.put(((String)key).toLowerCase(), getWorldData(source).getName());
+ GroupManager.logger.log(Level.FINE, "Adding users mirror for " + key + ".");
+ }
}
// Track this world so we can create a datasource for it later
- mirroredWorlds.add(key);
+ mirroredWorlds.add((String)key);
} else
- GroupManager.logger.log(Level.WARNING, "Mirroring error with " + key + ". Recursive loop detected!");
+ GroupManager.logger.log(Level.WARNING, "Mirroring error with " + (String)key + ". Recursive loop detected!");
} else {
- throw new IllegalStateException("Unknown mirroring format for " + key);
+ throw new IllegalStateException("Unknown mirroring format for " + (String)key);
}
}
@@ -210,6 +217,7 @@ public class WorldsHolder {
// Create a datasource for any worlds not already loaded
for (String world : mirroredWorlds) {
if (!worldsData.containsKey(world.toLowerCase())) {
+ GroupManager.logger.log(Level.FINE, "No data for " + world + ".");
setupWorldFolder(world);
loadWorld(world, true);
}
@@ -264,8 +272,9 @@ public class WorldsHolder {
/**
*
*/
- public void saveChanges(boolean overwrite) {
+ public boolean saveChanges(boolean overwrite) {
+ boolean changed = false;
ArrayList alreadyDone = new ArrayList();
Tasks.removeOldFiles(plugin, plugin.getBackupFolder());
@@ -294,6 +303,7 @@ public class WorldsHolder {
backupFile(w, true);
WorldDataHolder.writeGroups(w, w.getGroupsFile());
+ changed = true;
//w.removeGroupsChangedFlag();
} else {
// Newer file found.
@@ -307,6 +317,7 @@ public class WorldsHolder {
// Backup Groups file
backupFile(w, true);
w.reloadGroups();
+ changed = true;
}
}
if (!mirrorsUser.containsKey(w.getName().toLowerCase()))
@@ -316,6 +327,7 @@ public class WorldsHolder {
backupFile(w, false);
WorldDataHolder.writeUsers(w, w.getUsersFile());
+ changed = true;
//w.removeUsersChangedFlag();
} else {
// Newer file found.
@@ -329,10 +341,12 @@ public class WorldsHolder {
// Backup Users file
backupFile(w, false);
w.reloadUsers();
+ changed = true;
}
}
alreadyDone.add(w);
}
+ return changed;
}
/**
@@ -606,7 +620,7 @@ public class WorldsHolder {
throw new IllegalArgumentException("Users file for world '" + worldName + "' doesnt exist: " + usersFile.getPath());
}
- WorldDataHolder tempHolder = new WorldDataHolder(worldName);
+ WorldDataHolder tempHolder = new WorldDataHolder(worldNameLowered);
// Map the group object for any mirror
if (mirrorsGroup.containsKey(worldNameLowered))
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
index efad11df4..e954a88fd 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
@@ -920,6 +920,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
Group now = stack.pop();
PermissionCheckResult resultNow = checkGroupOnlyPermission(now, targetPermission);
if (!resultNow.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) {
+ resultNow.accessLevel = targetPermission;
return resultNow;
}
for (String sonName : now.getInherits()) {
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
index 05e152286..a4ddcf279 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
@@ -21,7 +21,6 @@ import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
@@ -40,7 +39,6 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerJoinEvent;
-import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent;
@@ -57,7 +55,7 @@ import org.bukkit.plugin.PluginManager;
*/
public class BukkitPermissions {
- protected WeakHashMap attachments = new WeakHashMap();
+ protected WeakHashMap attachments = new WeakHashMap();
protected LinkedHashMap registeredPermissions = new LinkedHashMap();
protected GroupManager plugin;
protected boolean dumpAllPermissions = true;
@@ -146,19 +144,21 @@ public class BukkitPermissions {
return;
}
+ String name = player.getName();
+
// Reset the User objects player reference.
- User user = plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName());
+ User user = plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(name);
if (user != null)
user.updatePlayer(player);
PermissionAttachment attachment;
// Find the players current attachment, or add a new one.
- if (this.attachments.containsKey(player)) {
- attachment = this.attachments.get(player);
+ if (this.attachments.containsKey(name)) {
+ attachment = this.attachments.get(name);
} else {
attachment = player.addAttachment(plugin);
- this.attachments.put(player, attachment);
+ this.attachments.put(name, attachment);
}
if (world == null) {
@@ -167,7 +167,7 @@ public class BukkitPermissions {
// Add all permissions for this player (GM only)
// child nodes will be calculated by Bukkit.
- List playerPermArray = new ArrayList(plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getAllPlayersPermissions(player.getName(), false));
+ List playerPermArray = new ArrayList(plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getAllPlayersPermissions(name, false));
LinkedHashMap newPerms = new LinkedHashMap();
// Sort the perm list by parent/child, so it will push to superperms correctly.
@@ -192,13 +192,15 @@ public class BukkitPermissions {
// Then whack our map into there
orig.putAll(newPerms);
// That's all folks!
- //attachment.getPermissible().recalculatePermissions();
- player.recalculatePermissions();
+ attachment.getPermissible().recalculatePermissions();
+ //player.recalculatePermissions();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
+
+ GroupManager.logger.finest("Attachment updated for: " + name);
}
/**
@@ -212,26 +214,31 @@ public class BukkitPermissions {
List result = new ArrayList();
for (String key : permList) {
- String a = key.charAt(0) == '-' ? key.substring(1) : key;
- Map allchildren = GroupManager.BukkitPermissions.getAllChildren(a, new HashSet());
- if (allchildren != null) {
-
- ListIterator itr = result.listIterator();
-
- while (itr.hasNext()) {
- String node = (String) itr.next();
- String b = node.charAt(0) == '-' ? node.substring(1) : node;
-
- // Insert the parent node before the child
- if (allchildren.containsKey(b)) {
- itr.set(key);
- itr.add(node);
- break;
+ /*
+ * Ignore stupid plugins which add empty permission nodes.
+ */
+ if (!key.isEmpty()) {
+ String a = key.charAt(0) == '-' ? key.substring(1) : key;
+ Map allchildren = GroupManager.BukkitPermissions.getAllChildren(a, new HashSet());
+ if (allchildren != null) {
+
+ ListIterator itr = result.listIterator();
+
+ while (itr.hasNext()) {
+ String node = (String) itr.next();
+ String b = node.charAt(0) == '-' ? node.substring(1) : node;
+
+ // Insert the parent node before the child
+ if (allchildren.containsKey(b)) {
+ itr.set(key);
+ itr.add(node);
+ break;
+ }
}
}
+ if (!result.contains(key))
+ result.add(key);
}
- if (!result.contains(key))
- result.add(key);
}
return result;
@@ -373,19 +380,10 @@ public class BukkitPermissions {
*
* @param player
*/
- private void removeAttachment(Player player) {
+ private void removeAttachment(String playerName) {
- if (attachments.containsKey(player)) {
- try {
- player.removeAttachment(attachments.get(player));
- } catch (IllegalArgumentException e) {
- /*
- * Failed to remove attachment
- * This usually means Bukkit no longer knows of it.
- */
- }
- attachments.remove(player);
- }
+ if (attachments.containsKey(playerName))
+ attachments.remove(playerName);
}
/**
@@ -393,19 +391,6 @@ public class BukkitPermissions {
*/
public void removeAllAttachments() {
- Iterator itr = attachments.keySet().iterator();
-
- while (itr.hasNext()) {
- Player player = itr.next();
- try {
- player.removeAttachment(attachments.get(player));
- } catch (IllegalArgumentException e) {
- /*
- * Failed to remove attachment
- * This usually means Bukkit no longer knows of it.
- */
- }
- }
attachments.clear();
}
@@ -420,13 +405,17 @@ public class BukkitPermissions {
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerJoin(PlayerJoinEvent event) {
+
+
setPlayer_join(true);
Player player = event.getPlayer();
+
+ GroupManager.logger.finest("Player Join event: " + player.getName());
/*
* Tidy up any lose ends
*/
- removeAttachment(player);
+ removeAttachment(player.getName());
// force GM to create the player if they are not already listed.
if (plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) {
@@ -441,19 +430,11 @@ public class BukkitPermissions {
updatePermissions(event.getPlayer(), event.getPlayer().getWorld().getName());
}
-
- @EventHandler(priority = EventPriority.LOWEST)
- public void onPlayerKick(PlayerKickEvent event) {
-
- Player player = event.getPlayer();
-
- /*
- * force remove any attachments as bukkit may not
- */
- removeAttachment(player);
- }
-
- @EventHandler(priority = EventPriority.LOWEST)
+
+ /*
+ * Trigger at highest so we tidy up last.
+ */
+ @EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerQuit(PlayerQuitEvent event) {
if (!GroupManager.isLoaded())
@@ -464,7 +445,7 @@ public class BukkitPermissions {
/*
* force remove any attachments as bukkit may not
*/
- removeAttachment(player);
+ removeAttachment(player.getName());
}
}
@@ -488,4 +469,4 @@ public class BukkitPermissions {
}
}
-}
\ No newline at end of file
+}
diff --git a/EssentialsProtect/nbproject/build-impl.xml b/EssentialsProtect/nbproject/build-impl.xml
index 8cfd93877..19108f7b7 100644
--- a/EssentialsProtect/nbproject/build-impl.xml
+++ b/EssentialsProtect/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -813,8 +1127,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -822,12 +1137,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -839,12 +1150,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -866,6 +1173,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -952,14 +1295,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -972,39 +1315,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1076,9 +1420,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsProtect/nbproject/genfiles.properties b/EssentialsProtect/nbproject/genfiles.properties
index fe9ffd1a1..94897cd6c 100644
--- a/EssentialsProtect/nbproject/genfiles.properties
+++ b/EssentialsProtect/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.38.3.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=40644caa
-nbproject/build-impl.xml.script.CRC32=cdb3fc6f
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=eecff97a
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsSpawn/nbproject/build-impl.xml b/EssentialsSpawn/nbproject/build-impl.xml
index cf349590c..0164b4434 100644
--- a/EssentialsSpawn/nbproject/build-impl.xml
+++ b/EssentialsSpawn/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -813,8 +1127,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -822,12 +1137,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -839,12 +1150,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -866,6 +1173,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -952,14 +1295,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -972,39 +1315,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1076,9 +1420,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsSpawn/nbproject/genfiles.properties b/EssentialsSpawn/nbproject/genfiles.properties
index 15d04622b..fea5f8449 100644
--- a/EssentialsSpawn/nbproject/genfiles.properties
+++ b/EssentialsSpawn/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=e7b96939
-nbproject/build-impl.xml.script.CRC32=f45f4172
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=731b5e85
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsUpdate/nbproject/build-impl.xml b/EssentialsUpdate/nbproject/build-impl.xml
index 2f8555c4c..25ef36b98 100644
--- a/EssentialsUpdate/nbproject/build-impl.xml
+++ b/EssentialsUpdate/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -806,8 +1120,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -815,12 +1130,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -832,12 +1143,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -859,6 +1166,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -945,14 +1288,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -965,39 +1308,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1062,9 +1406,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsUpdate/nbproject/genfiles.properties b/EssentialsUpdate/nbproject/genfiles.properties
index 6e1d2aeac..39c782bce 100644
--- a/EssentialsUpdate/nbproject/genfiles.properties
+++ b/EssentialsUpdate/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.44.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=fd4b98a9
-nbproject/build-impl.xml.script.CRC32=94e69885
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=966cfa4e
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsUpdate/src/com/earth2me/essentials/update/EssentialsHelp.java b/EssentialsUpdate/src/com/earth2me/essentials/update/EssentialsHelp.java
index 7dd46451a..63cdc094a 100644
--- a/EssentialsUpdate/src/com/earth2me/essentials/update/EssentialsHelp.java
+++ b/EssentialsUpdate/src/com/earth2me/essentials/update/EssentialsHelp.java
@@ -9,7 +9,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
@@ -154,7 +154,7 @@ public class EssentialsHelp implements Listener
}
@EventHandler
- public void onPlayerChat(final PlayerChatEvent event)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
if (event.getPlayer() == chatUser)
{
diff --git a/EssentialsUpdate/src/com/earth2me/essentials/update/UpdateProcess.java b/EssentialsUpdate/src/com/earth2me/essentials/update/UpdateProcess.java
index 9fa587f8f..29c227794 100644
--- a/EssentialsUpdate/src/com/earth2me/essentials/update/UpdateProcess.java
+++ b/EssentialsUpdate/src/com/earth2me/essentials/update/UpdateProcess.java
@@ -10,7 +10,7 @@ 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.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.Plugin;
@@ -100,7 +100,7 @@ public class UpdateProcess implements Listener
}
@EventHandler(priority = EventPriority.LOWEST)
- public void onPlayerChat(final PlayerChatEvent event)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
if (event.getPlayer() == currentPlayer)
{
diff --git a/EssentialsXMPP/nbproject/build-impl.xml b/EssentialsXMPP/nbproject/build-impl.xml
index 3293bd709..7e2958bc2 100644
--- a/EssentialsXMPP/nbproject/build-impl.xml
+++ b/EssentialsXMPP/nbproject/build-impl.xml
@@ -12,9 +12,9 @@ is divided into following sections:
- execution
- debugging
- javadoc
- - junit compilation
- - junit execution
- - junit debugging
+ - test compilation
+ - test execution
+ - test debugging
- applet
- cleanup
@@ -181,6 +181,7 @@ is divided into following sections:
+
@@ -225,6 +226,27 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -357,11 +379,52 @@ is divided into following sections:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -370,32 +433,270 @@ is divided into following sections:
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -427,10 +728,13 @@ is divided into following sections:
-
+
Must set JVM to use for profiling in profiler.info.jvm
Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
@@ -488,6 +792,7 @@ is divided into following sections:
+
@@ -504,6 +809,7 @@ is divided into following sections:
+
@@ -511,6 +817,7 @@ is divided into following sections:
+
@@ -537,6 +844,9 @@ is divided into following sections:
+
+
+
@@ -582,7 +892,7 @@ is divided into following sections:
-
+
-
+
+
+ This target only works when run from inside the NetBeans IDE.
@@ -813,8 +1127,9 @@ is divided into following sections:
-
+
Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
@@ -822,12 +1137,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -839,12 +1150,8 @@ is divided into following sections:
-
-
+
+ This target only works when run from inside the NetBeans IDE.
@@ -866,6 +1173,42 @@ is divided into following sections:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
@@ -952,14 +1295,14 @@ is divided into following sections:
-
+
Some tests failed; see details above.
@@ -972,39 +1315,40 @@ is divided into following sections:
Must select some files in the IDE or set test.includes
-
+
Some tests failed; see details above.
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
-
+
Must select one file in the IDE or set test.class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
@@ -1076,9 +1420,12 @@ is divided into following sections:
-
-
-
+
+
+
+
+
+
diff --git a/EssentialsXMPP/nbproject/genfiles.properties b/EssentialsXMPP/nbproject/genfiles.properties
index ae2a6f962..744ffaed2 100644
--- a/EssentialsXMPP/nbproject/genfiles.properties
+++ b/EssentialsXMPP/nbproject/genfiles.properties
@@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=28e38971@1.42.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=1012a5dd
-nbproject/build-impl.xml.script.CRC32=8cccbe45
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.script.CRC32=db083724
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPPPlayerListener.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPPPlayerListener.java
index 1fa5a243c..17827c3c7 100644
--- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPPPlayerListener.java
+++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPPPlayerListener.java
@@ -2,10 +2,11 @@ package com.earth2me.essentials.xmpp;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
+import java.util.List;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
@@ -20,21 +21,21 @@ class EssentialsXMPPPlayerListener implements Listener
this.ess = ess;
}
- @EventHandler(priority= EventPriority.MONITOR)
+ @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(final PlayerJoinEvent event)
{
final User user = ess.getUser(event.getPlayer());
sendMessageToSpyUsers("Player " + user.getDisplayName() + " joined the game");
}
- @EventHandler(priority= EventPriority.MONITOR)
- public void onPlayerChat(final PlayerChatEvent event)
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerChat(final AsyncPlayerChatEvent event)
{
final User user = ess.getUser(event.getPlayer());
sendMessageToSpyUsers(String.format(event.getFormat(), user.getDisplayName(), event.getMessage()));
}
- @EventHandler(priority= EventPriority.MONITOR)
+ @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(final PlayerQuitEvent event)
{
final User user = ess.getUser(event.getPlayer());
@@ -45,9 +46,13 @@ class EssentialsXMPPPlayerListener implements Listener
{
try
{
- for (String address : EssentialsXMPP.getInstance().getSpyUsers())
+ List users = EssentialsXMPP.getInstance().getSpyUsers();
+ synchronized (users)
{
- EssentialsXMPP.getInstance().sendMessage(address, message);
+ for (String address : users)
+ {
+ EssentialsXMPP.getInstance().sendMessage(address, message);
+ }
}
}
catch (Exception ex)
diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java
index a35312129..6439c9b9d 100644
--- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java
+++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java
@@ -9,7 +9,7 @@ import java.util.*;
public class UserManager implements IConf
{
private final transient EssentialsConf users;
- private final transient List spyusers = new ArrayList();
+ private final transient List spyusers = Collections.synchronizedList(new ArrayList());
private final static String ADDRESS = "address";
private final static String SPY = "spy";
diff --git a/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar b/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar
index 01aed63a2..38246fd27 100644
Binary files a/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar and b/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar differ
diff --git a/lib/bukkit.jar b/lib/bukkit.jar
index cc304c6dd..4c865d0ed 100644
Binary files a/lib/bukkit.jar and b/lib/bukkit.jar differ
diff --git a/lib/craftbukkit.jar b/lib/craftbukkit.jar
index 39c783fa3..bc20058c5 100644
Binary files a/lib/craftbukkit.jar and b/lib/craftbukkit.jar differ
diff --git a/lib/nblibraries.properties b/lib/nblibraries.properties
index 0380a6c75..dfbfc5e2e 100644
--- a/lib/nblibraries.properties
+++ b/lib/nblibraries.properties
@@ -1,5 +1,7 @@
libs.CopyLibs.classpath=\
${base}/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar
+libs.CopyLibs.displayName=CopyLibs Task
+libs.CopyLibs.prop-version=1.0
libs.junit_4.10.classpath=\
${base}/junit_4.10/junit-4.10.jar
libs.junit_4.10.src=\