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=\