Compare commits

...
57 Commits
Author SHA1 Message Date
md678685 f7cbb141f8 Release 2.16.0
🎉
2019-01-03 20:47:24 +00:00
md678685 5690952516 Implement missing OfflinePlayer methods 2019-01-03 20:42:03 +00:00
md678685 e94202c55a Use 1.8-friendly User#getItemInHand method in commands 2019-01-03 20:33:08 +00:00
md678685 aa6ad271a0 Remove redundant metricsEnabled field from Settings 2019-01-03 20:33:08 +00:00
md678685 3b41bb47b6 Improve Travis build script (#2338)
I've added a new script at `scripts/buildtools.sh` that is responsible for:
* Checking whether CraftBukkit 1.8 and 1.8.3 are already available in the local Maven repo
* Downloading BuildTools if not already present
* Running BuildTools if necessary

This improves Travis build times as it now doesn't run BuildTools twice for *every single build*, instead running it only if the Travis cache fails and CraftBukkit is missing for some other reason.
2019-01-01 16:13:50 +00:00
md678685 e7bdb7fabc Improve the wording of the README's "Building" section 2019-01-01 15:42:45 +00:00
md678685 110698223d Travis: make build prep script executable 2019-01-01 15:23:35 +00:00
md678685 437be593b9 Add new build preparation script 2019-01-01 15:10:59 +00:00
md678685 502d37b574 Update Lombok to compile on Java 9+ 2018-12-31 17:44:08 +00:00
md678685 df59f9f859 Merge remote-tracking branch 'origin/2.x' into 1.13 2018-12-31 14:59:12 +00:00
md678685 f436fbab6b Remove redundant BuildTools runs 2018-12-31 14:54:59 +00:00
seema84 8404720501 change typos (#2328) @seema84
* change typos

* format text

* remove double color
2018-12-31 13:08:57 +00:00
md678685 4431d452f1 Bump to 2.16-pre4
Pretty much there now.
2018-12-31 13:02:08 +00:00
md678685 6a529d6671 Update EssentialsX Protect with cross-version enum lookups 2018-12-31 12:54:43 +00:00
md678685 78fca9a67a Updates signs with cross-version enum lookups 2018-12-31 12:53:41 +00:00
md678685 0114b5e4f6 Update several commands with cross-version enum lookups 2018-12-31 12:53:23 +00:00
md678685 5a14a64b6c Add cross-version support to SpawnMob 2018-12-31 12:24:41 +00:00
md678685 b555ea6350 Add cross-version support to MobData 2018-12-31 12:20:05 +00:00
md678685 361ae1dd16 Use constant field for "harp"/"piano" sound 2018-12-31 12:19:22 +00:00
md678685 58117eba88 Remove redundant BuildTools instructions 2018-12-31 12:18:45 +00:00
md678685 6260b49b4f Restore item ID messages in /itemdb 2018-12-31 11:57:15 +00:00
md678685 988239267b Restore durability permissions checks in AntiBuild 2018-12-31 11:56:50 +00:00
md678685 19cffe3872 Restore ID-based charges in /repair 2018-12-31 11:39:08 +00:00
md678685 3b1cef918e Simplify item spawn permission checks; restore ID-based item spawn perms 2018-12-31 11:29:27 +00:00
md678685 3553328f7a Bump to 2.16-pre3 2018-12-29 21:22:08 +00:00
md678685 0202271f00 Add missing FakeWorld methods 2018-12-29 21:16:17 +00:00
md678685 d91d6a419c Update items.json
* Fix incorrect "cobblestone" and "stone" aliases
* Fix stripped log aliases not appearing
* Fix meat/fish aliases pointing to spawn eggs
2018-12-28 16:40:39 +00:00
md678685 5173090474 Update items.json
Adds more minecart, meat, fish and hay aliases.
2018-12-26 21:05:48 +00:00
md678685 c26df8318f Update items.json
* Add more shorter spawn egg aliases
* Add new trapdoor aliases
* Add new infested block aliases and stone brick variants
2018-12-26 19:24:50 +00:00
md678685 7b44f0088a Update items.json
* Add spawn eggs aliases
* Add new aliases for several items and blocks like beetroot, pumpkins and crafting tables
* Remove `WALL_` materials (these are unspawnable)
2018-12-26 18:05:55 +00:00
md678685 aa4d3cc9fd Bump to 2.16-pre2 2018-12-25 00:27:54 +00:00
md678685 246fd03265 Fix typo in README 2018-12-23 23:33:46 +00:00
md678685 55074872fe Add setting to enable item ID recognition on signs
Item IDs can now be enabled for existing signs by manually changing a config option, but there is no facility to create new signs with item IDs.
2018-12-23 23:02:36 +00:00
md678685 28559dda3a Lowercase the provided ID in FlatItemDb#get 2018-12-23 19:45:23 +00:00
md678685 cbcfad5b2e Merge branch '2.x' into 1.13 2018-12-23 19:33:20 +00:00
md678685 a9ad440860 Overhaul AbstractItemDb.serialize to use MaterialUtil methods 2018-12-23 19:32:10 +00:00
md678685 5104463593 Add MaterialUtil.getColorOf 2018-12-23 19:31:33 +00:00
md678685 4b1c51c21d Reword IItemDb#serialize docs 2018-12-23 18:02:38 +00:00
md678685 236ef52980 Improved README (#2293)
I've made several improvements to the README, including:
* Overall rewording to make phrasing feel less awkward
* Added links to Patreon
* More consistent images for links at top
* Consolidated "Why you should use it" and "Other info" into "Why use EssentialsX?"
* More specific about version support
* Moved "Support" section above "Building" and added explanation
* Removed redundant "Commit Guidelines" section
  - It has been totally ignored for years, and it doesn't make much sense to keep it
* Added a new "Contributing" section near the bottom
2018-12-23 17:21:31 +00:00
md678685 f220c5b406 Update Estonian sudoExempt message
Thanks to @Madis0 for [pointing this out and translating it](https://github.com/EssentialsX/Essentials/pull/2228#issuecomment-449586891).
2018-12-22 17:47:39 +00:00
Thomas 9415582fe1 Update messages_nl.properties (#2129) @DutchUser
* Update messages_nl.properties

* Update messages_nl.properties

* Update messages_nl.properties

* Update messages_nl.properties

* Update messages_nl.properties
2018-12-22 17:42:42 +00:00
Sprungente a5a3630727 [Finish] Improving German localization (#2198) @Sprungente
* Improving 

I found some stuff to improve the translation. I'm not done yet but i think it's ready to get an eye on it. 

Hope it will be used :)

Greets Sprungente/enterih

* mistake^^

^

* Part 2

Adding more Improvements
Hope it helps other serverowners^^

* Part 2 fixes

* Part 3 



Notice for me 
a-d finished
\u00f6 ö    \u00e4 ä  \u00fc ü

* Part 4

Notice for me 
a-i finished
\u00f6 ö    \u00e4 ä  \u00fc ü

* Last part 

is line 456
requiredBukkit=\u00a76* \! * Du brauchst mindestens CraftBukkit Build \#{0}, lade es von http\://dl.bukkit.org/downloads/craftbukkit/
still exist? If yes, could a reference to spigot be added?

It's ready to merge. Can i take care on it in the future?

* small polishing

* Update messages_de.properties

* Update messages_de.properties

* Adding new strings 

added strings from #2278
2018-12-22 17:39:44 +00:00
Madis f4c36d9c43 Estonian translation update (#2228)
* Initial improvements

* Half done

* Almost done

* Translation done

* Encode umlauts

* Additional refinements

* Minor fix

* Some more tweaks

* Minor wording change

* 1.13 strings
2018-12-22 17:36:47 +00:00
md678685 492005d00a Fix LegacyItemID method override 2018-12-15 19:11:41 +00:00
md678685 149d9b61cc Add methods to facilitate conversion from IDs to new Materials 2018-12-15 18:54:01 +00:00
md678685 77ffb6a3d5 Slightly simplify FlatItemDb 2018-12-15 18:53:06 +00:00
md678685 d95b632884 Merge branch '2.x' into 1.13 2018-12-11 14:31:42 +00:00
md678685 579f554edb Update nickname again after toggling AFK status 2018-12-11 13:26:15 +00:00
md678685 050287f306 Add 1.13 enchantments
Fixes #2254.
2018-12-11 10:04:38 +00:00
md678685 dafe156212 Merge branch '2.x' into 1.13 2018-12-09 15:25:31 +00:00
md678685 48bf264178 Fix discrepancies between default and EN locale 2018-12-09 15:21:07 +00:00
md678685 769dbe8852 Fix BukkitVersion's toString and equals 2018-12-09 15:16:44 +00:00
md678685 67bccb865a Remove colour codes from serverUnsupported in EN locale 2018-12-09 15:16:18 +00:00
md678685 d1e60de04a Ignore kits.yml created during tests 2018-12-09 15:15:55 +00:00
md678685 89d592ce43 Improve item-spawn-blacklist load logging 2018-12-09 14:58:56 +00:00
md678685 c06dda886d Actually use the force-enable-recipe option from the config 2018-12-09 14:58:36 +00:00
md678685 7b67b3b858 Don't send empty line join/quit messages
GitHub meta: fixes #991 fixes #2289
2018-12-06 14:06:25 +00:00
69 changed files with 4376 additions and 1789 deletions

No files matched your search

+2
View File
@@ -39,6 +39,7 @@
/jars
/out
.idea/
.buildtools/
*.iml
*.classpath
*.project
@@ -46,6 +47,7 @@
target/
dependency-reduced-pom.xml
/Essentials/config.yml
/Essentials/kits.yml
/Essentials/userdata/testplayer1.yml
/Essentials/usermap.csv
/Essentials/userdata
+2 -15
View File
@@ -1,23 +1,10 @@
language: java
branches:
only:
- 2.x
- 1.13
cache:
directories:
- .buildtools
- $HOME/.m2
before_install:
- mkdir -p .buildtools
- cd .buildtools
- wget -O BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
- rm -r work/
- java -jar BuildTools.jar --rev 1.8
- java -jar BuildTools.jar --rev 1.8.3
- java -jar BuildTools.jar --rev 1.9
- java -jar BuildTools.jar --rev 1.9.4
- java -jar BuildTools.jar --rev 1.13.1
- cd ..
- chmod +x scripts/buildtools.sh
- scripts/buildtools.sh
@@ -199,6 +199,38 @@ public class Enchantments {
ALIASENCHANTMENTS.put("sweeping", sweeping);
}
} catch (IllegalArgumentException ignored) {}
try { // 1.13
Enchantment loyalty = Enchantment.getByName("LOYALTY");
if (loyalty != null) {
ENCHANTMENTS.put("loyalty", loyalty);
ALIASENCHANTMENTS.put("loyal", loyalty);
ALIASENCHANTMENTS.put("return", loyalty);
}
Enchantment impaling = Enchantment.getByName("IMPALING");
if (impaling != null) {
ENCHANTMENTS.put("impaling", impaling);
ALIASENCHANTMENTS.put("impale", impaling);
ALIASENCHANTMENTS.put("oceandamage", impaling);
ALIASENCHANTMENTS.put("oceandmg", impaling);
}
Enchantment riptide = Enchantment.getByName("RIPTIDE");
if (riptide != null) {
ENCHANTMENTS.put("riptide", riptide);
ALIASENCHANTMENTS.put("rip", riptide);
ALIASENCHANTMENTS.put("tide", riptide);
ALIASENCHANTMENTS.put("launch", riptide);
}
Enchantment channelling = Enchantment.getByName("CHANNELING");
if (channelling != null) {
ENCHANTMENTS.put("channelling", channelling);
ALIASENCHANTMENTS.put("chanelling", channelling);
ALIASENCHANTMENTS.put("channeling", channelling);
ALIASENCHANTMENTS.put("chaneling", channelling);
ALIASENCHANTMENTS.put("channel", channelling);
}
} catch (IllegalArgumentException ignored) {}
}
public static Enchantment getByName(String name) {
@@ -152,7 +152,12 @@ public class EssentialsPlayerListener implements Listener {
event.setQuitMessage(null);
} else if (ess.getSettings().isCustomQuitMessage() && event.getQuitMessage() != null) {
final Player player = event.getPlayer();
event.setQuitMessage(ess.getSettings().getCustomQuitMessage().replace("{PLAYER}", player.getDisplayName()).replace("{USERNAME}", player.getName()).replace("{ONLINE}", NumberFormat.getInstance().format(ess.getOnlinePlayers().size())));
final String msg = ess.getSettings().getCustomQuitMessage()
.replace("{PLAYER}", player.getDisplayName())
.replace("{USERNAME}", player.getName())
.replace("{ONLINE}", NumberFormat.getInstance().format(ess.getOnlinePlayers().size()));
event.setQuitMessage(msg.isEmpty() ? null : msg);
}
user.startTransaction();
@@ -260,7 +265,9 @@ public class EssentialsPlayerListener implements Listener {
.replace("{PLAYER}", player.getDisplayName()).replace("{USERNAME}", player.getName())
.replace("{UNIQUE}", NumberFormat.getInstance().format(ess.getUserMap().getUniqueUsers()))
.replace("{ONLINE}", NumberFormat.getInstance().format(ess.getOnlinePlayers().size()));
ess.getServer().broadcastMessage(msg);
if (!msg.isEmpty()) {
ess.getServer().broadcastMessage(msg);
}
} else if (ess.getSettings().allowSilentJoinQuit()) {
ess.getServer().broadcastMessage(message);
}
@@ -320,4 +320,6 @@ public interface ISettings extends IConf {
String getItemDbType();
boolean isForceEnableRecipe();
boolean allowOldIdSigns();
}
@@ -1,6 +1,7 @@
package com.earth2me.essentials;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.StringUtil;
import org.bukkit.DyeColor;
import org.bukkit.Material;
@@ -53,9 +54,9 @@ public enum MobData {
BAY_HORSE("bay", EntityType.HORSE, Horse.Color.BROWN, true),
BROWN_HORSE("brown", EntityType.HORSE, Horse.Color.BROWN, false),
SADDLE_HORSE("saddle", EntityType.HORSE, Data.HORSESADDLE, true),
GOLD_ARMOR_HORSE("goldarmor", EntityType.HORSE, Material.GOLDEN_HORSE_ARMOR, true),
DIAMOND_ARMOR_HORSE("diamondarmor", EntityType.HORSE, Material.DIAMOND_HORSE_ARMOR, true),
ARMOR_HORSE("armor", EntityType.HORSE, Material.IRON_HORSE_ARMOR, true),
GOLD_ARMOR_HORSE("goldarmor", EntityType.HORSE, EnumUtil.getMaterial("GOLDEN_HORSE_ARMOR", "GOLD_BARDING"), true),
DIAMOND_ARMOR_HORSE("diamondarmor", EntityType.HORSE, EnumUtil.getMaterial("DIAMOND_HORSE_ARMOR", "DIAMOND_BARDING"), true),
ARMOR_HORSE("armor", EntityType.HORSE, EnumUtil.getMaterial("IRON_HORSE_ARMOR", "IRON_BARDING"), true),
SIAMESE_CAT("siamese", EntityType.OCELOT, Ocelot.Type.SIAMESE_CAT, true),
WHITE_CAT("white", EntityType.OCELOT, Ocelot.Type.SIAMESE_CAT, false),
RED_CAT("red", EntityType.OCELOT, Ocelot.Type.RED_CAT, true),
@@ -66,12 +67,12 @@ public enum MobData {
BABY_ZOMBIE("baby", EntityType.ZOMBIE.getEntityClass(), Data.BABYZOMBIE, true),
ADULT_ZOMBIE("adult", EntityType.ZOMBIE.getEntityClass(), Data.ADULTZOMBIE, true),
DIAMOND_SWORD_ZOMBIE("diamondsword", EntityType.ZOMBIE.getEntityClass(), Material.DIAMOND_SWORD, true),
GOLD_SWORD_ZOMBIE("goldsword", EntityType.ZOMBIE.getEntityClass(), Material.GOLDEN_SWORD, true),
GOLD_SWORD_ZOMBIE("goldsword", EntityType.ZOMBIE.getEntityClass(), EnumUtil.getMaterial("GOLDEN_SWORD", "GOLD_SWORD"), true),
IRON_SWORD_ZOMBIE("ironsword", EntityType.ZOMBIE.getEntityClass(), Material.IRON_SWORD, true),
STONE_SWORD_ZOMBIE("stonesword", EntityType.ZOMBIE.getEntityClass(), Material.STONE_SWORD, false),
SWORD_ZOMBIE("sword", EntityType.ZOMBIE.getEntityClass(), Material.STONE_SWORD, true),
DIAMOND_SWORD_SKELETON("diamondsword", EntityType.SKELETON, Material.DIAMOND_SWORD, true),
GOLD_SWORD_SKELETON("goldsword", EntityType.SKELETON, Material.GOLDEN_SWORD, true),
GOLD_SWORD_SKELETON("goldsword", EntityType.SKELETON, EnumUtil.getMaterial("GOLDEN_SWORD", "GOLD_SWORD"), true),
IRON_SWORD_SKELETON("ironsword", EntityType.SKELETON, Material.IRON_SWORD, true),
STONE_SWORD_SKELETON("stonesword", EntityType.SKELETON, Material.STONE_SWORD, false),
SWORD_SKELETON("sword", EntityType.SKELETON, Material.STONE_SWORD, true),
@@ -787,6 +787,21 @@ public class OfflinePlayer implements Player {
public void setBedSpawnLocation(Location lctn, boolean force) {
}
@Override
public boolean sleep(Location location, boolean force) {
return false;
}
@Override
public void wakeup(boolean setSpawnLocation) {
}
@Override
public Location getBedLocation() {
return null;
}
@Override
public void playEffect(EntityEffect ee) {
}
@@ -36,7 +36,6 @@ public class Settings implements net.ess3.api.ISettings {
private final transient EssentialsConf config;
private static final Logger logger = Logger.getLogger("Essentials");
private final transient IEssentials ess;
private boolean metricsEnabled = true;
public Settings(IEssentials ess) {
this.ess = ess;
@@ -539,6 +538,7 @@ public class Settings implements net.ess3.api.ISettings {
isAllowWorldInBroadcastworld = _isAllowWorldInBroadcastworld();
itemDbType = _getItemDbType();
forceEnableRecipe = _isForceEnableRecipe();
allowOldIdSigns = _allowOldIdSigns();
}
private List<Material> itemSpawnBl = new ArrayList<Material>();
@@ -551,7 +551,7 @@ public class Settings implements net.ess3.api.ISettings {
private List<Material> _getItemSpawnBlacklist() {
final List<Material> epItemSpwn = new ArrayList<>();
if (ess.getItemDb() == null) {
logger.log(Level.FINE, "Aborting ItemSpawnBL read, itemDB not yet loaded.");
logger.log(Level.FINE, "Skipping item spawn blacklist read; item DB not yet loaded.");
return epItemSpwn;
}
for (String itemName : config.getString("item-spawn-blacklist", "").split(",")) {
@@ -563,7 +563,7 @@ public class Settings implements net.ess3.api.ISettings {
final ItemStack iStack = ess.getItemDb().get(itemName);
epItemSpwn.add(iStack.getType());
} catch (Exception ex) {
logger.log(Level.SEVERE, tl("unknownItemInList", itemName, "item-spawn-blacklist"));
logger.log(Level.SEVERE, tl("unknownItemInList", itemName, "item-spawn-blacklist"), ex);
}
}
return epItemSpwn;
@@ -1488,6 +1488,17 @@ public class Settings implements net.ess3.api.ISettings {
@Override
public boolean isForceEnableRecipe() {
return false;
return forceEnableRecipe;
}
private boolean allowOldIdSigns;
private boolean _allowOldIdSigns() {
return config.getBoolean("allow-old-id-signs", false);
}
@Override
public boolean allowOldIdSigns() {
return allowOldIdSigns;
}
}
@@ -2,6 +2,7 @@ package com.earth2me.essentials;
import com.earth2me.essentials.Mob.MobException;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.LocationUtil;
import com.earth2me.essentials.utils.StringUtil;
import net.ess3.api.IEssentials;
@@ -19,6 +20,13 @@ import static com.earth2me.essentials.I18n.tl;
public class SpawnMob {
private static final Material GOLDEN_HELMET = EnumUtil.getMaterial("GOLDEN_HELMET", "GOLD_HELMET");
private static final Material GOLDEN_CHESTPLATE = EnumUtil.getMaterial("GOLDEN_CHESTPLATE", "GOLD_CHESTPLATE");
private static final Material GOLDEN_LEGGINGS = EnumUtil.getMaterial("GOLDEN_LEGGINGS", "GOLD_LEGGINGS");
private static final Material GOLDEN_BOOTS = EnumUtil.getMaterial("GOLDEN_BOOTS", "GOLD_BOOTS");
private static final Material GOLDEN_SWORD = EnumUtil.getMaterial("GOLDEN_SWORD", "GOLD_SWORD");
public static String mobList(final User user) {
final Set<String> mobList = Mob.getMobList();
final Set<String> availableList = new HashSet<String>();
@@ -191,10 +199,10 @@ public class SpawnMob {
invent.setChestplate(new ItemStack(Material.DIAMOND_CHESTPLATE, 1));
invent.setHelmet(new ItemStack(Material.DIAMOND_HELMET, 1));
} else if (inputData.contains("gold")) {
invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1));
invent.setLeggings(new ItemStack(Material.GOLDEN_LEGGINGS, 1));
invent.setChestplate(new ItemStack(Material.GOLDEN_CHESTPLATE, 1));
invent.setHelmet(new ItemStack(Material.GOLDEN_HELMET, 1));
invent.setBoots(new ItemStack(GOLDEN_BOOTS, 1));
invent.setLeggings(new ItemStack(GOLDEN_LEGGINGS, 1));
invent.setChestplate(new ItemStack(GOLDEN_CHESTPLATE, 1));
invent.setHelmet(new ItemStack(GOLDEN_HELMET, 1));
} else if (inputData.contains("leather")) {
invent.setBoots(new ItemStack(Material.LEATHER_BOOTS, 1));
invent.setLeggings(new ItemStack(Material.LEATHER_LEGGINGS, 1));
@@ -228,7 +236,7 @@ public class SpawnMob {
InventoryWorkaround.setItemInMainHand(invent, new ItemStack(Material.BOW, 1));
InventoryWorkaround.setItemInMainHandDropChance(invent, 0.1f);
invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1));
invent.setBoots(new ItemStack(GOLDEN_BOOTS, 1));
invent.setBootsDropChance(0.0f);
}
@@ -237,10 +245,10 @@ public class SpawnMob {
setVillager(zombie, false);
final EntityEquipment invent = zombie.getEquipment();
InventoryWorkaround.setItemInMainHand(invent, new ItemStack(Material.GOLDEN_SWORD, 1));
InventoryWorkaround.setItemInMainHand(invent, new ItemStack(GOLDEN_SWORD, 1));
InventoryWorkaround.setItemInMainHandDropChance(invent, 0.1f);
invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1));
invent.setBoots(new ItemStack(GOLDEN_BOOTS, 1));
invent.setBootsDropChance(0.0f);
}
@@ -249,7 +257,7 @@ public class SpawnMob {
setVillager(zombie, false);
final EntityEquipment invent = zombie.getEquipment();
invent.setBoots(new ItemStack(Material.GOLDEN_BOOTS, 1));
invent.setBoots(new ItemStack(GOLDEN_BOOTS, 1));
invent.setBootsDropChance(0.0f);
}
@@ -8,6 +8,7 @@ import com.earth2me.essentials.register.payment.Methods;
import com.earth2me.essentials.utils.DateUtil;
import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.NumberUtil;
import com.earth2me.essentials.utils.VersionUtil;
import net.ess3.api.IEssentials;
import net.ess3.api.MaxMoneyException;
import net.ess3.api.events.AfkStatusChangeEvent;
@@ -27,12 +28,7 @@ import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.WeakHashMap;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -224,7 +220,18 @@ public class User extends UserData implements Comparable<User>, IMessageRecipien
@Override
public Boolean canSpawnItem(final Material material) {
return !ess.getSettings().itemSpawnBlacklist().contains(material);
if (ess.getSettings().permissionBasedItemSpawn()) {
final String name = material.toString().toLowerCase(Locale.ENGLISH).replace("_", "");
if (isAuthorized("essentials.itemspawn.item-all") || isAuthorized("essentials.itemspawn.item-" + name)) return true;
if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01)) {
final int id = material.getId();
if (isAuthorized("essentials.itemspawn.item-" + id)) return true;
}
}
return isAuthorized("essentials.itemspawn.exempt") || !ess.getSettings().itemSpawnBlacklist().contains(material);
}
@Override
@@ -872,7 +879,7 @@ public class User extends UserData implements Comparable<User>, IMessageRecipien
* Returns the {@link ItemStack} in the main hand or off-hand. If the main hand is empty then the offhand item is returned - also nullable.
*/
public ItemStack getItemInHand() {
if (ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_9_R1)) {
if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) {
return getBase().getInventory().getItemInHand();
} else {
PlayerInventory inventory = getBase().getInventory();
@@ -1,33 +1,156 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.MaterialUtil;
import com.earth2me.essentials.utils.NumberUtil;
import com.earth2me.essentials.utils.StringUtil;
import net.ess3.api.IEssentials;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
public interface IItemDb {
ItemStack get(final String name, final int quantity) throws Exception;
/**
* Create a stack from the given name with the given quantity.
*
* @param name Item name to look up in the database
* @param quantity Quantity of the item stack
* @return The requested item stack
* @throws Exception if the item stack cannot be created
*/
default ItemStack get(final String name, final int quantity) throws Exception {
final ItemStack stack = get(name.toLowerCase(Locale.ENGLISH));
stack.setAmount(quantity);
return stack;
}
/**
* Create a stack from the given name with the maximum stack size for that material.
*
* @param name Item name to look up in the database
* @return The requested item stack with the maximum stack size
* @throws Exception if the item stack cannot be created
*/
ItemStack get(final String name) throws Exception;
String names(ItemStack item);
/**
* Get a comma-separated string list of up to 15 aliases for the given stack.
*
* @param item Item stack whose names to find
* @return Comma-separated list of up to 15 item names
*/
default String names(ItemStack item) {
List<String> nameList = nameList(item);
if (nameList.size() > 15) {
nameList = nameList.subList(0, 14);
}
return StringUtil.joinList(", ", nameList);
};
/**
* Get a List of all aliases for the given item stack.
*
* @param item Item stack whose names to find
* @return List of all names
*/
List<String> nameList(ItemStack item);
/**
* Get the primary name for the given item stack.
*
* @param item Item stack whose name to find
* @return Primary name of the item
*/
String name(ItemStack item);
/**
* Get all stacks in a given User's inventory that matches the given arguments.
*
* @param user The user with the player inventory to search
* @param args Either an item name, or one of the following:
* hand (default), inventory/invent/all, blocks
* @return A List of all matching ItemStacks
* @throws Exception if the given args are invalid or no blocks are found
*/
List<ItemStack> getMatching(User user, String[] args) throws Exception;
/**
* Serialise an ItemStack into a format that can be decoded by
* {@link #get(String) get} and
* {@link com.earth2me.essentials.MetaItemStack#parseStringMeta(CommandSource, boolean, String[], int, IEssentials)} MetaItemStack#parseStringMeta}.
* Used to encode items for kits.
*
* @param is Stack to serialise
* @return Serialised stack
*/
String serialize(ItemStack is);
/**
* Return names recognised by the database, intended for tab-completion.
*
* @return Collection of all item names
*/
Collection<String> listNames();
/**
* Get the material matching the given legacy ID. Used for conversion from item IDs to
* modern names.
*
* @param id Legacy ID of material to find
* @return Updated material
*/
@Deprecated
Material getFromLegacyId(int id);
default Material getFromLegacyId(int id) {
return getFromLegacy(id, (byte) 0);
}
/**
* Get the legacy ID for the given material.
*
* @param material Material to look up
* @return Legacy ID of given material
* @throws Exception if the ID cannot be looked up
* @deprecated Item IDs are no longer supported.
*/
@Deprecated
int getLegacyId(Material material) throws Exception;
/**
* Convert colon syntax (eg. "13", "1:5") legacy IDs to Material. Used for conversion from
* item IDs to modern names.
*
* @param item Legacy ID in colon syntax.
* @return
*/
default Material getFromLegacy(String item) {
final String[] split = item.split(":");
final int id = Integer.parseInt(split[0]);
byte damage = 0;
if (split.length > 1 && NumberUtil.isInt(split[1])) {
damage = Byte.parseByte(split[1]);
}
return getFromLegacy(id, damage);
}
/**
* Convert legacy ID and damage value to Material. Used for conversion from item IDs to
* modern names.
*
* @param id Legacy ID
* @param damage Damage value
* @return Material
*/
default Material getFromLegacy(final int id, final byte damage) {
return MaterialUtil.convertFromLegacy(id, damage);
}
}
@@ -79,6 +79,7 @@ public class Commandafk extends EssentialsCommand {
if (!msg.isEmpty()) {
ess.broadcastMessage(user, msg);
}
user.setDisplayNick(); // Set this again after toggling
}
@Override
@@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.User;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import com.earth2me.essentials.utils.EnumUtil;
import com.google.common.collect.Lists;
import org.bukkit.Material;
import org.bukkit.Server;
@@ -15,6 +16,9 @@ import static com.earth2me.essentials.I18n.tl;
public class Commandbook extends EssentialsCommand {
private static final Material WRITABLE_BOOK = EnumUtil.getMaterial("WRITABLE_BOOK", "BOOK_AND_QUILL");
public Commandbook() {
super("book");
}
@@ -44,7 +48,7 @@ public class Commandbook extends EssentialsCommand {
}
} else {
if (isAuthor(bmeta, player) || user.isAuthorized("essentials.book.others")) {
ItemStack newItem = new ItemStack(Material.WRITABLE_BOOK, item.getAmount());
ItemStack newItem = new ItemStack(WRITABLE_BOOK, item.getAmount());
newItem.setItemMeta(bmeta);
InventoryWorkaround.setItemInMainHand(user.getBase(), newItem);
user.sendMessage(tl("editBookContents"));
@@ -52,7 +56,7 @@ public class Commandbook extends EssentialsCommand {
throw new Exception(tl("denyBookEdit"));
}
}
} else if (item.getType() == Material.WRITABLE_BOOK) {
} else if (item.getType() == WRITABLE_BOOK) {
BookMeta bmeta = (BookMeta) item.getItemMeta();
if (!user.isAuthorized("essentials.book.author")) {
bmeta.setAuthor(player);
@@ -4,7 +4,6 @@ import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.EssentialsUpgrade;
import com.earth2me.essentials.User;
import com.earth2me.essentials.UserMap;
import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.utils.*;
import com.google.common.base.Charsets;
import com.google.common.collect.Lists;
@@ -17,13 +16,15 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginManager;
import java.io.IOException;
import java.util.*;
import static com.earth2me.essentials.I18n.tl;
// This command has 4 undocumented behaviours #EasterEgg
public class Commandessentials extends EssentialsCommand {
private final Sound NOTE_HARP = EnumUtil.valueOf(Sound.class, "BLOCK_NOTE_HARP", "NOTE_PIANO");
public Commandessentials() {
super("essentials");
}
@@ -154,15 +155,9 @@ public class Commandessentials extends EssentialsCommand {
if (note == null || note.isEmpty()) {
return;
}
Sound noteHarp;
try {
noteHarp = Sound.valueOf("NOTE_PIANO"); // pre-1.9, referenced internally as note.harp
} catch (IllegalArgumentException e) {
noteHarp = Sound.valueOf("BLOCK_NOTE_HARP"); // 1.9
}
for (Player onlinePlayer : ess.getOnlinePlayers()) {
onlinePlayer.playSound(onlinePlayer.getLocation(), noteHarp, 1, noteMap.get(note));
onlinePlayer.playSound(onlinePlayer.getLocation(), NOTE_HARP, 1, noteMap.get(note));
}
}
}, 20, 2);
@@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.MetaItemStack;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.MaterialUtil;
import com.earth2me.essentials.utils.NumberUtil;
import com.google.common.collect.Lists;
import org.bukkit.DyeColor;
@@ -43,8 +44,8 @@ public class Commandfirework extends EssentialsCommand {
@Override
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception {
final ItemStack stack = user.getBase().getInventory().getItemInMainHand();
if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) {
final ItemStack stack = user.getItemInHand();
if (MaterialUtil.isFirework(stack.getType())) {
if (args.length > 0) {
if (args[0].equalsIgnoreCase("clear")) {
FireworkMeta fmeta = (FireworkMeta) stack.getItemMeta();
@@ -31,9 +31,9 @@ public class Commandgive extends EssentialsCommand {
}
ItemStack stack = ess.getItemDb().get(args[1]);
final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
if (sender.isPlayer() && (ess.getSettings().permissionBasedItemSpawn() ? (!ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-all") && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.item-" + itemname)) : (!ess.getUser(sender.getPlayer()).isAuthorized("essentials.itemspawn.exempt") && !ess.getUser(sender.getPlayer()).canSpawnItem(stack.getType())))) {
if (sender.isPlayer() && !ess.getUser(sender.getPlayer()).canSpawnItem(stack.getType())) {
throw new Exception(tl("cantSpawnItem", itemname));
}
@@ -33,8 +33,8 @@ public class Commandhat extends EssentialsCommand {
user.sendMessage(tl("hatRemoved"));
}
} else {
if (user.getBase().getInventory().getItemInMainHand().getType() != Material.AIR) {
final ItemStack hand = user.getBase().getInventory().getItemInMainHand();
final ItemStack hand = user.getItemInHand();
if (hand != null && hand.getType() != Material.AIR) {
if (hand.getType().getMaxDurability() == 0) {
final PlayerInventory inv = user.getBase().getInventory();
final ItemStack head = inv.getHelmet();
@@ -29,9 +29,10 @@ public class Commanditem extends EssentialsCommand {
ItemStack stack = ess.getItemDb().get(args[0]);
final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
if (ess.getSettings().permissionBasedItemSpawn() ? (!user.isAuthorized("essentials.itemspawn.item-all") && !user.isAuthorized("essentials.itemspawn.item-" + itemname)) : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getType()))) {
if (!user.canSpawnItem(stack.getType())) {
throw new Exception(tl("cantSpawnItem", itemname));
}
try {
if (args.length > 1 && Integer.parseInt(args[1]) > 0) {
stack.setAmount(Integer.parseInt(args[1]));
@@ -1,6 +1,7 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.utils.VersionUtil;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.inventory.ItemStack;
@@ -23,7 +24,7 @@ public class Commanditemdb extends EssentialsCommand {
if (args.length < 1) {
if (sender.isPlayer() && sender.getPlayer() != null) {
itemHeld = true;
itemStack = sender.getPlayer().getInventory().getItemInMainHand();
itemStack = ess.getUser(sender.getPlayer()).getItemInHand();
}
if (itemStack == null) {
throw new NotEnoughArgumentsException();
@@ -34,6 +35,11 @@ public class Commanditemdb extends EssentialsCommand {
sender.sendMessage(tl("itemType", itemStack.getType().toString()));
if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01)) {
final String itemId = itemStack.getType().getId() + ":" + itemStack.getDurability();
sender.sendMessage(tl("itemId", itemId));
}
if (itemHeld && itemStack.getType() != Material.AIR) {
int maxuses = itemStack.getType().getMaxDurability();
int durability = ((maxuses + 1) - itemStack.getDurability());
@@ -16,7 +16,7 @@ public class Commandmore extends EssentialsCommand {
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception {
final ItemStack stack = user.getBase().getInventory().getItemInMainHand();
final ItemStack stack = user.getItemInHand();
if (stack == null) {
throw new Exception(tl("cantSpawnItem", "Air"));
}
@@ -25,7 +25,7 @@ public class Commandmore extends EssentialsCommand {
throw new Exception(tl("fullStack"));
}
final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
if (ess.getSettings().permissionBasedItemSpawn() ? (!user.isAuthorized("essentials.itemspawn.item-all") && !user.isAuthorized("essentials.itemspawn.item-" + itemname)) : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getType()))) {
if (!user.canSpawnItem(stack.getType())) {
throw new Exception(tl("cantSpawnItem", itemname));
}
if (user.isAuthorized("essentials.oversizedstacks")) {
@@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.NumberUtil;
import com.earth2me.essentials.utils.VersionUtil;
import org.bukkit.Material;
@@ -20,6 +21,11 @@ import net.ess3.nms.refl.ReflUtil;
public class Commandrecipe extends EssentialsCommand {
private static final Material FIREWORK_ROCKET = EnumUtil.getMaterial("FIREWORK_ROCKET", "FIREWORK");
private static final Material FIREWORK_STAR = EnumUtil.getMaterial("FIREWORK_STAR", "FIREWORK_CHARGE");
private static final Material GUNPOWDER = EnumUtil.getMaterial("GUNPOWDER", "SULPHUR");
public Commandrecipe() {
super("recipe");
}
@@ -67,11 +73,11 @@ public class Commandrecipe extends EssentialsCommand {
} else if (selectedRecipe instanceof ShapedRecipe) {
shapedRecipe(sender, (ShapedRecipe) selectedRecipe, sender.isPlayer());
} else if (selectedRecipe instanceof ShapelessRecipe) {
if (recipesOfType.size() == 1 && (itemType.getType() == Material.FIREWORK_ROCKET || itemType.getType() == Material.FIREWORK_STAR)) {
if (recipesOfType.size() == 1 && (itemType.getType() == FIREWORK_ROCKET)) {
ShapelessRecipe shapelessRecipe = new ShapelessRecipe(itemType);
shapelessRecipe.addIngredient(Material.LEGACY_SULPHUR);
shapelessRecipe.addIngredient(GUNPOWDER);
shapelessRecipe.addIngredient(Material.PAPER);
shapelessRecipe.addIngredient(Material.FIREWORK_ROCKET);
shapelessRecipe.addIngredient(FIREWORK_STAR);
shapelessRecipe(sender, shapelessRecipe, sender.isPlayer());
} else {
shapelessRecipe(sender, (ShapelessRecipe) selectedRecipe, sender.isPlayer());
@@ -4,6 +4,7 @@ import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.StringUtil;
import com.earth2me.essentials.utils.VersionUtil;
import com.google.common.collect.Lists;
import net.ess3.api.IUser;
import org.bukkit.Material;
@@ -38,7 +39,7 @@ public class Commandrepair extends EssentialsCommand {
}
public void repairHand(User user) throws Exception {
final ItemStack item = user.getBase().getInventory().getItemInMainHand();
final ItemStack item = user.getItemInHand();
if (item == null || item.getType().isBlock() || item.getDurability() == 0) {
throw new Exception(tl("repairInvalidType"));
}
@@ -48,7 +49,7 @@ public class Commandrepair extends EssentialsCommand {
}
final String itemName = item.getType().toString().toLowerCase(Locale.ENGLISH);
final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-item", ess), ess);
final Trade charge = getCharge(item.getType());
charge.isAffordableFor(user);
@@ -95,7 +96,8 @@ public class Commandrepair extends EssentialsCommand {
}
final String itemName = item.getType().toString().toLowerCase(Locale.ENGLISH);
final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-item", ess), ess);
final Trade charge = getCharge(item.getType());
try {
charge.isAffordableFor(user);
} catch (ChargeException ex) {
@@ -120,6 +122,16 @@ public class Commandrepair extends EssentialsCommand {
}
}
private Trade getCharge(final Material material) {
final String itemName = material.toString().toLowerCase(Locale.ENGLISH);
if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01)) {
final int itemId = material.getId();
return new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-" + itemId, new Trade("repair-item", ess), ess), ess);
} else {
return new Trade("repair-" + itemName.replace('_', '-'), new Trade("repair-item", ess), ess);
}
}
@Override
protected List<String> getTabCompleteOptions(Server server, User user, String commandLabel, String[] args) {
if (args.length == 1) {
@@ -2,6 +2,8 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.User;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.MaterialUtil;
import com.google.common.collect.Lists;
import org.bukkit.Material;
import org.bukkit.Server;
@@ -14,6 +16,9 @@ import java.util.List;
import static com.earth2me.essentials.I18n.tl;
public class Commandskull extends EssentialsCommand {
private static final Material SKULL_ITEM = EnumUtil.getMaterial("PLAYER_HEAD", "SKULL_ITEM");
public Commandskull() {
super("skull");
}
@@ -31,14 +36,14 @@ public class Commandskull extends EssentialsCommand {
owner = user.getName();
}
ItemStack itemSkull = user.getBase().getInventory().getItemInMainHand();
ItemStack itemSkull = user.getItemInHand();
SkullMeta metaSkull = null;
boolean spawn = false;
if (itemSkull != null && itemSkull.getType() == Material.LEGACY_SKULL_ITEM && itemSkull.getDurability() == 3) {
if (itemSkull != null && MaterialUtil.isPlayerHead(itemSkull.getType(), itemSkull.getDurability())) {
metaSkull = (SkullMeta) itemSkull.getItemMeta();
} else if (user.isAuthorized("essentials.skull.spawn")) {
itemSkull = new ItemStack(Material.LEGACY_SKULL_ITEM, 1, (byte) 3);
itemSkull = new ItemStack(SKULL_ITEM, 1, (byte) 3);
metaSkull = (SkullMeta) itemSkull.getItemMeta();
spawn = true;
} else {
@@ -17,13 +17,12 @@ import static com.earth2me.essentials.I18n.tl;
public class Commandwhois extends EssentialsCommand {
private final Statistic playOneTick;
// For some reason, in 1.13 PLAY_ONE_MINUTE = ticks played = what used to be PLAY_ONE_TICK
// https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/commits/b848d8ce633871b52115247b089029749c02f579
private static final Statistic PLAY_ONE_TICK = EnumUtil.getStatistic("PLAY_ONE_MINUTE", "PLAY_ONE_TICK");
public Commandwhois() {
super("whois");
// For some reason, in 1.13 PLAY_ONE_MINUTE = ticks played
// https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/commits/b848d8ce633871b52115247b089029749c02f579
playOneTick = EnumUtil.getStatistic("PLAY_ONE_MINUTE", "PLAY_ONE_TICK");
}
@Override
@@ -42,7 +41,7 @@ public class Commandwhois extends EssentialsCommand {
sender.sendMessage(tl("whoisHunger", user.getBase().getFoodLevel(), user.getBase().getSaturation()));
sender.sendMessage(tl("whoisExp", SetExpFix.getTotalExperience(user.getBase()), user.getBase().getLevel()));
sender.sendMessage(tl("whoisLocation", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ()));
long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(playOneTick) * 50);
long playtimeMs = System.currentTimeMillis() - (user.getBase().getStatistic(PLAY_ONE_TICK) * 50);
sender.sendMessage(tl("whoisPlaytime", DateUtil.formatDateDiff(playtimeMs)));
if (!ess.getSettings().isEcoDisabled()) {
sender.sendMessage(tl("whoisMoney", NumberUtil.displayCurrency(user.getMoney(), ess)));
@@ -137,6 +137,21 @@ public class FakeWorld implements World {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isChunkForceLoaded(int x, int z) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setChunkForceLoaded(int x, int z, boolean forced) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Collection<Chunk> getForceLoadedChunks() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Item dropItem(Location lctn, ItemStack is) {
throw new UnsupportedOperationException("Not supported yet.");
@@ -164,7 +179,7 @@ public class FakeWorld implements World {
@Override
public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) {
return false;
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1,9 +1,13 @@
package com.earth2me.essentials.items;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.IConf;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.MaterialUtil;
import com.earth2me.essentials.utils.StringUtil;
import com.earth2me.essentials.utils.VersionUtil;
import org.bukkit.Color;
import org.bukkit.DyeColor;
import org.bukkit.FireworkEffect;
import org.bukkit.Material;
import org.bukkit.block.Banner;
@@ -23,13 +27,6 @@ import static com.earth2me.essentials.I18n.tl;
public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
@Override
public ItemStack get(final String id, final int quantity) throws Exception {
final ItemStack retval = get(id.toLowerCase(Locale.ENGLISH));
retval.setAmount(quantity);
return retval;
}
@Override
public List<ItemStack> getMatching(User user, String[] args) throws Exception {
List<ItemStack> is = new ArrayList<>();
@@ -63,20 +60,10 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
return is;
}
@Override
public String names(ItemStack item) {
List<String> nameList = nameList(item);
if (nameList.size() > 15) {
nameList = nameList.subList(0, 14);
}
return StringUtil.joinList(", ", nameList);
}
@Override
public String serialize(ItemStack is) {
String mat = is.getType().name();
if (is.getData().getData() != 0) {
if (VersionUtil.getServerBukkitVersion().isLowerThanOrEqualTo(VersionUtil.v1_12_2_R01) && is.getData().getData() != 0) {
mat = mat + ":" + is.getData().getData();
}
int quantity = is.getAmount();
@@ -125,7 +112,9 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
}
}
switch (is.getType()) {
final Material material = is.getType();
switch (material) {
case WRITTEN_BOOK:
// Everything from http://wiki.ess3.net/wiki/Item_Meta#Books in that order.
// Interesting as I didn't see a way to do pages or chapters.
@@ -144,104 +133,93 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
sb.append(e.getName().toLowerCase()).append(":").append(enchantmentStorageMeta.getStoredEnchantLevel(e)).append(" ");
}
break;
case FIREWORK_ROCKET:
case FIREWORK_STAR:
// Everything from http://wiki.ess3.net/wiki/Item_Meta#Fireworks in that order.
FireworkMeta fireworkMeta = (FireworkMeta) is.getItemMeta();
if (fireworkMeta.hasEffects()) {
for (FireworkEffect effect : fireworkMeta.getEffects()) {
if (effect.getColors() != null && !effect.getColors().isEmpty()) {
sb.append("color:");
boolean first = true;
for (Color c : effect.getColors()) {
if (!first) {
sb.append(","); // same thing as above.
}
sb.append(c.toString());
first = false;
}
sb.append(" ");
}
}
sb.append("shape: ").append(effect.getType().name()).append(" ");
if (effect.getFadeColors() != null && !effect.getFadeColors().isEmpty()) {
sb.append("fade:");
boolean first = true;
for (Color c : effect.getFadeColors()) {
if (!first) {
sb.append(","); // same thing as above.
}
sb.append(c.toString());
first = false;
if (MaterialUtil.isFirework(material)) {
// Everything from http://wiki.ess3.net/wiki/Item_Meta#Fireworks in that order.
FireworkMeta fireworkMeta = (FireworkMeta) is.getItemMeta();
if (fireworkMeta.hasEffects()) {
for (FireworkEffect effect : fireworkMeta.getEffects()) {
if (effect.getColors() != null && !effect.getColors().isEmpty()) {
sb.append("color:");
boolean first = true;
for (Color c : effect.getColors()) {
if (!first) {
sb.append(","); // same thing as above.
}
sb.append(" ");
sb.append(c.toString());
first = false;
}
sb.append(" ");
}
sb.append("shape:").append(effect.getType().name()).append(" ");
if (effect.getFadeColors() != null && !effect.getFadeColors().isEmpty()) {
sb.append("fade:");
boolean first = true;
for (Color c : effect.getFadeColors()) {
if (!first) {
sb.append(","); // same thing as above.
}
sb.append(c.toString());
first = false;
}
sb.append(" ");
}
sb.append("power: ").append(fireworkMeta.getPower()).append(" ");
}
break;
case POTION:
Potion potion = Potion.fromItemStack(is);
for (PotionEffect e : potion.getEffects()) {
// long but needs to be effect:speed power:2 duration:120 in that order.
sb.append("splash:").append(potion.isSplash()).append(" ").append("effect:").append(e.getType().getName().toLowerCase()).append(" ").append("power:").append(e.getAmplifier()).append(" ").append("duration:").append(e.getDuration() / 20).append(" ");
sb.append("power:").append(fireworkMeta.getPower()).append(" ");
}
} else if (MaterialUtil.isPotion(material)) {
Potion potion = Potion.fromItemStack(is);
for (PotionEffect e : potion.getEffects()) {
// long but needs to be effect:speed power:2 duration:120 in that order.
sb.append("splash:").append(potion.isSplash()).append(" ").append("effect:").append(e.getType().getName().toLowerCase()).append(" ").append("power:").append(e.getAmplifier()).append(" ").append("duration:").append(e.getDuration() / 20).append(" ");
}
} else if (MaterialUtil.isPlayerHead(material, is.getData().getData())) {
// item stack with meta
SkullMeta skullMeta = (SkullMeta) is.getItemMeta();
if (skullMeta != null && skullMeta.hasOwner()) {
sb.append("player:").append(skullMeta.getOwner()).append(" ");
}
} else if (MaterialUtil.isBanner(material)) {
if (material.toString().contains("SHIELD")) {
// Hacky fix for accessing Shield meta - https://github.com/drtshock/Essentials/pull/745#issuecomment-234843795
BlockStateMeta shieldMeta = (BlockStateMeta) is.getItemMeta();
Banner shieldBannerMeta = (Banner) shieldMeta.getBlockState();
DyeColor baseDyeColor = shieldBannerMeta.getBaseColor();
if (baseDyeColor != null) {
int basecolor = baseDyeColor.getColor().asRGB();
sb.append("basecolor:").append(basecolor).append(" ");
}
break;
case SKELETON_SKULL:
case WITHER_SKELETON_SKULL:
// item stack with meta
SkullMeta skullMeta = (SkullMeta) is.getItemMeta();
if (skullMeta != null && skullMeta.hasOwner()) {
sb.append("player:").append(skullMeta.getOwner()).append(" ");
for (org.bukkit.block.banner.Pattern p : shieldBannerMeta.getPatterns()) {
String type = p.getPattern().getIdentifier();
int color = p.getColor().getColor().asRGB();
sb.append(type).append(",").append(color).append(" ");
}
break;
case LEATHER_HELMET:
case LEATHER_CHESTPLATE:
case LEATHER_LEGGINGS:
case LEATHER_BOOTS:
LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) is.getItemMeta();
int rgb = leatherArmorMeta.getColor().asRGB();
sb.append("color:").append(rgb).append(" ");
break;
case BLACK_BANNER:
case BLUE_BANNER:
case BROWN_BANNER:
case CYAN_BANNER:
case GRAY_BANNER:
case GREEN_BANNER:
case LIGHT_BLUE_BANNER:
case LIGHT_GRAY_BANNER:
case LIME_BANNER:
case MAGENTA_BANNER:
case ORANGE_BANNER:
case PINK_BANNER:
case PURPLE_BANNER:
case RED_BANNER:
case WHITE_BANNER:
case YELLOW_BANNER:
} else {
BannerMeta bannerMeta = (BannerMeta) is.getItemMeta();
if (bannerMeta != null) {
int basecolor = bannerMeta.getBaseColor().getColor().asRGB();
sb.append("basecolor:").append(basecolor).append(" ");
DyeColor baseDyeColor = bannerMeta.getBaseColor();
if (baseDyeColor == null) {
baseDyeColor = MaterialUtil.getColorOf(material);
}
if (baseDyeColor != null) {
int basecolor = baseDyeColor
.getColor()
.asRGB();
sb.append("basecolor:").append(basecolor).append(" ");
}
for (org.bukkit.block.banner.Pattern p : bannerMeta.getPatterns()) {
String type = p.getPattern().getIdentifier();
int color = p.getColor().getColor().asRGB();
sb.append(type).append(",").append(color).append(" ");
}
}
break;
case SHIELD:
// Hacky fix for accessing Shield meta - https://github.com/drtshock/Essentials/pull/745#issuecomment-234843795
BlockStateMeta shieldMeta = (BlockStateMeta) is.getItemMeta();
Banner shieldBannerMeta = (Banner) shieldMeta.getBlockState();
int basecolor = shieldBannerMeta.getBaseColor().getColor().asRGB();
sb.append("basecolor:").append(basecolor).append(" ");
for (org.bukkit.block.banner.Pattern p : shieldBannerMeta.getPatterns()) {
String type = p.getPattern().getIdentifier();
int color = p.getColor().getColor().asRGB();
sb.append(type).append(",").append(color).append(" ");
}
break;
}
} else if (MaterialUtil.isLeatherArmor(material)) {
LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) is.getItemMeta();
int rgb = leatherArmorMeta.getColor().asRGB();
sb.append("color:").append(rgb).append(" ");
}
return sb.toString().trim().replaceAll("§", "&");
@@ -1,6 +1,7 @@
package com.earth2me.essentials.items;
import com.earth2me.essentials.ManagedFile;
import com.earth2me.essentials.utils.MaterialUtil;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -97,7 +98,8 @@ public class FlatItemDb extends AbstractItemDb {
}
@Override
public ItemStack get(final String id) throws Exception {
public ItemStack get(String id) throws Exception {
id = id.toLowerCase();
final String[] split = id.split(":");
ItemData data = getByName(split[0]);
@@ -162,7 +164,7 @@ public class FlatItemDb extends AbstractItemDb {
Material type = item.getType();
PotionData potion = null;
if ((type.name().contains("POTION") || type.name().equals("TIPPED_ARROW")) && item.getItemMeta() instanceof PotionMeta) {
if (MaterialUtil.isPotion(type) && item.getItemMeta() instanceof PotionMeta) {
potion = ((PotionMeta) item.getItemMeta()).getBasePotionData();
}
@@ -177,16 +179,10 @@ public class FlatItemDb extends AbstractItemDb {
return null;
}
@Override
@Deprecated
public Material getFromLegacyId(int id) {
throw new UnsupportedOperationException("Legacy IDs aren't supported on this version of EssentialsX.");
}
@Override
@Deprecated
public int getLegacyId(Material material) throws Exception {
throw new UnsupportedOperationException("Legacy IDs aren't supported on this version of EssentialsX.");
throw new UnsupportedOperationException("Legacy IDs aren't supported on this version.");
}
@Override
@@ -195,7 +191,6 @@ public class FlatItemDb extends AbstractItemDb {
}
public static class ItemData {
private String itemName;
private Material material;
private PotionData potionData;
@@ -221,10 +216,6 @@ public class FlatItemDb extends AbstractItemDb {
return this.material == that.getMaterial() && potionDataEquals(that);
}
public String getItemName() {
return itemName;
}
public Material getMaterial() {
return material;
}
@@ -226,9 +226,9 @@ public class LegacyItemDb extends AbstractItemDb {
}
@Override
public Material getFromLegacyId(int id) {
public Material getFromLegacy(final int id, final byte damage) {
ItemData data = this.legacyIds.get(id);
if(data == null) {
if (data == null) {
return null;
}
@@ -1,6 +1,7 @@
package com.earth2me.essentials.signs;
import com.earth2me.essentials.*;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.NumberUtil;
import net.ess3.api.IEssentials;
import net.ess3.api.MaxMoneyException;
@@ -25,6 +26,7 @@ import static com.earth2me.essentials.I18n.tl;
public class EssentialsSign {
private static final Material SIGN_POST = EnumUtil.getMaterial("SIGN", "SIGN_POST");
private static final Set<Material> EMPTY_SET = new HashSet<Material>();
protected static final BigDecimal MINTRANSACTION = new BigDecimal("0.01");
protected transient final String signName;
@@ -58,9 +60,7 @@ public class EssentialsSign {
sign.setLine(0, getSuccessName(ess));
}
return ret;
} catch (ChargeException ex) {
showError(ess, user.getSource(), ex, signName);
} catch (SignException ex) {
} catch (ChargeException | SignException ex) {
showError(ess, user.getSource(), ex, signName);
}
// Return true, so the player sees the wrong sign.
@@ -115,9 +115,6 @@ public class EssentialsSign {
}
return onSignInteract(sign, user, getUsername(user), ess);
} catch (ChargeException ex) {
showError(ess, user.getSource(), ex, signName);
return false;
} catch (Exception ex) {
showError(ess, user.getSource(), ex, signName);
return false;
@@ -161,9 +158,7 @@ public class EssentialsSign {
User user = ess.getUser(player);
try {
return onBlockPlace(block, user, getUsername(user), ess);
} catch (ChargeException ex) {
showError(ess, user.getSource(), ex, signName);
} catch (SignException ex) {
} catch (ChargeException | SignException ex) {
showError(ess, user.getSource(), ex, signName);
}
return false;
@@ -173,9 +168,7 @@ public class EssentialsSign {
User user = ess.getUser(player);
try {
return onBlockInteract(block, user, getUsername(user), ess);
} catch (ChargeException ex) {
showError(ess, user.getSource(), ex, signName);
} catch (SignException ex) {
} catch (ChargeException | SignException ex) {
showError(ess, user.getSource(), ex, signName);
}
return false;
@@ -213,7 +206,7 @@ public class EssentialsSign {
protected static boolean checkIfBlockBreaksSigns(final Block block) {
final Block sign = block.getRelative(BlockFace.UP);
if (sign.getType() == Material.SIGN && isValidSign(new BlockSign(sign))) {
if (sign.getType() == SIGN_POST && isValidSign(new BlockSign(sign))) {
return true;
}
final BlockFace[] directions = new BlockFace[]{BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST};
@@ -309,7 +302,7 @@ public class EssentialsSign {
final int amount = getIntegerPositive(getSignText(sign, amountIndex));
return new Trade(amount, ess);
}
final ItemStack item = getItemStack(itemType, 1, ess);
final ItemStack item = getItemStack(itemType, 1, true, ess);
final int amount = Math.min(getIntegerPositive(getSignText(sign, amountIndex)), item.getType().getMaxStackSize() * player.getBase().getInventory().getSize());
if (item.getType() == Material.AIR || amount < 1) {
throw new SignException(tl("moreThanZero"));
@@ -346,6 +339,17 @@ public class EssentialsSign {
}
protected final ItemStack getItemStack(final String itemName, final int quantity, final IEssentials ess) throws SignException {
return getItemStack(itemName, quantity, false, ess);
}
protected final ItemStack getItemStack(final String itemName, final int quantity, final boolean allowId, final IEssentials ess) throws SignException {
if (allowId && ess.getSettings().allowOldIdSigns()) {
final Material newMaterial = ess.getItemDb().getFromLegacy(itemName);
if (newMaterial != null) {
return new ItemStack(newMaterial, quantity);
}
}
try {
final ItemStack item = ess.getItemDb().get(itemName);
item.setAmount(quantity);
@@ -420,7 +424,7 @@ public class EssentialsSign {
sign.setLine(index, quantity + " exp");
return new Trade(quantity, ess);
} else {
final ItemStack stack = getItemStack(item, quantity, ess);
final ItemStack stack = getItemStack(item, quantity, true, ess);
sign.setLine(index, quantity + " " + item);
return new Trade(stack, ess);
}
@@ -2,6 +2,7 @@ package com.earth2me.essentials.signs;
import com.earth2me.essentials.I18n;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.FormatUtil;
import net.ess3.api.IEssentials;
import net.ess3.api.MaxMoneyException;
@@ -22,7 +23,7 @@ import java.util.logging.Logger;
public class SignBlockListener implements Listener {
private static final Logger LOGGER = Logger.getLogger("Essentials");
private static final Material WALL_SIGN = Material.WALL_SIGN;
private static final Material SIGN_POST = Material.SIGN;
private static final Material SIGN_POST = EnumUtil.getMaterial("SIGN", "SIGN_POST");
private final transient IEssentials ess;
public SignBlockListener(IEssentials ess) {
@@ -1,5 +1,6 @@
package com.earth2me.essentials.signs;
import com.earth2me.essentials.utils.EnumUtil;
import net.ess3.api.IEssentials;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -11,6 +12,8 @@ import org.bukkit.event.entity.EntityExplodeEvent;
public class SignEntityListener implements Listener {
private static final Material SIGN_POST = EnumUtil.getMaterial("SIGN", "SIGN_POST");
private final transient IEssentials ess;
public SignEntityListener(final IEssentials ess) {
@@ -25,7 +28,7 @@ public class SignEntityListener implements Listener {
}
for (Block block : event.blockList()) {
if (((block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) {
if (((block.getType() == Material.WALL_SIGN || block.getType() == SIGN_POST) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) {
event.setCancelled(true);
return;
}
@@ -46,7 +49,7 @@ public class SignEntityListener implements Listener {
}
final Block block = event.getBlock();
if (((block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) {
if (((block.getType() == Material.WALL_SIGN || block.getType() == SIGN_POST) && EssentialsSign.isValidSign(ess, new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) {
event.setCancelled(true);
return;
}
@@ -1,5 +1,6 @@
package com.earth2me.essentials.signs;
import com.earth2me.essentials.utils.MaterialUtil;
import net.ess3.api.IEssentials;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -54,7 +55,7 @@ public class SignPlayerListener implements Listener {
}
final Material mat = block.getType();
if (mat == Material.SIGN || mat == Material.WALL_SIGN) {
if (MaterialUtil.isSign(mat)) {
final String csign = ((Sign) block.getState()).getLine(0);
for (EssentialsSign sign : ess.getSettings().enabledSigns()) {
if (csign.equalsIgnoreCase(sign.getSuccessName(ess))) {
@@ -4,7 +4,9 @@ import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.Trade.OverflowType;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.MaterialUtil;
import net.ess3.api.IEssentials;
import net.ess3.api.MaxMoneyException;
import org.bukkit.Location;
@@ -21,13 +23,14 @@ import static com.earth2me.essentials.I18n.tl;
@Deprecated // This sign will be removed soon
public class SignProtection extends EssentialsSign {
private final transient Set<Material> protectedBlocks = EnumSet.noneOf(Material.class);
private final transient Set<Material> protectedBlocks = EnumUtil.getAllMatching(Material.class,
"CHEST",
"FURNACE",
"BURNING_FURNACE",
"DISPENSER");
public SignProtection() {
super("Protection");
protectedBlocks.add(Material.CHEST);
protectedBlocks.add(Material.FURNACE);
protectedBlocks.add(Material.DISPENSER);
}
@Override
@@ -102,7 +105,7 @@ public class SignProtection extends EssentialsSign {
}
private SignProtectionState checkProtectionSign(final Block block, final User user, final String username) {
if (block.getType() == Material.SIGN || block.getType() == Material.WALL_SIGN) {
if (MaterialUtil.isSign(block.getType())) {
final BlockSign sign = new BlockSign(block);
if (sign.getLine(0).equals(this.getSuccessName())) { // TODO call getSuccessName(IEssentials)
return checkProtectionSign(sign, user, username);
@@ -159,7 +162,7 @@ public class SignProtection extends EssentialsSign {
public boolean isBlockProtected(final Block block) {
final Block[] faces = getAdjacentBlocks(block);
for (Block b : faces) {
if (b.getType() == Material.SIGN || b.getType() == Material.WALL_SIGN) {
if (MaterialUtil.isSign(b.getType())) {
final Sign sign = (Sign) b.getState();
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]")) {
return true;
@@ -169,7 +172,7 @@ public class SignProtection extends EssentialsSign {
final Block[] faceChest = getAdjacentBlocks(b);
for (Block a : faceChest) {
if (a.getType() == Material.SIGN || a.getType() == Material.WALL_SIGN) {
if (MaterialUtil.isSign(a.getType())) {
final Sign sign = (Sign) a.getState();
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]")) {
return true;
@@ -237,7 +237,7 @@ public class SignTrade extends EssentialsSign {
return new Trade((amountType == AmountType.COST ? stackamount : amount), ess);
} else {
final int stackamount = getIntegerPositive(split[0]);
final ItemStack item = getItemStack(split[1], stackamount, ess);
final ItemStack item = getItemStack(split[1], stackamount, true, ess);
int amount = getInteger(split[2]);
if (amountType == AmountType.ROUNDED) {
amount -= amount % stackamount;
@@ -1,7 +1,12 @@
package com.earth2me.essentials.utils;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.material.MaterialData;
import java.util.EnumSet;
import java.util.Optional;
import java.util.Set;
public class MaterialUtil {
@@ -97,4 +102,21 @@ public class MaterialUtil {
return isPlayerHead(material, -1) || isMobHead(material, -1);
}
public static Material convertFromLegacy(int id, byte damage) {
return EnumSet.allOf(Material.class).stream()
.filter(material -> material.getId() == id)
.findFirst()
.map(material -> Bukkit.getUnsafe().fromLegacy(new MaterialData(material, damage)))
.orElse(null);
}
public static DyeColor getColorOf(Material material) {
for (DyeColor color : DyeColor.values()) {
if (material.toString().contains(color.name())) {
return color;
}
}
return DyeColor.WHITE;
}
}
@@ -12,6 +12,7 @@ import java.util.regex.Pattern;
public class VersionUtil {
public static final BukkitVersion v1_8_8_R01 = BukkitVersion.fromString("1.8.8-R0.1-SNAPSHOT");
public static final BukkitVersion v1_9_R01 = BukkitVersion.fromString("1.9-R0.1-SNAPSHOT");
public static final BukkitVersion v1_9_4_R01 = BukkitVersion.fromString("1.9.4-R0.1-SNAPSHOT");
public static final BukkitVersion v1_10_2_R01 = BukkitVersion.fromString("1.10.2-R0.1-SNAPSHOT");
public static final BukkitVersion v1_11_2_R01 = BukkitVersion.fromString("1.11.2-R0.1-SNAPSHOT");
@@ -102,7 +103,7 @@ public class VersionUtil {
return major == that.major &&
minor == that.minor &&
patch == that.patch &&
revision == that.patch;
revision == that.revision;
}
@Override
@@ -112,7 +113,7 @@ public class VersionUtil {
@Override
public String toString() {
return major + "+" + minor + "+" + patch + "-R" + revision;
return major + "." + minor + "." + patch + "-R" + revision;
}
@Override
+5
View File
@@ -322,6 +322,11 @@ enabledSigns:
# Lower numbers will reduce the possibility of lag, but may annoy players.
sign-use-per-second: 4
# Allow item IDs on pre-existing signs on 1.13 and above.
# You cannot use item IDs on new signs, but this will allow players to interact with signs that
# were placed before 1.13.
allow-old-id-signs: false
# List of sign names Essentials should not protect. This feature is especially useful when
# another plugin provides a sign that EssentialsX provides, but Essentials overrides.
# For example, if a plugin provides a [kit] sign, and you wish to use theirs instead of
+2418 -201
View File
File diff suppressed because it is too large. Load diff
+2 -1
View File
@@ -211,6 +211,7 @@ is=is
isIpBanned=\u00a76IP \u00a7c{0} \u00a76is banned.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74That item cannot be sold to the server.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Item must be traded in stacks. A quantity of 2s would be two stacks, etc.
itemNames=\u00a76Item short names\:\u00a7r {0}
itemNotEnough1=\u00a74You do not have enough of that item to sell.
@@ -467,7 +468,7 @@ sellBulkPermission=\u00a76You do not have permission to bulk sell.
sellHandPermission=\u00a76You do not have permission to hand sell.
serverFull=Server is full\!
serverTotal=\u00a76Server Total\:\u00a7c {0}
serverUnsupported=\u00a7cYou are running an unsupported server version!
serverUnsupported=You are running an unsupported server version!
setBal=\u00a7aYour balance was set to {0}.
setBalOthers=\u00a7aYou set {0}\u00a7a''s balance to {1}.
setSpawner=\u00a76Changed spawner type to\u00a7c {0}\u00a76.
+1
View File
@@ -211,6 +211,7 @@ is=je
isIpBanned=\u00a76IP \u00a7c{0} \u00a76je zabanovana.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74Tento predmet nelze prodat serveru.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Predmety musi byt vymeneny ve stacku.
itemNames=\u00a76Zkracene nazvy predmetu\:\u00a7r {0}
itemNotEnough1=\u00a74Nemas dostatek, aby jsi jej mohl prodat.
+1
View File
@@ -211,6 +211,7 @@ is=er
isIpBanned=\u00a76IP \u00a7c{0} \u00a76er banlyst.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74Det element kan ikke s\u00e6lges til serveren.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Elementet skal forhandles i form at stakke. En m\u00e6ngde af 2s vil v\u00e6re 2 stakke, osv.
itemNames=\u00a76Elementforkortelser\:\u00a7r {0}
itemNotEnough1=\u00a74Du har ikke nok af det element til at s\u00e6lge det.
+248 -241
View File
@@ -2,11 +2,11 @@
#version: ${full.version}
# Single quotes have to be doubled: ''
# Translations start here
# by:
# Germantranslation by enterih and a lot of other guys. Feel free to donate EssentialsX.
action=\u00a75* {0} \u00a75{1}
addedToAccount=\u00a7a{0} wurde zu deinem Konto hinzugef\u00fcgt.
addedToOthersAccount=\u00a7a{0} wurde dem Konto von {1} \u00a7agutgeschrieben. Aktueller Kontostand\: {2}
adventure=Abenteuer
addedToAccount=\u00a7c{0} \u00a7awurden deinem Konto hinzugef\u00fcgt.
addedToOthersAccount=\u00a7aAuf \u00a76{1} \u00A7A´s Konto wurden \u00a7c{0} \u00A7agutgeschrieben. Neuer Kontostand\: \u00A76{2}
adventure=Abenteuermodus
alertBroke=zerst\u00f6rt\:
alertFormat=\u00a73[{0}] \u00a7r {1} \u00a76 {2} bei\: {3}
alertPlaced=platziert\:
@@ -18,38 +18,38 @@ antiBuildDrop=\u00a74Du darfst \u00a7c {0}\u00a74 nicht wegwerfen.
antiBuildInteract=\u00a74Du darfst mit\u00a7c {0}\u00a74 nicht interagieren.
antiBuildPlace=\u00a74Du darfst\u00a7c {0} \u00a74hier nicht platzieren.
antiBuildUse=\u00a74Du darfst\u00a7c {0} \u00a74nicht benutzen.
autoAfkKickReason=Du wurdest rausgeworfen, weil du f\u00fcr {0} Minuten inaktiv warst.
backAfterDeath=\u00a76Benutze den Befehl /back um zu deinem Todespunkt zur\u00fcck zu kehren.
autoAfkKickReason=Da du l\u00e4nger als {0} Minuten inaktiv bist, haben wir die Verbindung getrennt.
backAfterDeath=\u00a76Verwende den Befehl \u00A7c/back\u00A76, um zu deinem Todespunkt zur\u00fcck zu kehren.
backupDisabled=\u00a74Ein externes Backup-Skript wurde nicht konfiguriert.
backupFinished=\u00a76Backup beendet.
backupStarted=\u00a76Backup gestartet.
backUsageMsg=\u00a76Kehre zur letzten Position zur\u00fcck.
backUsageMsg=\u00a76Du kehrst zur letzten Position zur\u00fcck.
balance=\u00a7aKontostand\:\u00a7c {0}
balanceOther=\u00a7aKontostand von {0}\u00a7a\:\u00a7c {1}
balanceTop=\u00a76Die h\u00f6chsten Kontost\u00e4nde ({0})
banExempt=\u00a74Du kannst diesen Spieler nicht bannen.
banExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht verbannen.
banExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht bannen.
banFormat=\u00a74Gebannt\: \u00a7r{0}
banIpJoin=Deine IP-Adresse ist auf diesem Server gebannt. Grund: {0}
banIpJoin=Deine IP-Adresse ist auf diesem Server gesperrt. Grund: {0}
banJoin=Du bist von diesem Server gebannt. Grund: {0}
bed=\u00a7oBett\u00a7r
bedMissing=\u00a74Dein Bett ist entweder nicht gesetzt, fehlt oder ist blockiert.
bedNull=\u00a7mBett\u00a7r
bedSet=\u00a76Bett-Spawn gesetzt\!
bigTreeFailure=\u00a74Fehler beim Pflanzen eines gro\u00dfen Baums. Versuch es auf Gras oder Dreck.
bigTreeFailure=\u00a74Beim Pflanzen eines grossen Baumes ist ein Fehler aufgetreten. Versuch es auf Gras oder Dreck.
bigTreeSuccess=\u00a76Gro\u00dfer Baum gepflanzt.
blockList=\u00a76Essentials hat die folgenden Befehle an ein anderes Plugin weiter gegeben\:
bookAuthorSet=\u00a76Autor des Buchs auf {0} ge\u00e4ndert.
bookLocked=\u00a76Dieses Buch ist jetzt versiegelt.
bookTitleSet=\u00a76Buchtitel auf {0} ge\u00e4ndert.
broadcast=\u00a7r\u00a76[\u00a74Rundruf\u00a76]\u00a7a {0}
buildAlert=\u00a74Du hast keine Rechte zum Bauen.
buildAlert=\u00a74Du hast keine Bauberechtigung.
bukkitFormatChanged=Bukkit-Versionsformat hat sich ge\u00e4ndert. Version nicht kontrolliert.
burnMsg=\u00a76Du hast {0} f\u00fcr {1} Sekunden in Brand gesetzt.
cannotStackMob=\u00a74Du hast nicht das Recht, mehrere Mobs zu stapeln.
canTalkAgain=\u00a76Du kannst wieder sprechen.
cannotStackMob=\u00a74Du bist nicht berechtigt, mehrere Mobs zu stapeln.
canTalkAgain=\u00a76Du kannst wieder den Chat ruinieren.
cantFindGeoIpDB=Kann GeoIP-Datenbank nicht finden\!
cantGamemode=\u00a74Du hast keine Permission, um zum Spielmodus {0} zu wechseln.
cantGamemode=\u00a74Du hast keine Berechtigung, um zum Spielmodus {0} zu wechseln.
cantReadGeoIpDB=Fehler beim Einlesen der GeoIP-Datenbank\!
cantSpawnItem=\u00a74Du darfst Gegenstand\u00a7c {0}\u00a74 nicht erzeugen.
chatTypeAdmin=[A]
@@ -57,131 +57,131 @@ chatTypeLocal=[L]
chatTypeSpy=[Spion]
cleaned=Spielerdateien geleert.
cleaning=S\u00e4ubere Spielerdateien.
clearInventoryConfirmToggleOff=\u00a76You will no longer be prompted to confirm inventory clears.
clearInventoryConfirmToggleOn=\u00a76You will now be prompted to confirm inventory clears.
clearInventoryConfirmToggleOff=\u00a76Du musst ab jetzt nicht mehr best\u00c4tigen, ob du das Inventar leeren m\u00F6chtest.
clearInventoryConfirmToggleOn=\u00a76Du musst ab jetzt best\u00c4tigen, ob du das Inventar leeren m\u00F6chtest.
commandCooldown=\u00a7cDu kannst diesen Command nicht ausf\u00FChren f\u00FCr {0}.
commandFailed=Befehl {0} scheiterte\:
commandHelpFailedForPlugin=Fehler beim Abrufen der Hilfe f\u00fcr\: {0}
commandFailed=Befehl {0} ist fehlgeschlagen\:
commandHelpFailedForPlugin=Beim Abruf der Hilfe f\u00fcr\: {0} hat etwas nicht funktioniert.
commandNotLoaded=\u00a74Befehl {0} ist nicht richtig geladen.
compassBearing=\u00a76Peilung\: {0} ({1} Grad).
configFileMoveError=Fehler beim Verschieben der config.yml in das Backupverzeichnis.
configFileRenameError=Verschieben einer tempor\u00e4ren Datei nach config.yml gescheitert.
confirmClear=\u00a77To \u00a7lCONFIRM\u00a77 inventory clear, please repeat command: \u00a76{0}
confirmPayment=\u00a77Um die Zahlung in H\u00f6he von \u00a76{0}\u00a77 zu \u00a7lBEST\u00c4TIGEN\u00a77, wiederhole bitte den Befehl: \u00a76{1}
configFileMoveError=Es ist ein Fehler beim Verschieben der config.yml in das Backupverzeichnis aufgetreten.
configFileRenameError=Das Verschieben einer tempor\u00e4ren Datei nach config.yml gescheitert.
confirmClear=\u00a77Um das Inventar zu leeren, musst du zuerst \u00a7lBEST\u00e4TIGEN\u00a77. Wiederhole daf\u00fcr bitte \u00a76{0}\u00a77.
confirmPayment=\u00a77Um die Zahlung in der H\u00f6he von \u00a76{0}\u00a77 zu \u00a7lBEST\u00c4TIGEN\u00a77, wiederhole bitte den Befehl: \u00a76{1}
connectedPlayers=\u00a76Verbundene Spieler\u00a7r
connectionFailed=Fehler beim Verbindungsaufbau.
connectionFailed=Beim Verbindungsaufbau ist ein Fehler aufgetreten.
cooldownWithMessage=\u00a74Abklingzeit\: {0}
coordsKeyword={0}, {1}, {2}
corruptNodeInConfig=\u00a74Hinweis\: Deine Konfigurationsdatei hat eine ung\u00fcltige Node {0}.
couldNotFindTemplate=\u00a74Vorlage {0} konnte nicht gefunden werden.
createdKit=\u00a76Kit \u00a7c{0} \u00a76erstellt mit \u00a7c{1} \u00a76Eintr\u00E4gen und Verz\u00F6gerung \u00a7c{2}
createdKit=\u00a76Das Kit \u00a7c{0} \u00a76wurde mit \u00a7c{1} \u00a76Eintr\u00E4gen und einer Verz\u00F6gerung von \u00a7c{2} \u00a76erstellt.
createKitFailed=\u00a74Beim Erstellen des Kits ist ein Fehler aufgetreten {0}.
createKitSeparator=\u00a7m-----------------------
createKitSuccess=\u00a76Erstelltes Kit: \u00a7f{0}\n\u00a76Verz\u00F6gerung: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Kopiere Inhalte aus dem oben stehenden Link in deine kits.yml.
creatingConfigFromTemplate=Erstelle Konfiguration aus Vorlage\: {0}
creatingEmptyConfig=Erstelle leere Konfiguration\: {0}
createKitSuccess=\u00a76Erstelltes Kit: \u00a7f{0}\n\u00a76Verz\u00F6gerung: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Es werden Inhalte aus dem oben stehenden Link in deine kits.yml kopiert.
creatingConfigFromTemplate=Erstelle Konfiguration aus der Vorlage\: {0}
creatingEmptyConfig=Erstelle eine leere Konfiguration\: {0}
creative=Kreativmodus
currency={0}{1}
currentWorld=\u00a76Aktuelle Welt\:\u00a7c {0}
day=Tag
days=Tage
defaultBanReason=Der Bann-Hammer hat gesprochen\!
deleteFileError=Konnte Datei nicht l\u00f6schen\: {0}
deleteHome=\u00a76Zuhause\u00a7c {0} \u00a76wurde gel\u00f6scht.
deleteJail=\u00a76Gef\u00e4ngnis\u00a7c {0} \u00a76wurde gel\u00f6scht.
deleteWarp=\u00a76Warp-Punkt \u00a7c{0} \u00a76wurde gel\u00f6scht.
defaultBanReason=B\u00c4\u00c4m, Der Bann-Hammer hat gesprochen.\!
deleteFileError=Die Datei {0} konnte nicht gel\u00f6scht werden.\
deleteHome=\u00a76Die Heimat\u00a7c {0} \u00a76wurde gel\u00f6scht.
deleteJail=\u00a76Das Gef\u00e4ngnis\u00a7c {0} \u00a76wurde gel\u00f6scht.
deleteWarp=\u00a76Der Warp-Punkt \u00a7c{0} \u00a76wurde gel\u00f6scht.
deniedAccessCommand=\u00a7c{0} \u00a74hat keinen Zugriff auf diesen Befehl.
denyBookEdit=\u00a74Du kannst dieses Buch nicht entsiegeln.
denyChangeAuthor=\u00a74Du kannst den Autor dieses Buches nicht \u00e4ndern.
denyChangeTitle=\u00a74Du kannst den Titel dieses Buches nicht \u00e4ndern.
depth=\u00a76Du bist auf Meeresh\u00f6he.
depthAboveSea=\u00a76Du bist\u00a7c {0} \u00a76Bl\u00f6cke \u00fcber Meeresh\u00f6he.
depthBelowSea=\u00a76Du bist\u00a7c {0} \u00a76Bl\u00f6cke unter Meeresh\u00f6he.
destinationNotSet=Ziel nicht gesetzt\!
depth=\u00a76Du bist auf derMeeresh\u00f6he.
depthAboveSea=\u00a76Du bist\u00a7c {0} \u00a76Bl\u00f6cke \u00fcber Meer.
depthBelowSea=\u00a76Du bist\u00a7c {0} \u00a76Bl\u00f6cke unter Meer.
destinationNotSet=Das Ziel ist nicht gesetzt\!
disabled=deaktiviert
disabledToSpawnMob=\u00a74Das Spawnen dieses Mobs wurde in der Konfigurationsdatei deaktiviert.
disableUnlimited=\u00a76Deaktiviere unbegrenztes Platzieren von\u00a7c {0} \u00a76f\u00fcr {1}.
disabledToSpawnMob=\u00a74Das Spawnen dieses Mobs ist in der Konfigurationsdatei deaktiviert.
disableUnlimited=\u00a76Das unbegrenzte Platzieren von\u00a7c {0} \u00a76f\u00fcr \u00a7c{1} \u00a76wurde deaktiviert.
distance=\u00a76Entfernung\: {0}
dontMoveMessage=\u00a76Teleportvorgang startet in {0}. Bewege dich nicht.
downloadingGeoIp=Lade GeoIP-Datenbank ... dies kann etwas dauern (country\: 1.7 MB, city\: 30MB)
dontMoveMessage=\u00a76Teleportvorgang startet in \u00a7c{0}\u00a76. Eine Bewegung bricht die Teleportation ab.
downloadingGeoIp=GeoIP-Datenbank wird geladen... Das kann einen Moment in Anspruch nehmen. (country\: 1.7 MB, city\: 30MB)
duplicatedUserdata=Doppelte Datei in userdata\: {0} und {1}.
durability=\u00a76Dieses Werkzeug kann noch \u00a7c{0}\u00a76 mal benutzt werden.
east=E
editBookContents=\u00a7eDu darfst jetzt den Inhalt dieses Buches bearbeiten.
east=O
editBookContents=\u00a7eDu darfst den Inhalt dieses Buches jetzt bearbeiten.
enabled=aktiviert
enableUnlimited=\u00a76Gebe \u00a7c{1}\u00a76. unendlichen einen Stack\u00a7c {0} \u00a76.
enableUnlimited=\u00a76Du gibst \u00a7c{1}\u00a76 eine unbegrenzte Menge an\u00a7c {0} \u00a76.
enchantmentApplied=\u00a76Der Gegenstand in deiner Hand wurde mit\u00a7c {0} \u00a76verzaubert.
enchantmentNotFound=\u00a74Verzauberung nicht gefunden\!
enchantmentPerm=\u00a74Du hast keine Rechte f\u00fcr\u00a7c {0}\u00a74.
enchantmentNotFound=\u00a74Diese Verzauberung konnte nicht gefunden werden\!
enchantmentPerm=\u00a74Du bist f\u00fcr\u00a7c {0}\u00a74 nicht berechtigt.
enchantmentRemoved=\u00a76Dem Gegenstand in deiner Hand wurde die Verzauberung\u00a7c {0} \u00a76entfernt.
enchantments=\u00a76Verzauberungen\:\u00a7r {0}
errorCallingCommand=Fehler beim Aufrufen des Befehls /{0}
errorCallingCommand=Beim Aufrufen des Befehls {0} ist ein Fehler aufgetreten.
errorWithMessage=\u00a7cFehler\:\u00a74 {0}
essentialsHelp1=Die Datei ist besch\u00e4digt und Essentials kann sie nicht \u00f6ffnen. Essentials ist jetzt deaktiviert. Wenn du die Datei selbst nicht reparieren kannst, gehe auf http\://tiny.cc/EssentialsChat
essentialsHelp2=Die Datei ist besch\u00e4digt und Essentials kann sie nicht \u00f6ffnen. Essentials ist jetzt deaktiviert. Wenn du die Datei selbst nicht reparieren kannst, versuche /essentialshelp oder gehe auf http\://tiny.cc/EssentialsChat
essentialsReload=\u00a76Essentials neu geladen\u00a7c {0}.
exp=\u00a7c{0} \u00a76hat\u00a7c {1} \u00a76Exp (Level\u00a7c {2}\u00a76) und braucht\u00a7c {3} \u00a76Punkte f\u00fcr den n\u00e4chsten Level.
essentialsReload=\u00a76Essentials wurde neu geladen\u00a7c {0}.
exp=\u00a7c{0} \u00a76hat\u00a7c {1} \u00a76Exp (Level\u00a7c {2}\u00a76) und braucht\u00a7c {3} \u00a76Punkte f\u00fcr das n\u00e4chste Level.
expSet=\u00a7c{0} \u00a76hat jetzt\u00a7c {1} \u00a76Exp.
extinguish=\u00a76Du hast dich selbst gel\u00f6scht.
extinguishOthers=\u00a76Du hast {0}\u00a76 gel\u00f6scht.
failedToCloseConfig=Fehler beim Schlie\u00dfen der Konfiguration {0}.
failedToCreateConfig=Fehler beim Erstellen der Konfiguration {0}.
failedToWriteConfig=Fehler beim Schreiben der Konfiguration {0}.
false=\u00a74falsch\u00a7r
failedToCloseConfig=Beim Schliessen der Config ist ein Fehler aufgetreten {0}.
failedToCreateConfig=Beim Erstellen der Config ist ein Fehler aufgetreten {0}.
failedToWriteConfig=Beim Schreiben der Config ist ein Fehler aufgetreten {0}.
false=\u00a74Nein\u00a7r
feed=\u00a76Dein Hunger wurde gestillt.
feedOther=\u00a76Du hast dein Hunger von \u00a7c{0}\u00a76gestillt.
fileRenameError=Umbenennen von {0} gescheitert\!
fireworkColor=\u00a74Ung\u00fcltige Feuerwerksparameter angegeben, setze zuerst eine Farbe.
fireworkEffectsCleared=\u00a76Alle Effekte vom Stapel in der Hand entfernt.
fireworkSyntax=\u00a76Feuerwerk-Parameter\:\u00a7c color\:<Farbe> [fade\:<Farbe>] [shape\:<Form>] [effect\:<Effekt>]\n\u00a76Um mehrere Farben/Effekte zu benutzen, mit Komma trennen\: \u00a7cred,blue,pink\n\u00a76Formen\:\u00a7c star, ball, large, creeper, burst \u00a76Effekte\:\u00a7c trail, twinkle.
feedOther=\u00a76Du hast den Hunger von \u00a7c{0}\u00a76gestillt.
fileRenameError=\u00a7cDu konntest \u00a7e{0} \u00a7cnicht umbenennen.\!
fireworkColor=\u00a74Ung\u00fcltige Feuerwerksparameter angegeben. Du musst zuerst eine Farbe festlegen.
fireworkEffectsCleared=\u00a76Alle Effekte wurden vom Stapel, den du in der Hand hast, entfernt.
fireworkSyntax=\u00a76Feuerwerk-Parameter\:\u00a7c color\:<Farbe> [fade\:<Farbe>] [shape\:<Form>] [effect\:<Effekt>]\n\u00a76Um mehrere Farben/Effekte zu benutzen, musst du sie mit Komma trennen\: \u00a7cred,blue,pink\n\u00a76Formen\:\u00a7c star, ball, large, creeper, burst \u00a76Effekte\:\u00a7c trail, twinkle.
flying=fliegt
flyMode=\u00a76Flugmodus\u00a7c {0} \u00a76f\u00fcr {1} \u00a76gesetzt.
flyMode=\u00A76Du hast den Flugmodus bei \u00a7c{1} {0}\u00a76.
foreverAlone=\u00a7cDu hast niemanden, dem du antworten kannst.
fullStack=\u00a74Du hast bereits einen vollen Stapel.
gameMode=\u00a76Spielmodus\u00a7c {0} \u00a76f\u00fcr {1} \u00a76gesetzt.
gameModeInvalid=\u00a74Sie m\u00fcssen einen g\u00fcltigen Spieler/Modus angeben.
gameMode=\u00a76Du hast \u00a7c{1}\u00a76 in den \u00a7c{0}\u00a76 versetzt.
gameModeInvalid=\u00a74Du m\u00fcsst einen g\u00fcltigen Spieler/Modus angeben.
gcfree=\u00a76Freier Speicher\:\u00a7c {0} MB
gcmax=\u00a76Maximaler Speicher\:\u00a7c {0} MB
gctotal=\u00a76Reservierter Speicher\:\u00a7c {0} MB
gcWorld=\u00a76 {0} "\u00a7c {1} \u00a76"\: \u00a7c {2} \u00a76 Chunks, \u00a7c {3} \u00a76 Einheiten, \u00a7c {4} \u00a76 Tiles.
geoipJoinFormat=\u00a76Spieler \u00a7c{0} \u00a76kommt aus \u00a7c{1}\u00a76.
geoipJoinFormat=\u00a7c{0} \u00a76kommt aus \u00a7c{1}\u00a76.
geoIpUrlEmpty=GeoIP Download-URL ist leer.
geoIpUrlInvalid=GeoIP Download-URL ist ung\u00fcltig.
givenSkull=\u00a76Dir wurde der Kopf von \u00a7c{0}\u00a76 gegeben.
giveSpawn=\u00a76Gebe \u00a7c{2} {0}\u00a76x\u00a7c {1}\u00a76.
giveSpawn=\u00a76Du gibst \u00a7c{2} {0}\u00a76x\u00a7c {1}\u00a76.
giveSpawnFailure=\u00a74Nicht genug Platz, \u00a7c{0} \u00a7c{1} \u00a74verloren.
godDisabledFor=\u00a7cdeaktiviert\u00a76 f\u00fcr\u00a7c {0}
godEnabledFor=\u00a7aaktiviert\u00a76 f\u00fcr\u00a7c {0}
godDisabledFor=\u00a76f\u00fcr\u00a7c {0}\u00a7cdeaktiviert\u00a76.
godEnabledFor=\u00a76f\u00fcr\u00a7c {0} \u00a7aaktiviert\u00a76.
godMode=\u00a76Unsterblichkeit\u00a7c {0}\u00a76.
groupDoesNotExist=\u00a74Kein Mitglied dieser Gruppe ist online\!
groupNumber=\u00a7c{0}\u00a7f online, f\u00fcr die ganze Liste\:\u00a7c /{1} {2}
hatArmor=\u00a74Du kannst diesen Gegenstand nicht als Hut nutzen\!
groupDoesNotExist=\u00a74Von dieser Gruppe ist kein Mitglied online\!
groupNumber=\u00a7c{0}\u00a7f Online. F\u00fcr die ganze Liste\:\u00a7c /{1} {2}
hatArmor=\u00a74Du kannst diesen Gegenstand nicht als Hut verwenden\!
hatEmpty=\u00a74Du tr\u00e4gst keinen Hut.
hatFail=\u00a74Du musst einen Gegenstand in der Hand halten.
hatPlaced=\u00a76Viel Spa\u00df mit deinem neuen Hut\!
hatRemoved=\u00a76Dein Hut wurde entfernt.
haveBeenReleased=\u00a76Du wurdest frei gelassen.
heal=\u00a76Du wurdest geheilt.
healDead=\u00a74Du kannst Tote nicht heilen\!
healOther=\u00a7c{0}\u00a76 geheilt.
helpConsole=Um die Hilfe der Konsole zu sehen, schreibe ?.
healDead=\u00a74Du kannst keine Toten heilen\!
healOther=\u00a7c{0}\u00a76 wurde geheilt.
helpConsole=Damit du die Hilfe der Konsole sehen kannst, muss du ? schreiben.
helpFrom=\u00a76Befehle von {0}\:
helpLine=\u00a76/{0}\u00a7r\: {1}
helpMatching=\u00a76Befehle \u00e4hnlich zu "\u00a7c{0}\u00a76"\:
helpMatching=\u00a76Befehle \u00e4hnlich wie "\u00a7c{0}\u00a76"\:
helpOp=\u00a74[Hilfe]\u00a7r \u00a76{0}\:\u00a7r {1}
helpPlugin=\u00a74{0}\u00a7r\: Plugin-Hilfe\: /help {1}
holdBook=\u00a74Du hast kein beschreibbares Buch in deiner Hand.
holdFirework=\u00a74Du musst Feuerwerk in deiner Hand halten um einen Effekt hinzuzuf\u00fcgen.
holdPotion=\u00a74Du musst einen Trank in der Hand haben, um ihm Effekte zu geben.
holeInFloor=\u00a74Loch im Boden\!
homes=\u00a76Homes\:\u00a7r {0}
homeSet=\u00a76Zuhause gesetzt.
holdFirework=\u00a74Damit du einen Effekt hinzzuf\u00fcgen kannst, musst du ein Feuerwerk in deiner Hand halten.
holdPotion=\u00a74Du du dem Trank einem Effekt geben kannst, musst du ihn zuerst in der Hand halten.
holeInFloor=\u00a74Wooops... Da ist ein Loch im Boden\!
homes=\u00a76Deine Heimaten\:\u00a7r {0}
homeSet=\u00a76Heimat festgelegt
hour=Stunde
hours=Stunden
ignoredList=\u00a76Ignoriert\:\u00a7r {0}
ignoreExempt=\u00a74Du kannst diesen Spieler nicht ignorieren.
ignorePlayer=\u00a76Du ignorierst ab jetzt Spieler\u00a7c {0}\u00a76.
illegalDate=Ung\u00fcltiges Datumsformat.
ignoreExempt=\u00a74Du kannst den Spieler nicht ignorieren.
ignorePlayer=\u00a76Du ignorierst ab jetzt\u00a7c {0}\u00a76.
illegalDate=Ung\u00fcltiges Datumformat.
infoChapter=\u00a76Kapitel ausw\u00e4hlen\:
infoChapterPages=\u00a7e---\u00a76 {0} \u00a7e--\u00a76 Seite \u00a7c{1}\u00a76 von \u00a7c{2} \u00a7e---
infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Seite \u00a7c{0}\u00a76/\u00a7c{1} \u00a7e----
@@ -190,9 +190,9 @@ insufficientFunds=\u00a74Nicht genug Guthaben.
invalidBanner=\u00a74Ung\u00fcltige Banner-Syntax.
invalidCharge=\u00a74Ung\u00fcltige Kosten.
invalidFireworkFormat=\u00a76Die Option \u00a74{0} \u00a76ist kein g\u00fcltiger Wert f\u00fcr \u00a74{1}\u00a76.
invalidHome=\u00a74Zuhause\u00a7c {0} \u00a74existiert nicht\!
invalidHome=\u00a74Die Heimat\u00a7c {0} \u00a74existiert nicht\!
invalidHomeName=\u00a74Ung\u00fcltiger Name\!
invalidItemFlagMeta=\u00a74Invalid itemflag meta\: \u00a7c{0}\u00a74.
invalidItemFlagMeta=\u00a74Ung\u00fcltige itemflag meta\: \u00a7c{0}\u00a74.
invalidMob=\u00a74Unbekannter Mob-Typ.
invalidNumber=Ung\u00fcltige Nummer.
invalidPotion=\u00a74Ung\u00fcltiger Trank.
@@ -201,29 +201,30 @@ invalidSignLine=\u00a74Die Zeile\u00a7c {0} \u00a74auf dem Schild ist ung\u00fcl
invalidSkull=\u00a74Bitte halte einen Spielerkopf in der Hand.
invalidWarpName=\u00a74Ung\u00fcltiger Warp-Punkt-Name\!
invalidWorld=\u00a74Ung\u00fcltige Welt.
inventoryClearFail=\u00a74Spieler {0} \u00a74hat keine\u00a7c {1} {2}\u00a74.
inventoryClearingAllArmor=\u00a76Alle Gegenst\u00e4nde im Inventar und R\u00fcstung von {0} \u00a76entfernt.
inventoryClearingAllItems=\u00a76Alle Gegenst\u00e4nde im Inventar von {0} \u00a76entfernt.
inventoryClearingAllStack=\u00a76Alle\u00a7c {0} \u00a76von {1} \u00a76entfernt.
inventoryClearingFromAll=\u00a76Leere das Inventar aller Spieler...
inventoryClearFail=\u00a74Der Spieler {0} \u00a74hat keine\u00a7c {1} {2}\u00a74.
inventoryClearingAllArmor=\u00a76Es wurden alle Gegenst\u00e4nde im Inventar sowie die R\u00fcstung von \u00A7c{0} \u00a76entfernt.
inventoryClearingAllItems=\u00a76Es wurden alle Gegenst\u00e4nde im Inventar von \u00A7c{0} \u00a76entfernt.
inventoryClearingAllStack=\u00a76Es wurden alle\u00a7c {0} \u00a76von \u00A7c{1} \u00a76entfernt.
inventoryClearingFromAll=\u00a76Die Inventare aller Spieler wurden geleert...
inventoryClearingStack=\u00a7c {0} {1} \u00a76von {2} \u00a76entfernt.
is=ist
isIpBanned=\u00a76IP \u00a7c{0} \u00a76wurde gesperrt.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
internalError=\u00a7cBeim ausf\u00fchren des Befehls ist ein interner Fehler aufgetreten.
itemCannotBeSold=\u00a74Dieser Gegenstand kann nicht verkauft werden.
itemMustBeStacked=\u00a74Gegenstand muss als Stapel verkauft werden. Eine Anzahl von 2s verkauft 2 Stapel, usw.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Gegenstand muss als Stapel verkauft werden. Eine Anzahl von 2s verkauft 2 Stapel usw.
itemNames=\u00a76Kurze Gegenstandsnamen\:\u00a7r {0}
itemNotEnough1=\u00a74Du hast nicht genug Gegenst\u00e4nde zum Verkaufen.
itemNotEnough2=\u00a76Wenn du alles von dieser Art verkaufen m\u00f6chtest, nutze /sell itemname.
itemNotEnough3=\u00a76/sell itemname -1 verkauft alles bis auf eins, usw.
itemsConverted=\u00a76Alle Items in Bl\u00f6cke konvertiert.
itemsCsvNotLoaded=Konnte items.csv nicht laden\!
itemSellAir=Du versuchst Luft zu verkaufen? Nimm einen Gegenstand in die Hand.
itemsNotConverted=\u00a74Du hast keine Items die in Bl\u00f6cke konvertiert werden k\u00f6nnen.
itemNotEnough1=\u00a74Du hast nicht genug Gegenst\u00e4nde zu verkaufen.
itemNotEnough2=\u00a76Wenn du alles von dieser Art verkaufen m\u00f6chtest, solltest du /sell itemname nutzen.
itemNotEnough3=\u00a76/sell itemname -1 verkauft alles bis auf eins usw.
itemsConverted=\u00a76Alle Items wurden in Bl\u00f6cke konvertiert.
itemsCsvNotLoaded=items.csv konnte nicht geladen werden\!
itemSellAir=Du versuchst Luft zu verkaufen?! Nimm einen Gegenstand in die Hand.
itemsNotConverted=\u00a74Du hast keine Items, die in Bl\u00f6cke konvertiert werden k\u00f6nnen.
itemSold=\u00a7aVerkauft f\u00fcr \u00a7c{0}\u00a7a ({1} {2} Einheiten je {3})
itemSoldConsole=\u00a7a{0} $averkauft {1} f\u00fcr \u00a7a{2} \u00a7a({3} Einheiten je {4})
itemSpawn=\u00a76Gebe\u00a7c {0}\u00a76x\u00a7c {1}
itemType=\u00a76Gegenstand\:\u00a7c {0}
itemSpawn=\u00a76Du gibst dir\u00a7c {0}\u00a76x\u00a7c {1}
itemType=\u00a76Gegenstand\:\u00a7c {0} \u00a76-\u00a7c {1}
jailAlreadyIncarcerated=\u00a74Spieler ist bereits im Gef\u00e4ngnis\:\u00a7c {0}
jailList=\u00a76Jails\:\u00a7r {0}
jailMessage=\u00a74Du hast ein Verbrechen begangen, also musst du deine Zeit absitzen.
@@ -233,122 +234,122 @@ jailReleasedPlayerNotify=\u00a76Du wurdest freigelassen\!
jailSentenceExtended=\u00a76Gef\u00e4ngniszeit erweitert auf\: {0}
jailSet=\u00a76Gef\u00e4ngnis\u00a7c {0} \u00a76wurde erstellt.
jumpError=\u00a74Das w\u00fcrde deinen Computer \u00fcberlasten.
kickDefault=Vom Server geworfen.
kickedAll=\u00a74Alle Spieler vom Server geworfen.
kickDefault=Du wurdest vom Server geworfen.
kickedAll=\u00a74Alle Spieler wurden vom Server geworfen.
kickExempt=\u00a74Du kannst diesen Spieler nicht rauswerfen.
kill=\u00a7c{0} \u00a76get\u00f6tet.
killExempt=\u00a74Du kannst \u00a7c{0}\u00a74 nicht t\u00f6ten.
kitContains=\u00a76Ausr\u00fcstung \u00a7c{0} \u00a76enth\u00e4lt:
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitDelay=\u00a7m{0}\u00a7r
kitError=\u00a74Es gibt keine g\u00fcltigen Ausr\u00fcstungen.
kitError2=\u00a74Diese Ausr\u00fcstung ist nicht korrekt definiert. Kontaktiere einen Administrator.
kitGiveTo=\u00a76Gebe \u00a7c{1}\u00a76 \u00a7c{0}\u00a76-Ausr\u00fcstung.
kitInvFull=\u00a74Dein Inventar ist voll, lege Ausr\u00fcstung auf den Boden.
kitError=\u00a74Es gibt keine g\u00fcltigen Kits.
kitError2=\u00a74Dieses Kit ist nicht korrekt definiert. Kontaktiere einen Administrator.
kitGiveTo=\u00a76Du gibst \u00a7c{1}\u00a76 \u00a7c{0}\u00a76-Ausr\u00fcstung.
kitInvFull=\u00a74Dein Inventar ist voll. Das Kit wird auf den Boden gelegt.
kitItem=\u00a76- \u00a7f{0}
kitNotFound=\u00a74Diese Ausr\u00fcstung gibt es nicht.
kitOnce=\u00a74Du kannst diese Ausr\u00fcstung nicht nochmals bekommen.
kitReceive=\u00a7c{0}\u00a76-Ausr\u00fcstung erhalten.
kits=\u00a76Ausr\u00fcstungen\: \u00a7r{0}
kitTimed=\u00a74Du kannst diese Ausr\u00fcstung nicht innerhalb von\u00a7c {0}\u00a74 anfordern.
leatherSyntax=\u00a76Leder-Farbdefinition\: color\:<red>,<green>,<blue> z.B.\: color\:255,0,0.
kitNotFound=\u00a74Dieses Kit gibt es nicht.
kitOnce=\u00a74Du kannst diese Kit nicht nochmals bekommen.
kitReceive=\u00a7c{0}\u00a76-Kit erhalten.
kits=\u00a76Kits\: \u00a7r{0}
kitTimed=\u00a74Du kannst dieses Kit nicht innerhalb von\u00a7c {0}\u00a74 anfordern.
leatherSyntax=\u00a76Leder-Farberkl\u00e4rung\: color\:<red>,<green>,<blue> z.B.\: color\:255,0,0.
lightningSmited=\u00a76Du wurdest gepeinigt.
lightningUse=\u00a76Peinige {0}
lightningUse=\u00a76Peinige \u00A7c{0}
listAfkTag=\u00a77[Abwesend]\u00a7r
listAmount=\u00a76Es sind \u00a7c{0}\u00a76 von maximal \u00a7c{1}\u00a76 Spielern online.
listAmountHidden=\u00a76Es sind \u00a7c{0}\u00a76/{1}\u00a76 von maximal \u00a7c{2}\u00a76 Spielern online.
listGroupTag=\u00a76{0}\u00a7r\: \u00a7r
listHiddenTag=\u00a77[Versteckt]\u00a7r
loadWarpError=\u00a74Fehler beim Laden von Warp-Punkt {0}.
loadWarpError=\u00a74Beim Laden vom Warp-Punkt \u00A7c{0}\u00a76 ist ein Fehler aufgetreten.
localFormat=[L]<{0}> {1}
localNoOne=
mailClear=\u00a76Um deine Nachrichten zu l\u00f6schen, schreibe\u00a7c /mail clear.
mailCleared=\u00a76Nachrichten gel\u00f6scht\!
mailCleared=\u00a76Nachrichten wurden gel\u00f6scht\!
mailDelay=In der letzten Minute wurden zu viele Mails gesendet. Maximum\: {0}
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}
mailMessage={0}
mailSent=\u00a76Nachricht gesendet\!
mailSent=\u00a76Nachricht wurde gesendet\!
mailSentTo=\u00a7c{0}\u00a76 wurde diese Mail gesendet\:
mailTooLong=\u00a74Nachricht zu lang. Schreibe nicht mehr als 1000 Zeichen.
markedAsAway=\u00a76Du wirst als abwesend angezeigt.
mailTooLong=\u00a74Die Nachricht ist zu lang. Benutze weniger als 1000 Zeichen.
markedAsAway=\u00a76Du wirst jetzt als abwesend angezeigt.
markedAsNotAway=\u00a76Du wirst nicht mehr als abwesend angezeigt.
markMailAsRead=\u00a76Um deine Nachrichten zu l\u00f6schen, schreibe\u00a7c /mail clear.
matchingIPAddress=\u00a76Die folgenden Spieler haben sich vorher schonmal mit der IP-Adresse eingeloggt\:
maxHomes=\u00a74Du kannst nicht mehr als\u00a7c {0} \u00a74Homes setzen.
maxHomes=\u00a74Du kannst nicht mehr als\u00a7c {0} \u00a74Heimaten setzen.
maxMoney=\u00a74Diese \u00dcberweisung \u00fcberschreitet das Limit des Empf\u00e4ngers.
mayNotJail=\u00a74Du kannst diese Person nicht einsperren.
mayNotJailOffline=\u00a74Du darfst abgemeldete Spieler nicht einsperren.
me=Du
minimumPayAmount=\u00a7cThe minimum amount you can pay is {0}.
minimumPayAmount=\u00a7c{0}\u00a74 ist der Mindestbetrag, den du f\u00fcr eine \u00fcberweisung aufbringen musst.
minute=Minute
minutes=Minuten
missingItems=\u00a74Du hast nicht \u00a7c{0}x {1}\u00a74.
mobDataList=\u00a76G\u00fcltige Mob Daten\:\u00a7r {0}
mobsAvailable=\u00a76Mobs\:\u00a7r {0}
mobSpawnError=\u00a74Fehler beim \u00c4ndern des Monster-Spawner.
mobSpawnLimit=Anzahl an Monster auf Serverlimit beschr\u00e4nkt.
mobSpawnError=\u00a74Beim \u00c4ndern des Monster-Spawners ist ein Fehler aufgetreten.
mobSpawnLimit=Die Anzahl an Monstern wurde auf das festgelegte Limit beschr\u00e4nkt.
mobSpawnTarget=\u00a74Zielblock muss ein Monster-Spawner sein.
moneyRecievedFrom=\u00a7a{1} \u00a7ahat dir {0} gegeben.
moneySentTo=\u00a7aDu hast {1}\u00a7a {0} gegeben.
moneySentTo=\u00a7aDu hast \u00a76{1} {0} \u00A7agegeben.
month=Monat
months=Monate
moreThanZero=\u00a74Anzahl muss gr\u00f6\u00dfer als 0 sein.
moveSpeed=\u00a76Setze {0}-Geschwindigkeit f\u00fcr \u00a7c{2} \u00a76auf \u00a7c{1}.
msgDisabled=\u00a76Receiving messages \u00a7cdisabled\u00a76.
msgDisabledFor=\u00a76Receiving messages \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76.
msgEnabled=\u00a76Receiving messages \u00a7cenabled\u00a76.
msgEnabledFor=\u00a76Receiving messages \u00a7cenabled \u00a76for \u00a7c{0}\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
msgIgnore=\u00a7c{0} \u00a74has messages disabled.
moveSpeed=\u00a76Die {0}-Geschwindigkeit f\u00fcr \u00a7c{2} \u00a76wurde auf \u00a7c{1} \u00a76gesetzt.
msgDisabled=\u00a76Das Empfangen von Nachrichten wurde \u00a7cdeaktiviert\u00a76.
msgDisabledFor=\u00a76Das Empfangen von Nachrichten wurde f\u00fcr \u00a7a{0} \u00a7cdeaktiviert\u00a76.
msgEnabled=\u00a76Das Empfangen von Nachrichten wurde \u00a7caktiviert\u00a76.
msgEnabledFor=\u00a76Das Empfangen von Nachrichten wurden \u00fcr\u00a7a{0} \u00a7aktiviert\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 --> \u00a7c{1}\u00a76] \u00a7r{2}
msgIgnore=\u00a7c{0} \u00a74hat Benachrichtigungen deaktiviert.
multipleCharges=\u00a74Du kannst einem Feuerwerk nur einen Feuerwerksstern geben.
multiplePotionEffects=\u00a74Du kannst diesem Trank nur einen Effekt geben.
mutedPlayer=\u00a76Spieler\u00a7c {0}\u00a76 ist nicht mehr stumm.
mutedPlayerFor=\u00a76Spieler\u00a7c {0} \u00a76ist nun stumm f\u00fcr\u00a7c {1} \u00a76.
mutedUserSpeaks={0} versuchte zu sprechen, aber ist stumm geschaltet.
muteExempt=\u00a74Du darfst diesen Spieler nicht muten.
muteExempt=\u00a74Du darfst diesen Spieler nicht stumm schalten.
muteExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht stummschalten.
muteNotify=\u00a7c{0} \u00a76hat Spieler \u00a7c{1}\u00a76 stumm geschaltet.
muteNotifyFor=\u00a7c{0} \u00a76has muted player \u00a7c{1}\u00a76 for\u00a7c {2}\u00a76.
muteNotifyFor=\u00a7c{0} \u00a76hat den Spieler \u00a7c{1}\u00a76 f\u00fcr\u00a7c {2}\u00a76stumm geschaltet.
nearbyPlayers=\u00a76Spieler in der N\u00e4he\:\u00a7r {0}
negativeBalanceError=\u00a74Spieler darf keine Schulden machen.
negativeBalanceError=\u00a74Spieler d\u00fcrfen keine Schulden machen.
nickChanged=\u00a76Spitzname ge\u00e4ndert.
nickDisplayName=\u00a74Du musst change-displayname in der Essentials-Konfiguration aktivieren.
nickInUse=\u00a74Dieser Name wird bereits verwendet.
nickNamesAlpha=\u00a74Nicknamen d\u00fcrfen nur alphanumerische Zeichen enthalten.
nickNamesOnlyColorChanges=\u00a74Nicknames can only have their colors changed.
nickNamesOnlyColorChanges=\u00a74Beim Spitznamen darf nur die Farbe ge\u00e4ndert werden.
nickNoMore=\u00a76Du hast keinen Spitznamen mehr.
nickSet=\u00a76Dein Spitzname ist nun \u00a7c{0}.
nickSet=\u00a76Dein Spitzname lautet nun \u00a7c{0}.
nickTooLong=\u00a74Dieser Spitzname ist zu lang.
noAccessCommand=\u00a74Du hast keinen Zugriff auf diesen Befehl.
noAccessPermission=\u00a74Du hast keine Rechte, um dies zu betreten \u00a7c{0}\u00a74.
noAccessCommand=\u00a74Dir ist es nicht erlaubt, den Befehl zu verwenden.
noAccessPermission=\u00a74Dir ist es nicht erlaubt, das zu betreten. \u00a7c{0}\u00a74.
noBreakBedrock=\u00a74Du darfst Grundgestein nicht zerst\u00f6ren.
noDestroyPermission=\u00a74Du hast keine Rechte, um dies zu zerst\u00f6ren \u00a7c{0}\u00a74.
noDestroyPermission=\u00a74Du bist nicht berechtigt, um dies zu zerst\u00f6ren \u00a7c{0}\u00a74.
noDurability=\u00a74Dieser Gegenstand hat keine Haltbarkeit.
northEast=NE
northEast=NO
north=N
northWest=NW
noGodWorldWarning=\u00a74Warnung\! Unsterblichkeitsmodus ist in dieser Welt deaktiviert.
noHelpFound=\u00a74Keine \u00fcbereinstimmenden Befehle.
noHomeSetPlayer=\u00a76Spieler hat kein Zuhause gesetzt.
noHomeSetPlayer=\u00a76Der Spieler hat keine Heimat festgelegt.
noIgnored=\u00a76Du ignorierst niemanden.
noJailsDefined=\u00a76No jails defined.
noKitGroup=\u00a74Du hast auf diese Ausr\u00fcstung keinen Zugriff.
noKitPermission=\u00a74Du brauchst die Berechtigung \u00a7c{0}\u00a74 um diese Ausr\u00fcstung anzufordern.
noKits=\u00a76Es sind keine Ausr\u00fcstungen verf\u00fcgbar.
noLocationFound=\u00a74Keine g\u00fcltige Position gefunden.
noJailsDefined=\u00a76Es ist kein Gef\u00c4ngnis erstellt.
noKitGroup=\u00a74Du hast auf dieses Kit keinen Zugriff.
noKitPermission=\u00a74Du brauchst die Berechtigung \u00a7c{0}\u00a74 um dieses Kit anzufordern.
noKits=\u00a76Es sind keine Kits verf\u00fcgbar.
noLocationFound=\u00a74Es wurde keine g\u00fcltige Position gefunden.
noMail=\u00a76Du hast keine Nachrichten.
noMatchingPlayers=\u00a76Keine \u00fcbereinstimmenden Spieler gefunden.
noMetaFirework=\u00a74Du darfst keine Berechtigung Feuerwerk-Metadaten zu bearbeiten.
noMetaFirework=\u00a74Du hast keine Berechtigung Feuerwerk-Metadaten zu bearbeiten.
noMetaJson=JSON MetaDaten werden in dieser Bukkit-Version nicht unterst\u00fctzt.
noMetaPerm=\u00a74Du darfst dem Gegenstand \u00a7c{0}\u00a74 keine Metadaten geben.
none=keine
noNewMail=\u00a76Du hast keine neue Nachrichten.
noPendingRequest=\u00a74Du hast keine Teleportierungsanfragen.
noPerm=\u00a74Du hast die Berechtigung \u00a7c{0}\u00a74 nicht.
noPermissionSkull=$4Du hast nicht die Berechtigung diesen Kopf zu \u00e4ndern.
noPermissionSkull=$4Du bist nicht berechtigt, diesen Kopf zu \u00e4ndern.
noPermToAFKMessage=\u00a74Du bist nicht berechtigt eine AFK-Nachricht zu setzen.
noPermToSpawnMob=\u00a74Du bist nicht berechtigt diesen Mob zu spawnen.
noPlacePermission=\u00a7cDu hast keine Rechte einen Block in der N\u00e4he des Schildes zu platzieren.
noPlacePermission=\u00a7cDu bist nicht berechtigt, einen Block in der N\u00e4he des Schildes zu platzieren.
noPotionEffectPerm=\u00a74Du darfst den Zaubertrankeffekt \u00a7c{0} \u00a74diesem Trank nicht hinzuf\u00fcgen.
noPowerTools=\u00a76Du hast keine Powertools zugewiesen.
notAcceptingPay=\u00a74{0} \u00a74akzeptiert keine Zahlungen.
@@ -361,37 +362,37 @@ nothingInHand=\u00a74Du hast nichts in der Hand.
notRecommendedBukkit=\u00a74* \! * Die verwendete Bukkit-Version ist nicht f\u00fcr Essentials empfohlen.
notSupportedYet=Noch nicht verf\u00fcgbar.
now=jetzt
noWarpsDefined=\u00a76Keine Warp-Punkte erstellt.
nuke=\u00a75M\u00f6ge der Tod auf Euch hernieder prasseln\!
numberRequired=Ein Zahl wird ben\u00f6tigt.
noWarpsDefined=\u00a76Es sind keine Warp-Punkte erstellt.
nuke=\u00a75M\u00f6ge der Tod auf Euch hernieder prasseln und euch vernichten :>\!
numberRequired=Du musst eine Zahl angeben.
onlyDayNight=/time unterst\u00fctzt nur day und night.
onlyPlayers=\u00a74Nur Ingame-Spieler k\u00f6nnen \u00a7c{0} \u00a74benutzen.
onlyPlayerSkulls=\u00a74Du kannst nur den Besitzer von Spielerk\u00f6pfen (\u00a7c397\:3\u00a74) \u00e4ndern.
onlySunStorm=\u00a74/weather unterst\u00fctzt nur sun und storm.
openingDisposal=\u00a76Opening disposal menu...
openingDisposal=\u00a76\u00f6ffne das Entsorgungsmen\u00fc...
orderBalances=\u00a76Ordne die Kontost\u00e4nde von\u00a7c {0} \u00a76Benutzern, bitte warten ...
oversizedTempban=\u00a74Du darfst einen Spieler nicht f\u00fcr so eine lange Zeit bannen.
payConfirmToggleOff=\u00a76You will no longer be prompted to confirm payments.
payConfirmToggleOn=\u00a76You will now be prompted to confirm payments.
payConfirmToggleOff=\u00a76Du wirst nicht l\u00c4nger aufgefordert, Zahlungen zu best\u00e4tigen.
payConfirmToggleOn=\u00a76Du wirst ab jetzt aufgefordert, Zahlungen zu best\u00e4tigen.
payMustBePositive=\u00a74Du kannst nur positive Betr\u00e4ge \u00FCberweisen.
payToggleOff=\u00a76Du akzeptierst keine Zahlungen mehr.
payToggleOn=\u00a76Du akzeptierst nun Zahlungen.
pendingTeleportCancelled=\u00a74Laufende Teleportation abgebrochen.
pendingTeleportCancelled=\u00a74Die laufende Teleportation wurde abgebrochen.
playerBanIpAddress=\u00a76Spieler\u00a7c {0} \u00a76hat die IP-Adresse\u00a7c {1} \u00a76f\u00fcr\: \u00a7c{2} \u00a76gesperrt.
playerBanned=\u00a76Spieler\u00a7c {0} \u00a76bannte\u00a7c {1} \u00a76wegen\: \u00a7c{2}\u00a76.
playerInJail=\u00a74Spieler ist bereits in Gef\u00e4ngnis\u00a7c {0}\u00a76.
playerBanned=\u00a76Spieler\u00a7c {0} \u00a76hat\u00a7c {1} \u00a76wegen\: \u00a7c{2}\u00a76 gebannt.
playerInJail=\u00a74Spieler ist bereits im Gef\u00e4ngnis\u00a7c {0}\u00a76.
playerJailed=\u00a76Spieler\u00a7c {0} \u00a76eingesperrt.
playerJailedFor=\u00a76Spieler\u00a7c {0} \u00a76eingesperrt f\u00fcr {1}.
playerKicked=\u00a76Spieler\u00a7c {0} \u00a76hat\u00a7c {1} \u00a76für \u00a7c {2} \u00a76rausgeworfen.
playerJailedFor=\u00a76Spieler\u00a7c {0} \u00a76wurde f\u00fcr {1} eingesperrt.
playerKicked=\u00a76Spieler\u00a7c {0} \u00a76hat\u00a7c {1} \u00a76f\u00fcr \u00a7c {2} \u00a76rausgeworfen.
playerMuted=\u00a76Du bist jetzt stumm\!
playerMutedFor=\u00a76Du bist jetzt stumm f\u00fcr\u00a7c {0}.
playerMutedFor=\u00a76Du bist jetzt f\u00fcr\u00a7c {0} \u00a76stumm.
playerNeverOnServer=\u00a74Spieler\u00a7c {0} \u00a74war niemals auf diesem Server.
playerNotFound=\u00a74Spieler nicht gefunden.
playerTempBanned=\u00a76Spieler \u00a7c{0}\u00a76 hat \u00a7c{1}\u00a76 f\u00fcr \u00a7c{2} \u00a76 gebannt wegen: \u00a7c{3}\u00a76.
playerTempBanned=\u00a76Spieler \u00a7c{0}\u00a76 hat \u00a7c{1}\u00a76 f\u00fcr \u00a7c{2} \u00a76 gebannt. Grund: \u00a7c{3}\u00a76.
playerUnbanIpAddress=\u00a76Spieler\u00a7c {0} \u00a76hat die IP-Adresse {1} \u00a76entsperrt.
playerUnbanned=\u00a76Spieler\u00a7c {0} \u00a76hat {1}\u00a76 entbannt.
playerUnmuted=\u00a76Du bist nicht mehr stumm.
pong=Pong\!
pong=\u00A7b..::\u00a74Pông\u00A7b::..\!
posPitch=\u00a76Pitch\: {0} (Neigewinkel)
possibleWorlds=\u00a76M\u00f6gliche Welten sind die Nummern \u00a7c0\u00a76 bis \u00a7c{0}\u00a76.
posX=\u00a76X\: {0} (+Ost <-> -West)
@@ -401,35 +402,35 @@ posZ=\u00a76Z\: {0} (+S\u00fcd <-> -Nord)
potions=\u00a76Zaubertr\u00e4nke\:\u00a7r {0}\u00a76.
powerToolAir=\u00a74Befehl kann nicht mit Luft verbunden werden.
powerToolAlreadySet=\u00a74Der Befehl \u00a7c{0}\u00a74 ist bereits \u00a7c{c{1}\u00a74 zugewiesen.
powerToolAttach=\u00a76Befehl \u00a7c{0}\u00a7f erfolgreich an {1} gebunden.
powerToolAttach=\u00a76Befehl \u00a7c{0}\u00a7f wurde erfolgreich an {1} gebunden.
powerToolClearAll=\u00a76Alle Powertoolbefehle wurden entfernt.
powerToolList=\u00a76Gegenstand \u00a7c{1} \u00a76hat die folgenden Befehle\: \u00a7c{0}\u00a76.
powerToolListEmpty=\u00a74Gegenstand \u00a7c{0} $4hat keinen Befehl.
powerToolNoSuchCommandAssigned=\u00a74Der Befehl \u00a7c{0}\u00a74 wurde nicht \u00a7c{1}\u00a74 zugewiesen.
powerToolRemove=\u00a76Der Befehl \u00a7c{0}\u00a76 wurde von \u00a7c{1}\u00a76 entfernt.
powerToolRemoveAll=\u00a76Alle Befehle von \u00a7c{0}\u00a76 entfernt.
powerToolsDisabled=\u00a76Alle deine Powertools wurden deaktiviert.
powerToolsEnabled=\u00a76Alle deine Powertools wurden aktiviert.
powerToolRemoveAll=\u00a76Alle Befehle von \u00a7c{0}\u00a76 wurden entfernt.
powerToolsDisabled=\u00a76All deine Powertools wurden deaktiviert.
powerToolsEnabled=\u00a76All deine Powertools wurden aktiviert.
pTimeCurrent=\u00a76Die Zeit f\u00fcr\u00a7c {0} \u00a76ist\u00a7c {1}\u00a76.
pTimeCurrentFixed=\u00a76Die Zeit f\u00fcr \u00a7c{0}\u00a76 wurde auf \u00a7c{1}\u00a76 gesetzt.
pTimeNormal=\u00a76Die Zeit f\u00fcr \u00a7c{0}\u00a76 ist normal und entspricht der Serverzeit.
pTimeOthersPermission=\u00a74Du hast keine Berechtigung die Zeit von anderen Spielern zu \u00e4ndern.
pTimePlayers=\u00a76Diese Spieler haben ihre eigene Zeit\:\u00a7r
pTimeReset=\u00a76Zeit wurde zur\u00fcckgesetzt f\u00fcr\: \u00a7c{0}
pTimeSet=\u00a76Zeit wurde f\u00fcr \u00a7c{1}\u00a76 auf \u00a7c{0}\u00a76 gesetzt.
pTimeSetFixed=\u00a76Spielerzeit ist festgesetzt auf \u00a7c{0}\u00a76 f\u00fcr\: \u00a7c{1}
pTimeReset=\u00a76Die Zeit wurde f\u00fcr \u00a7c{0} \u00a76zur\u00fcckgesetzt.
pTimeSet=\u00a76DieZeit wurde f\u00fcr \u00a7c{1}\u00a76 auf \u00a7c{0}\u00a76 gesetzt.
pTimeSetFixed=\u00a76Spielerzeit ist f\u00fcr\: \u00a7c{1} auf \u00a7c{0}\u00a76 fixiert.
pWeatherCurrent=\u00a76Das Wetter von\u00a7c {0} \u00a76ist\u00a7c {1}\u00a76.
pWeatherInvalidAlias=\u00a74Ung\u00fcltiger Wettertyp
pWeatherNormal=\u00a7cDas Wetter von \u00a7c{0}\u00a76 ist normal, wie auf dem Server.
pWeatherOthersPermission=\u00a74Du darfst keinem Spieler das Wetter ver\u00e4ndern.
pWeatherNormal=\u00a7cDas Wetter von \u00a7c{0}\u00a76 ist normal. (Entspricht dem Wetter auf dem Server).
pWeatherOthersPermission=\u00a74Du darfst das Wetter bei Spielern nicht ver\u00e4ndern.
pWeatherPlayers=\u00a76Diese Spieler haben ihr eigenes Wetter\:\u00a7r
pWeatherReset=\u00a76Das Spielerwetter wurde zur\u00fcckgesetzt f\u00fcr\: \u00a7c{0}
pWeatherSet=\u00a76Spielerwetter gesetzt auf \u00a7c{0}\u00a76 f\u00fcr\: \u00a7c{1}.
pWeatherReset=\u00a76Das Spielerwetter wurde f\u00fcr\: \u00a7c{0}\u00a76 zur\u00fcckgesetzt.
pWeatherSet=\u00a76Spielerwetter f\u00fcr\: \u00a7c{1}\u00a76 wurde auf \u00a7c{0}\u00a76 gesetzt.
questionFormat=\u00a72[Frage]\u00a7r {0}
radiusTooBig=\u00a74Radius ist zu gro\u00df\! Maximaler Radius ist {0}.
radiusTooBig=\u00a74Der Radius ist zu gro\u00df\! Maximaler Radius ist {0}.
readNextPage=\u00a76Tippe\u00a7c /{0} {1} \u00a76f\u00fcr die n\u00e4chste Seite.
realName=\u00a7f{0}\u00a7r\u00a76 ist \u00a7f{1}
recentlyForeverAlone=\u00a74{0} ging vor Kurzem offline.
recentlyForeverAlone=\u00a74{0} ging vor kurzem Offline.
recipe=\u00a76Rezept f\u00fcr \u00a7c{0}\u00a75 (\u00a7c{1}\u00a76 von \u00a7c{2}\u00a76)
recipeBadIndex=Es gibt kein Rezept mit dieser Nummer.
recipeFurnace=\u00a76Schmelzen\: \u00a7c{0}\u00a76.
@@ -446,120 +447,121 @@ repairAlreadyFixed=\u00a74Dieser Gegenstand ben\u00f6tigt keine Reparatur.
repairEnchanted=\u00a74Du darfst keine verzauberten Gegenst\u00e4nde reparieren.
repairInvalidType=\u00a74Dieser Gegenstand kann nicht repariert werden.
repairNone=\u00a74Es sind keine Gegenst\u00e4nde vorhanden, die repariert werden k\u00f6nnen.
requestAccepted=\u00a77Teleportierungsanfrage akzeptiert.
requestAccepted=\u00a77Du hast die Teleportierungsanfrage \u00a7aangenommen.
requestAcceptedFrom=\u00a7c{0} \u00a76hat deine Teleportierungsanfrage angenommen.
requestDenied=\u00a76Teleportierungsanfrage verweigert.
requestDenied=\u00a76Du hast die Teleportierungsanfrage \u00a7cabgelehnt.
requestDeniedFrom=\u00a7c{0} \u00a76hat deine Teleportierungsanfrage abgelehnt.
requestSent=\u00a76Anfrage gesendet an\u00a7c {0}\u00a76.
requestSent=\u00a76Eine Anfrage wurde an\u00a7c {0}\u00a76 gesendet.
requestSentAlready=\u00a74Du hast {0}\u00a74 bereits eine Teleportierungsanfrage gesendet.
requestTimedOut=\u00a74Teleportierungsanfrage ist abgelaufen.
requestTimedOut=\u00a74Die Teleportierungsanfrage ist abgelaufen.
requiredBukkit=\u00a76* \! * Du brauchst mindestens CraftBukkit Build \#{0}, lade es von http\://dl.bukkit.org/downloads/craftbukkit/
resetBal=\u00a76Kontostand aller Spieler auf dem Server auf \u00a7a{0} \u00a76gesetzt.
resetBal=\u00a76Du hast den Kontostand aller Spieler auf \u00a7a{0} \u00a76gesetzt.
resetBalAll=\u00a76Guthaben wurde f\u00fcr alle Spieler auf \u00a7c{0} zur\u00fcckgesetzt.
returnPlayerToJailError=\u00a74Fehler beim zur\u00fccksetzen von\u00a7c {0} \u00a74in Gef\u00e4ngis\: {1}\!
returnPlayerToJailError=\u00a74Fehler beim zur\u00fccksetzen von\u00a7c {0} \u00a74im Gef\u00e4ngis\: {1}\!
runningPlayerMatch=\u00a76Suche nach Spielern mit ''\u00a7c{0}\u00a76'' im Namen (das kann etwas dauern)
second=Sekunde
seconds=Sekunden
seenAccounts=\u00a76Spieler ist auch bekannt als\:\u00a7c {0}
seenOffline=\u00a76Spieler\u00a7c {0} \u00a76ist \u00a74offline\u00a76 seit \u00a7c{1}\u00a76.
seenOffline=\u00a76Spieler\u00a7c {0} \u00a76ist seit \u00a7c{1}\u00a74 offline\u00a76.
seenOnline=\u00a76Spieler\u00a7c {0} \u00a76ist seit \u00a7c{1}\u00a7a online.
sellBulkPermission=\u00a76Du hast keine Permission, in Massen zu verkaufen.
sellHandPermission=\u00a76Du hast keine Permission, einzeln zu verkaufen.
sellBulkPermission=\u00a76Du hast keine Berechtigung, in Massen zu verkaufen.
sellHandPermission=\u00a76Du hast keine Berechtigung, einzeln zu verkaufen.
serverFull=Server ist voll
serverTotal=\u00a76Server insgesamt\:\u00a7c {0}
setBal=\u00a7aDein Kontostand wurde auf {0} gesetzt.
setBalOthers=\u00a7aDu hast den Kontostand von {0}\u00a7a auf {1} gesetzt.
setSpawner=\u00a76Mob-Spawner-Typ zu \u00a7c{0}\u00a76 ge\u00e4ndert.
serverUnsupported=\u00a7cDu verwendest eine Serverversion, die nicht unterst\u00fctzt wird!
setBal=\u00a7aDein Kontostand wurde auf \u00a7c{0} \u00a7agesetzt.
setBalOthers=\u00a7aDu hast den Kontostand von \u00A76{0}\u00a7a auf \u00A7c{1} \u00a7a gesetzt.
setSpawner=\u00a76Mob-Spawner-Typ ge\u00e4ndert zu \u00a7c{0}\u00a76.
sheepMalformedColor=\u00a74Ung\u00fcltige Farbe.
shoutFormat=\u00a76[Schrei]\u00a7r {0}
signFormatFail=\u00a74[{0}]
signFormatSuccess=\u00a71[{0}]
signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74Du hast keine Rechte ein Schild hier zu setzen.
signProtectInvalidLocation=\u00a74Du hast keine Berechtigung hier ein Schild zu platzieren.
similarWarpExist=\u00a74Ein Warp-Punkt mit einem \u00e4hnlichen Namen existiert bereits.
southEast=SE
southEast=SO
south=S
southWest=SW
skullChanged=\u00a76Kopf zu \u00a7c{0} \u00a76ge\u00e4ndert.
slimeMalformedSize=\u00a74Ung\u00fcltige Gr\u00f6\u00dfe.
socialSpy=\u00a76SocialSpy f\u00fcr \u00a7c{0}\u00a76\ \u00a7c{1}\u00a76.
socialSpyMsgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a77{2}
socialSpyMsgFormat=\u00a76[\u00a7c{0}\u00a76 --> \u00a7c{1}\u00a76] \u00a77{2}
socialSpyMutedPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a77(muted) \u00a7r
socialSpyPrefix=\u00a7f[\u00a76SS\u00a7f] \u00a7r
soloMob=\u00a74Das Monster m\u00f6chte allein sein.
spawned=erzeugt
spawnSet=\u00a76Spawn-Punkt gesetzt f\u00fcr Gruppe \u00a7c{0}\u00a76.
spectator=Zuschauer
sudoExempt=\u00a74Du kannst f\u00fcr diesen Spieler kein sudo-Kommando ausf\u00fchren.
spawnSet=\u00a76Du hast denSpawn-Punkt f\u00fcr die Gruppe \u00a7c{0}\u00a76 gesetzt.
spectator=Zuschauermodus
sudoExempt=\u00a74Du kannst f\u00fcr diesen Spieler keine Sudo-Befehle ausf\u00fchren.
sudoRun=\u00a7c {0} \u00a76 wurde gezwungen \u00a7r /{1} \u00a76auszuf\u00fchren
suicideMessage=\u00a76Ad\u00e9, du schn\u00f6de Welt...
suicideSuccess=\u00a76{0} \u00a76hat sich das Leben genommen.
suicideSuccess=\u00a76{0} \u00a76ist von uns gegangen. Rest in Peace :-(
survival=\u00dcberleben
takenFromAccount=\u00a7a{0} wurden von deinem Konto abgezogen.
takenFromOthersAccount=\u00a7a{0} genommen von {1}\u00a7a. Neuer Kontostand\: {2}.
teleportAAll=\u00a76Teleportierungsanfrage zu allen Spielern gesendet...
teleportAll=\u00a76Teleportiere alle Spieler...
takenFromAccount=\u00a7aVon deinem Konto wurden \u00a7c{0} \u00a7aabgezogen.
takenFromOthersAccount=\u00A7aDu hast\u00a76 {1} \u00a7c{0} \u00a7aweggenommen. Neuer Kontostand\: \u00a7c{2}.
teleportAAll=\u00a76Du hast an allen Spielern eine Teleportationsanfrage geschickt.
teleportAll=\u00a76Teleportation l\u00e4uft f\u00fcr alle Spieler...
teleportationCommencing=\u00a76Teleportation gestartet...
teleportationDisabled=\u00a76Teleportation \u00a7cdeaktiviert\u00a76.
teleportationDisabledFor=\u00a76Teleportation f\u00fcr \u00a7c{0} deaktiviert\u00a76.
teleportationEnabled=\u00a76Teleportation \u00a7caktiviert\u00a76.
teleportationEnabledFor=\u00a76Teleportation f\u00fcr \u00a7c{0} aktiviert\u00a76.
teleportAtoB=\u00a7c{0}\u00a76 teleportiert dich zu {1}\u00a76.
teleportDisabled=\u00a7c{0} \u00a74verweigert die Teleportierung.
teleportHereRequest=\u00a7c{0}\u00a76 fragt, ob du dich zu ihm teleportierst.
teleporting=\u00a76Teleportiere...
teleportDisabled=\u00a7c{0} \u00a74verweigert die Teleportation.
teleportHereRequest=\u00a7c{0}\u00a76 fragt, ob du dich zu ihm teleportieren m\u00f6chtest.
teleporting=\u00a76Teleportation l\u00e4uft...
teleportInvalidLocation=Der Wert der angegebenen Koordinaten darf nicht \u00fcber 30000000 sein
teleportNewPlayerError=\u00a74Fehler beim Teleportieren eines neuen Spielers\!
teleportRequest=\u00a7c{0}\u00a76 fragt, ob er sich zu dir teleportieren darf.
teleportRequestAllCancelled=\u00a76Alle ausstehenden Teleportationsanfragen wurden abgebrochen.
teleportRequestSpecificCancelled=\u00a76Ausstehende Teleportationsanfrage mit {0} wurde abgebrochen.
teleportRequestTimeoutInfo=\u00a76Diese Anfrage wird nach\u00a7c {0} Sekunden\u00a76 ung\u00fcltig.
teleportTop=\u00a76Teleportiere nach oben.
teleportToPlayer=\u00a76teleportieren zu \u00a7c{0}\u00a76.
teleportRequestSpecificCancelled=\u00a76Ausstehende Teleportationsanfrage mit \u00a7c{0}\u00a76 wurde abgebrochen.
teleportRequestTimeoutInfo=\u00a76Diese Anfrage wird nach\u00a7c {0} Sekunden\u00a76 ung\u00fcltig sein.
teleportTop=\u00a76Zum h\u00f6chsten Punkt teleportieren.
teleportToPlayer=\u00a76Du teleportierst dich zu \u00a7c{0}\u00a76.
tempbanExempt=\u00a74Du kannst diesen Spieler nicht zeitlich bannen.
tempbanExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht tempor\u00e4r verbannen.
tempbanJoin=You are banned from this server for {0}. Reason: {1}
tempBanned=\u00a7cDu wurdest f\u00fcr {0} verbannt\:\n\u00a7r{2}
thunder=\u00a76Es donnert nun in deiner Welt \u00a7c{0}\u00a76.
thunderDuration=\u00a76Es donnert nun f\u00fcr\u00a7c {1} \u00a76Sekunden in deiner Welt\u00a7c {0}\u00a76.
tempbanExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht zeitlich sperren.
tempbanJoin=\u00a74Du bist auf diesem Server gabennt. \nDauer: {0} \nGrund: {1}
tempBanned=\u00a7cDu wurdest f\u00fcr {0} gebannt. \:\n\u00a7r{2}
thunder=\u00a76Es donnert jetzt in deiner Welt \u00a7c{0}\u00a76.
thunderDuration=\u00a76Es donnert jetzt f\u00fcr\u00a7c {1} \u00a76Sekunden in der Welt\u00a7c {0}\u00a76.
timeBeforeHeal=\u00a74Zeit bis zur n\u00e4chsten Heilung\:\u00a7c {0}\u00a76.
timeBeforeTeleport=\u00a74Zeit bis zum n\u00e4chsten Teleport\:\u00a7c {0}
timeFormat=\u00a7c{0}\u00a76 oder \u00a7c{1}\u00a76 oder \u00a7c{2}\u00a76
timeSetPermission=\u00a74Du hast keine Berechtigung die Zeit zu \u00e4ndern.
timeSetWorldPermission=\u00a74You are not authorized to set the time in world ''{0}''.
timeSetWorldPermission=\u00a74Du bist nicht berechtigt in der Welt \u00a7c''{0}''\u00a74 die Zeit zu \u00e4ndern.
timeWorldCurrent=\u00a76Die aktuelle Zeit in\u00a7c {0} \u00a76ist \u00a7c{1}
timeWorldSet=\u00a76Die Zeit in \u00a7c{1}\u00a76 wurde zu \u00a7c{0} \u00a76gesetzt.
timeWorldSet=\u00a76Die Zeit in \u00a7c{1}\u00a76 wurde auf \u00a7c{0} \u00a76gesetzt.
totalSellableAll=\u00a7aDer Gesamtwert von allen Bl\u00f6cken und Items ist \u00a7c{1}\u00a7a.
totalSellableBlocks=\u00a7aDer Gesamtwert der verkaufbaren Bl\u00f6cke ist \u00a7c{1}\u00a7a.
totalWorthAll=\u00a7aAlle Gegenst\u00e4nde und Bl\u00f6cke f\u00fcr einen Gesamtwert von \u00a7c{1}\u00a7a verkauft.
totalWorthBlocks=\u00a7aAlle Bl\u00f6cke f\u00fcr einen Gesamtwert von \u00a7c{1}\u00a7a verkauft.
totalWorthAll=\u00a7aDu hast alle Gegenst\u00e4nde und Bl\u00f6cke f\u00fcr einen Gesamtwert von \u00a7c{1}\u00a7a verkauft.
totalWorthBlocks=\u00a7aDu hast alle Bl\u00f6cke f\u00fcr einen Gesamtwert von \u00a7c{1}\u00a7a verkauft.
tps=\u00a76Aktuelle TPS \= {0}
tradeSignEmpty=Der Bestand des Trade-Schild ist aufgebraucht.
tradeSignEmptyOwner=Es gibt nichts mehr zu Sammeln von diesem Trade-Schild.
tradeSignEmptyOwner=Es gibt nichts mehr von diesem Trade-Schild zu sammeln.
treeFailure=\u00a74Baumpflanzung gescheitert. Versuche es nochmal auf Gras oder Erde.
treeSpawned=\u00a76Baum gepflanzt.
treeSpawned=\u00a76Baum wurde gepflanzt.
true=\u00a7aja\u00a7r
typeTpacancel=\u00a76To cancel this request, type \u00a7c/tpacancel\u00a76.
typeTpaccept=\u00a76Um zu teleportieren, schreibe \u00a7c/tpaccept\u00a76.
typeTpdeny=\u00a76Um diese Anfrage abzulehnen, schreibe \u00a7c/tpdeny\u00a76.
typeTpacancel=\u00a76Du kannst die Anfrage mit \u00a7c/tpacancel\u00a76 ablehnen.
typeTpaccept=\u00a76Du kannst die Teleportationsanfrage mit \u00a7c/tpaccept\u00a76 annehmen.
typeTpdeny=\u00a76Du kannst diese Anfrage mit \u00a7c/tpdeny\u00a76 ablehnen.
typeWorldName=\u00a76Du kannst auch den Namen der Welt eingeben.
unableToSpawnItem=\u00a74Kann nicht \u00a7c{0}\u00a74 spawnen, es ist ein nicht spawnbares Item.
unableToSpawnMob=\u00a74Fehler beim Erzeugen des Monsters.
unignorePlayer=\u00a76Du ignorierst Spieler\u00a7c {0} \u00a76nicht mehr.
unableToSpawnItem=\u00a7c{0}\u00a74 Kann nicht gespawnt werde, da es ein nicht spawnbares Item ist.
unableToSpawnMob=\u00a74Beim Erschaffen des Monsters ist ein Fehler aufgetreten.
unignorePlayer=\u00a76Du ignorierst \u00a7c {0} \u00a76nicht mehr.
unknownItemId=\u00a74Unbekannte Gegenstandsnummer\:\u00a7r {0}\u00a74.
unknownItemInList=\u00a74Unbekannter Gegenstand {0} in Liste {1}.
unknownItemInList=\u00a74Unbekannter Gegenstand {0} in der Liste {1}.
unknownItemName=\u00a74Unbekannter Gegenstand\: {0}.
unlimitedItemPermission=\u00a74Keine Permission f\u00fcr unendlich Items \u00a7c{0}\u00a74.
unlimitedItemPermission=\u00a74Keine Berechtigung f\u00fcr unendliche Items \u00a7c{0}\u00a74.
unlimitedItems=\u00a76Unbegrenzte Objekte\:\u00a7r
unmutedPlayer=\u00a76Spieler\u00a7c {0}\u00a76 ist nicht mehr stumm.
unsafeTeleportDestination=\u00a74Das Teleport-Ziel ist nicht sicher und der Teleportschutz ist nicht aktiv.
unvanishedReload=\u00a74Ein Neuladen des Servers hat dich sichtbar gemacht.
unvanishedReload=\u00a74Das Neuladen des Servers hat dich sichtbar gemacht.
upgradingFilesError=Fehler beim Aktualisieren der Dateien
uptime=\u00a76Laufzeit\:\u00a7c {0}
userAFK=\u00a77{0} \u00a75ist gerade nicht da und antwortet wahrscheinlich nicht.
userAFKWithMessage=\u00a77{0} \u00a75ist gerade nicht da und antwortet wahrscheinlich nicht. Grund: {1}
userdataMoveBackError=Verschieben von userdata/{0}.tmp nach userdata/{1} gescheitert.
userdataMoveError=Verschieben von userdata/{0} nach userdata/{1}.tmp gescheitert.
userdataMoveBackError=Verschieben von userdata/{0}.tmp nach userdata/{1} ist gescheitert.
userdataMoveError=Verschieben von userdata/{0} nach userdata/{1}.tmp ist gescheitert.
userDoesNotExist=\u00a74Spieler\u00a7c {0} \u00a74existiert nicht.
userIsAway=\u00a77* {0} \u00a77ist nun abwesend.
userIsAwayWithMessage=\u00a77* {0} \u00a77ist nun abwesend.
@@ -569,25 +571,30 @@ userUnknown=\u00a74Warnung\: Der Spieler ''\u00a7c{0}\u00a74'' war nie auf diese
usingTempFolderForTesting=Benutze tempor\u00e4ren Ordner zum Testen\:
vanish=\u00a76Unsichtbar f\u00fcr {0} \u00a76\: {1}
vanished=\u00a76Du bist nun vollst\u00e4ndig unsichtbar f\u00fcr normale Benutzer und ihre Befehle.
versionMismatch=\u00a74Versionen nicht identisch\! Bitte aktualisiere {0}.
versionMismatchAll=\u00a74Versionen ungleich\! Bitte aktualisiere alle Essentials jar-Dateien auf die gleiche Version.
voiceSilenced=\u00a76Du bist nun stumm\!
versionOutputVaultMissing=\u00a74Vault ist nicht installiert. Der Chat und die Permission k\u00F6nnten nicht funktionieren.
versionOutputFine=\u00a76{0} Version: \u00a7a{1}
versionOutputWarn=\u00a76{0} Version: \u00a7c{1}
versionOutputUnsupported=\u00a7d{0} \u00a76Version: \u00a7d{1}
versionOutputUnsupportedPlugins=\u00a76Du verwendest Plugins, die \u00A7dnicht \u00a76unterst\u00fctzt werden!
versionMismatch=\u00a74Versionen sind nicht gleich\! Bitte aktualisiere {0}.
versionMismatchAll=\u00a74Versionen sind nicht gleich\! Bitte aktualisiere alle Essentials jar-Dateien auf die gleiche Version.
voiceSilenced=\u00a76Du bist nun stummgeschaltet\!
walking=gehend
warpDeleteError=\u00a74Fehler beim L\u00f6schen der Warp-Datei.
warpingTo=\u00a76Teleportiere zu Warp-Punkt\u00a7c {0}\u00a76.
warpDeleteError=\u00a74Beim L\u00f6schen der Warp-Datei ist ein Fehler aufgetreten.
warpingTo=\u00a76Du teleportierst dich nach\u00a7c {0}\u00a76.
warpList={0}
warpListPermission=\u00a74Du hast keine Berechtigung, die Warp-Punkte anzuzeigen.
warpListPermission=\u00a74Du hast keine Berechtigung die Warp-Punkte anzuzeigen.
warpNotExist=\u00a74Warp-Punkt existiert nicht.
warpOverwrite=\u00a74Du kannst diesen Warp-Punkt nicht ersetzen.
warps=\u00a76Warp-Punkte\:\u00a7r {0}
warpsCount=\u00a76Es existieren\u00a7c {0} \u00a76Warps. Zeige \u00a7c{1} \u00a76von \u00a7c{2}\u00a76.
warpsCount=\u00a76Es existieren\u00a7c {0} \u00a76Warps. Zeige \u00a7c{1} \u00a76von \u00a7c{2}\u00a76 an.
warpSet=\u00a76Warp-Punkt\u00a7c {0} \u00a76wurde erstellt.
warpUsePermission=\u00a74Du hast keinen Zugriff f\u00fcr diesen Warp-Punkt.
weatherInvalidWorld=Welt mit dem Namen {0} wurde nicht gefunden\!
weatherStorm=\u00a76In \u00a7c{0} \u00a76st\u00fcrmt es nun.
weatherStormFor=\u00a76In \u00a7c{0} \u00a76st\u00fcrmt es nun f\u00fcr {1} Sekunden.
weatherSun=\u00a76In \u00a7c{0}\u00a76 scheint nun die \u00a7cSonne\u00a76.
weatherSunFor=\u00a76In \u00a7c{0} \u00a76scheint nun f\u00fcr {1} Sekunden die \u00a7cSonne\u00a76.
warpUsePermission=\u00a74Du bist f\u00fcr diesen Warp-Punkt nicht berechtigt.
weatherInvalidWorld=Die Welt mit dem Namen {0} wurde nicht gefunden\!
weatherStorm=\u00a76In \u00a7c{0} \u00a76st\u00fcrmt es jetzt.
weatherStormFor=\u00a76In \u00a7c{0} \u00a76st\u00fcrmt es jetzt f\u00fcr {1} Sekunden.
weatherSun=\u00a76In \u00a7c{0}\u00a76 scheint jetzt die \u00a7cSonne\u00a76.
weatherSunFor=\u00a76In \u00a7c{0} \u00a76scheint jetzt f\u00fcr {1} Sekunden die \u00a7cSonne\u00a76.
west=W
whoisAFK=\u00a76 - Abwesend\:\u00a7r {0}
whoisAFKSince=\u00a76 - AFK\:\u00a7r {0} (Seit {1})
@@ -606,14 +613,14 @@ whoisMoney=\u00a76 - Kontostand\:\u00a7r {0}
whoisMuted=\u00a76 - Stumm\:\u00a7r {0}
whoisNick=\u00a76 - Spitzname\:\u00a7r {0}
whoisOp=\u00a76 - OP\:\u00a7r {0}
whoisPlaytime=\u00a76 - Playtime\:\u00a7r {0}
whoisPlaytime=\u00a76 - Spielzeit\:\u00a7r {0}
whoisTempBanned=\u00a76 - Bann endet:\u00a7r {0}
whoisTop=\u00a76 \=\=\=\=\=\= WhoIs\:\u00a7c {0} \u00a76\=\=\=\=\=\=
whoisUuid=\u00a76 - UUID\:\u00a7r {0}
worth=\u00a7aEin Stapel {0} ist \u00a7c{1}\u00a7a wert ({2} Einheiten je {3})
worthMeta=\u00a7aEin Stapel von {0} mit Metadaten {1} ist \u00a7c{2}\u00a7a wert. ({3} Einheiten je {4})
worth=\u00a7aEin Stapel {0} ist \u00a7c{1}\u00a7a wert. ({2} St\u00fcck je {3})
worthMeta=\u00a7aEin Stapel von {0} mit Metadaten {1} ist \u00a7c{2}\u00a7a wert. ({3} St\u00fcck je {4})
worthSet=\u00a76Wert des Gegenstands gesetzt.
year=Jahr
years=Jahre
youAreHealed=\u00a76Du wurdest geheilt.
youHaveNewMail=\u00a76Du hast \u00a7c{0} \u00a76Nachrichten\! Schreibe \u00a7c/mail read\u00a76 um deine Nachrichten anzuzeigen.
youHaveNewMail=\u00a76Du hast \u00a7c{0} \u00a76Nachrichten\! Schreibe \u00a7c/mail read\u00a76 damit du deine Nachrichten lesen kannst.
+11 -5
View File
@@ -211,6 +211,7 @@ is=is
isIpBanned=\u00a76IP \u00a7c{0} \u00a76is banned.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74That item cannot be sold to the server.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Item must be traded in stacks. A quantity of 2s would be two stacks, etc.
itemNames=\u00a76Item short names\:\u00a7r {0}
itemNotEnough1=\u00a74You do not have enough of that item to sell.
@@ -251,7 +252,7 @@ kitOnce=\u00a74You can''t use that kit again.
kitReceive=\u00a76Received kit\u00a7c {0}\u00a76.
kits=\u00a76Kits\:\u00a7r {0}
kitTimed=\u00a74You can''t use that kit again for another\u00a7c {0}\u00a74.
leatherSyntax=\u00a76Leather color syntax\: color\:<red>,<green>,<blue> eg\: color\:255,0,0.
leatherSyntax=\u00a76Leather color syntax\: color\:<red>,<green>,<blue> eg\: color\:255,0,0 OR color\:<rgb int> eg\: color\:16777011
lightningSmited=\u00a76Thou hast been smitten\!
lightningUse=\u00a76Smiting\u00a7c {0}
listAfkTag=\u00a77[AFK]\u00a7r
@@ -262,7 +263,7 @@ listHiddenTag=\u00a77[HIDDEN]\u00a7r
loadWarpError=\u00a74Failed to load warp {0}.
localFormat=[L]<{0}> {1}
localNoOne=
mailClear=\u00a76To mark your mail as read, type\u00a7c /mail clear\u00a76.
mailClear=\u00a76To clear your mail, type\u00a7c /mail clear\u00a76.
mailCleared=\u00a76Mail cleared\!
mailDelay=Too many mails have been sent within the last minute. Maximum\: {0}
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}
@@ -304,7 +305,7 @@ multipleCharges=\u00a74You cannot apply more than one charge to this firework.
multiplePotionEffects=\u00a74You cannot apply more than one effect to this potion.
mutedPlayer=\u00a76Player\u00a7c {0} \u00a76muted.
mutedPlayerFor=\u00a76Player\u00a7c {0} \u00a76muted for\u00a7c {1}\u00a76.
mutedUserSpeaks={0} tried to speak, but is muted.
mutedUserSpeaks={0} tried to speak, but is muted: {1}
muteExempt=\u00a74You may not mute that player.
muteExemptOffline=\u00a74You may not mute offline players.
muteNotify=\u00a7c{0} \u00a76has muted player \u00a7c{1}\u00a76.
@@ -467,7 +468,7 @@ sellBulkPermission=\u00a76You do not have permission to bulk sell.
sellHandPermission=\u00a76You do not have permission to hand sell.
serverFull=Server is full\!
serverTotal=\u00a76Server Total\:\u00a7c {0}
serverUnsupported=\u00a76You are running an \u00a74unsupported server version\u00a76.
serverUnsupported=You are running an unsupported server version!
setBal=\u00a7aYour balance was set to {0}.
setBalOthers=\u00a7aYou set {0}\u00a7a''s balance to {1}.
setSpawner=\u00a76Changed spawner type to\u00a7c {0}\u00a76.
@@ -491,7 +492,7 @@ soloMob=\u00a74That mob likes to be alone.
spawned=spawned
spawnSet=\u00a76Spawn location set for group\u00a7c {0}\u00a76.
spectator=spectator
sudoExempt=\u00a74You cannot sudo this user.
sudoExempt=\u00a74You cannot sudo \u00a7c{0}.
sudoRun=\u00a76Forcing\u00a7c {0} \u00a76to run\:\u00a7r /{1}
suicideMessage=\u00a76Goodbye cruel world...
suicideSuccess=\u00a76Player \u00a7c{0} \u00a76took their own life.
@@ -570,6 +571,11 @@ userUnknown=\u00a74Warning\: The user ''\u00a7c{0}\u00a74'' has never joined thi
usingTempFolderForTesting=Using temp folder for testing\:
vanish=\u00a76Vanish for {0}\u00a76\: {1}
vanished=\u00a76You are now completely invisible to normal users, and hidden from in-game commands.
versionOutputVaultMissing=\u00a74Vault is not installed. Chat and permissions may not work.
versionOutputFine=\u00a76{0} version: \u00a7a{1}
versionOutputWarn=\u00a76{0} version: \u00a7c{1}
versionOutputUnsupported=\u00a7d{0} \u00a76version: \u00a7d{1}
versionOutputUnsupportedPlugins=\u00a76You are running \u00a7dunsupported plugins\u00a76!
versionMismatch=\u00a74Version mismatch\! Please update {0} to the same version.
versionMismatchAll=\u00a74Version mismatch\! Please update all Essentials jars to the same version.
voiceSilenced=\u00a76Your voice has been silenced\!
File diff suppressed because it is too large. Load diff
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00a76Eliminado\u00a7c {0} \u00a76de\u00a7c {1} \u00a76d
is=es
isIpBanned=\u00a76IP \u00a7c{0} \u00a76est\u00e1 baneada.
itemCannotBeSold=\u00a74\u00a1Ese objeto no puede ser vendido al servidor\!
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=El objeto tiene que ser intercambiado en montones. Una cantidad de 2s ser\u00edan dos montones, etc.
itemNames=\u00a76Nombre corto del \u00edtem\:\u00a7r {0}
File diff suppressed because it is too large. Load diff
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00a76Removed\u00a7c {0} \u00a76of\u00a7c {1} \u00a76fro
is=on
isIpBanned=\u00a76IP \u00a7c {0} \u00a76On karkoitettu.
itemCannotBeSold=Tuota tavaraa ei voi myyd\u00e4 t\u00e4ll\u00e4 palvelimella.
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=Tavara pit\u00e4\u00e4 vaihtaa pakattuina. M\u00e4\u00e4r\u00e4 2s olisi kaksi pakettia, jne.
itemNames=\u00a76Item short names\:\u00a7r {0}
+1
View File
@@ -211,6 +211,7 @@ is=est
isIpBanned=\u00a76L''IP \u00a7c{0} \u00a76est bannie.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=Cet objet ne peut \u00eatre vendu au serveur.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=Cet objet doit \u00eatre vendu par 64. Une quantit\u00e9 de 2 serait deux fois 64.
itemNames=Noms d''item courts \: {0}
itemNotEnough1=\u00a7cVous n''avez pas assez de cet objet pour le vendre.
+1
View File
@@ -211,6 +211,7 @@ is=van
isIpBanned=\u00a76IP \u00a7c{0} \u00a76m\u00e1r ki van tiltva.
internalError=\u00a7cBels\u00f5 hiba t\u00f6rt\u00e9nt a parancs v\u00e9grehajt\u00e1sa k\u00f6zben.
itemCannotBeSold=\u00a74Ezt nem adhatod el a szerveren.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74A t\u00e1rgyat k\u00f6tegben kell \u00e9rt\u00e9kes\u00edteni. A 2s mennyis\u00e9ge k\u00e9t stack lenne, stb.
itemNames=\u00a76T\u00e1rgy r\u00f6vid nevei\:\u00a7r {0}
itemNotEnough1=\u00a74Nincs el\u00e9g eladni val\u00f3 t\u00e1rgyad.
+1
View File
@@ -211,6 +211,7 @@ is=\u00E8
isIpBanned=\u00a76L''IP \u00a7c{0} \u00a76\u00e8 bannato.
internalError=\u00a7cSi \u00e8 verificato un errore durante l''esecuzione di questo comando.
itemCannotBeSold=\u00a74Quell''oggetto non pu\u00F2 essere venduto al server.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74L''oggetto deve essere scambiato in stack. Una quantit\u00E0 di 2 sarebbero due stack, etc.
itemNames=\u00a76Nomi corti oggetti\:\u00a7r {0}
itemNotEnough1=\u00a74Non hai abbastanza di quell''oggetto per venderlo.
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00a76Removed\u00a7c {0} \u00a76of\u00a7c {1} \u00a76fro
is=\uc740/\ub294
isIpBanned=\u00a76IP \u00a7c{0} \u00a76\ub294 \ucc28\ub2e8 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
itemCannotBeSold=\uadf8 \uc544\uc774\ud15c\uc740 \uc11c\ubc84\uc5d0 \ud314 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=\uc544\uc774\ud15c\uc744 \uac70\ub798\ud558\uae30 \uc704\ud574\uc11c 2\uac1c \uc774\uc0c1\uc758 \uac19\uc740\uc544\uc774\ud15c\uc744 \uac00\uc9c0\uace0\uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.
itemNames=\u00a76\uc9e7\uc740 \uc544\uc774\ud15c \uc774\ub984\:\u00a7r {0}
+1
View File
@@ -211,6 +211,7 @@ is=is
isIpBanned=\u00a76IP \u00a7c{0} \u00a76yra u\u017eblokuotas.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74\u0160is daiktas negali b\u016bti parduotas serveryje.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Daiktas turi buti parduotas po 1 stack.
itemNames=\u00a76Daikt\u0173 trumpi pavadinimai\:\u00a7r {0}
itemNotEnough1=\u00a74Tu neturi pakankamai daiktu pardavimui.
+17 -16
View File
@@ -2,10 +2,10 @@
#version: ${full.version}
# Single quotes have to be doubled: ''
# Translations start here
# by:
# by: DutchUser
action=\u00a75* {0} \u00a75{1}
addedToAccount=\u00a7a{0} is gestort op uw rekening.
addedToOthersAccount=\u00a7a{0} toegevoegd aan {1}\u00a7a zijn rekening. Nieuw saldo\: {2}
addedToOthersAccount=\u00a7a{0} is toegevoegd aan {1}\u00a7a zijn rekening. Nieuw saldo\: {2}
adventure=avontuur
alertBroke=gebroken\:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} bij\: {3}
@@ -77,7 +77,7 @@ couldNotFindTemplate=Het sjabloon kon niet worden gevonden {0}.
createdKit=\u00a76Kit \u00a7c{0} \u00a76gemaakt met \u00a7c{1} \u00a76items en met \u00a7c{2} \u00a76seconden afkoeltijd.
createKitFailed=\u00a74Fout opgetreden tijdens het maken van kit {0}.
createKitSeparator=\u00a7m-----------------------
createKitSuccess=\u00a76Created Kit: \u00a7f{0}\n\u00a76Delay: \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Copy contents in the link above into your config.yml.
createKitSuccess=\u00a76Gemaakte Kit: \u00a7f{0}\n\u00a76Vertraging \u00a7f{1}\n\u00a76Link: \u00a7f{2}\n\u00a76Kopieer wat in de link staat in de kits.yml
creatingConfigFromTemplate=Bezig met aanmaken van een config vanaf sjabloon\: {0}
creatingEmptyConfig=Bezig met het aanmaken van een lege configuratie\: {0}
creative=creatief
@@ -139,7 +139,7 @@ flyMode=\u00a77Zet vliegen {0} voor {1}.
foreverAlone=\u00a7cU heeft niemand naar wie u kan reageren.
fullStack=\u00a74U heeft al een volledige stapel.
gameMode=De gamemodus van {1} is veranderd naar {0}.
gameModeInvalid=\u00a74U moet een geldige speler/mode opgeven.
gameModeInvalid=\u00a74U moet een geldige speler/gamemodus opgeven.
gcfree=Vrij geheugen\: {0} MB
gcmax=Maximaal geheugen\: {0} MB
gctotal=Toegewezen geheugen\: {0} MB
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00a76\u00a7c {0} \u00a76stuks\u00a7c {1} \u00a76zijn ve
is=is
isIpBanned=\u00a76IP \u00a7c {0} \u00a76is verbannen.
itemCannotBeSold=Dat voorwerp kan niet aan de server worden verkocht.
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=Voorwerp moet geruild worden als stapel. Een hoeveelheid van 2 moet dus geruild worden als twee stapels, etc.
itemNames=Kortere namen voor het item\: {0}
@@ -225,7 +226,7 @@ itemSoldConsole={0} verkocht {1} voor \u00a77{2} \u00a77({3} voorwerpen voor {4}
itemSpawn=\u00a77Geeft {0} {1}
itemType=\u00a76Voorwerp\:\u00a7c {0}
jailAlreadyIncarcerated=\u00a74Deze persoon zit al in de gevangenis\:\u00a7c {0}
jailList=\u00a76Jails\:\u00a7r {0}
jailList=\u00a76Gevangenissen\:\u00a7r {0}
jailMessage=\u00a74U begaat een misdrijf, U zit uw tijd uit.
jailNotExist=\u00a74Die gevangenis bestaat niet.
jailReleased=\u00a76Speler \u00a7c{0}\u00a76 vrijgelaten.
@@ -238,13 +239,13 @@ kickedAll=\u00a74Alle spelers van de server afgeschopt.
kickExempt=\u00a74U kunt die speler niet van de server afschoppen.
kill=\u00a76U vermoorde\u00a7c {0}\u00a76.
killExempt=\u00a74Je kan niet vermoorden\u00a7c{0}\u00a74.\n
kitContains=\u00a76Kit \u00a7c{0} \u00a76contains:
kitContains=\u00a76Kit \u00a7c{0} \u00a76bevat:
kitCost=\ \u00a77\u00a7o({0})\u00a7r
kitDelay=\u00a7m{0}\u00a7r
kitError=\u00a74Er zijn geen geldige kits.
kitError2=\u00a74Die kit is niet goed ingesteld. Neem contact op met een administrator.
kitGiveTo=\u00a76Geeft kit\u00a7c {0}\u00a76 aan \u00a7c{1}\u00a76.\n
kitInvFull=\u00a74Uw inventaris was vol, de kit wordt op de grond geplaatst.
kitInvFull=\u00a74Uw inventaris is vol, de kit wordt op de grond geplaatst.
kitItem=\u00a76- \u00a7f{0}
kitNotFound=\u00a74Deze kit bestaat niet.
kitOnce=\u00a74U kunt deze kit niet opnieuw gebruiken.
@@ -263,11 +264,11 @@ loadWarpError=\u00a74Fout bij het laden van warp {0}.
localFormat=[L]<{0}> {1}
localNoOne=
mailClear=\u00a76Om je mail te markeren als gelezen, typ\u00a7c /mail clear\u00a76.\n
mailCleared=\u00a76Berichten verwijderd\!
mailDelay=Er zijn teveel mails verzonden in een minuut. Het maximale aantal berichten\: {0}
mailCleared=\u00a76Mails verwijderd\!
mailDelay=Er zijn teveel mails verzonden in een minuut. Het maximale aantal mails\: {0}
mailFormat=\u00a76[\u00a7r{0}\u00a76] \u00a7r{1}
mailMessage={0}
mailSent=\u00a76Bericht verzonden\!
mailSent=\u00a76Mail verzonden\!
mailSentTo=\u00a7c{0}\u00a76 is de volgende mail gestuurd\:
mailTooLong=\u00a74Mail bericht te lang. Probeer om het onder 1000 tekens te houden.
markedAsAway=\u00a76U staat nu als afwezig gemarkeerd.
@@ -299,7 +300,7 @@ msgDisabledFor=\u00a76Berichten ontvangen \u00a7cuitgeschakelt \u00a76voor \u00a
msgEnabled=\u00a76Berichten ontvangen \u00a7caingeschakelt\u00a76.
msgEnabledFor=\u00a76Berichten ontvangen \u00a7cingeschakelt \u00a76voor \u00a7c{0}\u00a76.
msgFormat=\u00a76[\u00a7c{0}\u00a76 -> \u00a7c{1}\u00a76] \u00a7r{2}
msgIgnore=\u00a7c{0} \u00a74heeft berichten uitstaan.
msgIgnore=\u00a7c{0} \u00a74heeft u genegeerd.
multipleCharges=\u00a74U kunt niet meer dan \u00e9\u00e9n lading aan dit vuurwerk toevoegen.
multiplePotionEffects=\u00a74U kunt niet meer dan \u00e9\u00e9n effect aan dit toverdrankje toevoegen.
mutedPlayer=\u00a76Speler\u00a7c {0} \u00a76gedempt.
@@ -308,7 +309,7 @@ mutedUserSpeaks={0} probeerde te praten, maar is gedempt.
muteExempt=\u00a74U kunt deze speler niet dempen.
muteExemptOffline=\u00a74U mag spelers die offline zijn niet dempen.
muteNotify=\u00a7c{0} \u00a76heeft \u00a7c{1} \u00a76gedempt.
muteNotifyFor=\u00a7c{0} \u00a76has muted player \u00a7c{1}\u00a76 for\u00a7c {2}\u00a76.
muteNotifyFor=\u00a7c{0} \u00a76heeft speler \u00a7c{1}\u00a76 gedempt voor\u00a7c {2}\u00a76.
nearbyPlayers=\u00a76Spelers dichtbij\:\u00a7r {0}
negativeBalanceError=Het is voor deze gebruiker niet toegestaan om een negatief saldo te hebben.
nickChanged=Bijnaam veranderd.
@@ -331,7 +332,7 @@ north=N
northWest=NW
noHomeSetPlayer=Speler heeft geen home.
noIgnored=\u00a76U negeert niemand.
noJailsDefined=\u00a76No jails defined.
noJailsDefined=\u00a76Geen gevangenis gedefinieerd.
noKitGroup=\u00a74U heeft geen toestemming om deze kit te gebruiken.
noKitPermission=\u00a74U heeft de \u00a7c{0}\u00a74 toestemming nodig om die kit te gebruiken.
noKits=\u00a77Er zijn nog geen kits beschikbaar.
@@ -377,7 +378,7 @@ payMustBePositive=\u00a74De aantal wat je wilt betalen moet positief zijn.
payToggleOff=\u00a76Je accepteert niet langer betalingen.
payToggleOn=\u00a76Je accepteert betalen weer.
pendingTeleportCancelled=\u00a74Afwachtende teleportatie afgelast.
playerBanIpAddress=\u00a76Player\u00a7c {0} \u00a76banned IP address\u00a7c {1} \u00a76for\: \u00a7c{2}\u00a76.
playerBanIpAddress=\u00a76Speler\u00a7c {0} \u00a76heeft IP\u00a7c {1} \u00a76verbannen voor\: \u00a7c{2}\u00a76.
playerBanned=\u00a74Speler \u00a7c{0} \u00a74is verbannen voor {2}
playerInJail=\u00a74De speler is al in de gevangenis \u00a7c{0}\u00a74.
playerJailed=\u00a76Speler\u00a7c {0} \u00a76is in de gevangenis gezet.
@@ -511,8 +512,8 @@ teleporting=\u00a76Bezig met teleporteren...
teleportInvalidLocation=De waarde van co\u00f6rdinaten kan niet hoger dan 30000000 zijn
teleportNewPlayerError=\u00a74Fout bij het teleporteren van nieuwe speler\!
teleportRequest=\u00a7c{0}\u00a76 vraagt of hij naar u kan teleporteren.
teleportRequestAllCancelled=\u00a76All outstanding teleport requests cancelled.
teleportRequestSpecificCancelled=\u00a76Outstanding teleport request with {0} cancelled.
teleportRequestAllCancelled=\u00a76Alle openstaaande teleport verzoeken zijn geannuleerd.
teleportRequestSpecificCancelled=\u00a76Openstaande teleport verzoeken van {0} zijn geannuleerd.
teleportRequestTimeoutInfo=\u00a76Dit verzoekt verloopt na\u00a7c {0} seconde(n)\u00a76.
teleportTop=\u00a77Bezig met teleporteren naar het hoogste punt.
teleportToPlayer=\u00a76Teleporteren naar \u00a7c{0}\u00a76.
+1
View File
@@ -211,6 +211,7 @@ is=jest
isIpBanned=\u00a77IP \u00a7c{0} \u00a77jest zbanowany.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a7rNie mo\u017Cesz sprzeda\u0107 tego przedmiotu serwerowi.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Przedmiotem handluje si\u0119 w stackach. Wielko\u015B\u0107 2s to dwa stacki itd.
itemNames=\u00a77Kr\u00F3tka nazwa\:\u00a7r {0}
itemNotEnough1=\u00a74Masz za ma\u0142o tego przedmiotu, aby go sprzeda\u0107.
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00A76Removido\u00A7c {0} \u00A76de\u00A7c {1} \u00A76de
is=\u00E9
isIpBanned=\u00A76IP \u00A7c{0} \u00A76 est\u00E1 banido.
itemCannotBeSold=\u00A74Esse item n\u00E3o pode ser vendido ao servidor.
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=\u00A74O item tem de ser trocado em stacks. A quantidade de 2 deveria ser 2 stacks, etc.
itemNames=\u00A76Nomes pequenos para o itens:\u00A7r {0}
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00A76Removido\u00A7c {0} \u00A76de\u00A7c {1} \u00A76de
is=\u00E9
isIpBanned=\u00A76IP \u00A7c{0} \u00A76 est\u00E1 banido.
itemCannotBeSold=\u00A74Esse item n\u00E3o pode ser vendido para o servidor.
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=\u00A74O item deve ser trocado em packs. A quantidade de 2 deveria ser 2 packs, etc.
itemNames=\u00A76Nomes pequenos para o item\:\u00A7r {0}
+1
View File
@@ -211,6 +211,7 @@ is=este
isIpBanned=\u00a76IP-ul \u00a7c {0} \u00a76este interzis.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74Acest obiect nu poate fi vandut pe server.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74Obiectul trebuie comercializat in stacuri. O cantitate de 2s ar trebuie sa fie 2 stacuri, s.a.m.d.
itemNames=\u00a76Numele scurte ale obiectului\:\u00a7r {0}
itemNotEnough1=\u00a74YNu ai destul din acest obiect pentru a-l putea vinde.
+1
View File
@@ -211,6 +211,7 @@ is=\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f
isIpBanned=\u00a76IP \u00a7c{0} \u00a76\u0437\u0430\u0431\u0430\u043d\u0435\u043d.
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74\u042d\u0442\u043e\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0434\u0430\u043d.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74\u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u0441\u0442\u0430\u043a\u0435. A quantity of 2s would be two stacks, etc.
itemNames=\u00a76\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430\:\u00a7r {0}
itemNotEnough1=\u00a74\u0423 \u0412\u0430\u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u0436\u0438.
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00a76Tog bort \u00a7c {0} \u00a76av\u00a7c {1} \u00a76f
is=\u00e4r
isIpBanned=\u00a76IP \u00a7c {0} \u00a76\u00e4r bannad.
itemCannotBeSold=Det objektet kan inte s\u00e4ljas till servern.
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=Objektet m\u00e5ste k\u00f6pas i staplar. En m\u00e4ngd av 2s kommer bli 2 staplar, etc.
itemNames=F\u00f6rkortning p\u00e5 objekt\: {0}
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00a76Silindi\u00a7c {0} \u00a76of\u00a7c {1} \u00a76Tar
is=olan
isIpBanned=\u00a76IP \u00a7c{0} \u00a76yasaklandi.
itemCannotBeSold=\u00a74Bu Esyayi Sunucuya Satamazsiniz\!
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=\u00a74Esya Takasi Icin Elindeki Esyanin Bir Stack(Dolu 64) Olmasi Gerekir.
itemNames=\u00a76Esya Kisaltmalari\:\u00a7r {0}
+1
View File
@@ -188,6 +188,7 @@ invalidWarpName=\u00a74\u0054\u00ea\u006e \u006b\u0068\u0075 \u0076\u1ef1\u0063
invalidWorld=\u00a74\u0054\u0068\u1ebf \u0067\u0069\u1edb\u0069 \u006b\u0068\u00f4\u006e\u0067 \u0068\u1ee3\u0070 \u006c\u1ec7.
is=\u006c\u01b0\u0075 \u0067\u0069\u1eef
itemCannotBeSold=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u006e\u00e0\u0079 \u006b\u0068\u00f4\u006e\u0067 \u0074\u0068\u1ec3 \u0062\u00e1\u006e \u0074\u0072\u00ea\u006e \u006d\u00e1\u0079 \u0063\u0068\u1ee7.
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74\u0056\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0111\u1ed5\u0069 \u0111\u01b0\u1ee3\u0063 \u0070\u0068\u1ea3\u0069 \u0111\u1ea7\u0079\u002e \u004d\u1ed9\u0074 \u0073\u1ed1 \u006c\u01b0\u1ee3\u006e\u0067 \u0111\u1ea7\u0079 \u0068\u01a1\u006e \u006e\u00f3 \u0073\u1ebd \u0074\u0068\u00e0\u006e\u0068 \u0068\u0061\u0069\u002c \u0076\u002e\u0076\u002e\u002e\u002e.
itemNames=\u00a76\u0054\u00ea\u006e \u0074\u0068\u0075 \u0067\u1ecd\u006e\:\u00a7r {0}
itemNotEnough1=\u00a74\u0042\u1ea1\u006e \u006b\u0068\u00f4\u006e\u0067 \u0063\u00f3 \u0111\u1ee7 \u0076\u1ead\u0074 \u0070\u0068\u1ea9\u006d \u0111\u1ec3 \u0062\u00e1\u006e.
+1
View File
@@ -210,6 +210,7 @@ inventoryClearingStack=\u00a76\u79fb\u9664\u00a7c {0} \u00a76\u4e2a\u00a7c {1} \
is=\u662f
isIpBanned=\u00a76IP\u5730\u5740 \u00a7c{0} \u00a76\u5df2\u88ab\u5c01\u7981.
itemCannotBeSold=\u00a74\u8be5\u7269\u54c1\u65e0\u6cd5\u5356\u7ed9\u670d\u52a1\u5668
itemId=\u00a76ID\:\u00a7c {0}
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemMustBeStacked=\u00a74\u7269\u54c1\u5fc5\u987b\u6210\u7ec4\u7684\u8fdb\u884c\u4ea4\u6613,2s\u4ee3\u8868\u7684\u6570\u91cf\u662f2\u7ec4\u7269\u54c1,\u4ee5\u6b64\u7c7b\u63a8
itemNames=\u00a76\u7269\u54c1\u7b80\u6613\u540d\u79f0\:\u00a7r {0}
+1
View File
@@ -211,6 +211,7 @@ is=\u662f
isIpBanned=\u00a76IP \u00a7c{0} \u00a76\u5df2\u88ab\u5c01\u9396\u3002
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74\u8a72\u7269\u54c1\u7121\u6cd5\u8ce3\u7d66\u670d\u52d9\u5668
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74\u7269\u54c1\u5fc5\u9808\u6210\u7d44\u4ea4\u6613,2s\u7684\u6578\u91cf\u662f2\u7d44,\u4ee5\u6b64\u985e\u63a8
itemNames=\u00a76\u7269\u54c1\u7c21\u6613\u540d\u7a31\:\u00a7r {0}
itemNotEnough1=\u00a74\u4f60\u6c92\u6709\u8db3\u5920\u7684\u8a72\u7269\u54c1\u4f86\u8ce3\u51fa
+1
View File
@@ -211,6 +211,7 @@ is=\u662f
isIpBanned=\u00a76IP \u00a7c{0} \u00a76\u5df2\u88ab\u5c01\u9396\u3002
internalError=\u00a7cAn internal error occurred while attempting to perform this command.
itemCannotBeSold=\u00a74\u8a72\u7269\u54c1\u7121\u6cd5\u8ce3\u7d66\u4f3a\u670d\u5668
itemId=\u00a76ID\:\u00a7c {0}
itemMustBeStacked=\u00a74\u7269\u54c1\u5fc5\u9808\u6210\u7d44\u4ea4\u6613,2s\u7684\u6578\u91cf\u662f2\u7d44,\u4ee5\u6b64\u985e\u63a8
itemNames=\u00a76\u7269\u54c1\u7c21\u6613\u540d\u7a31\:\u00a7r {0}
itemNotEnough1=\u00a74\u4f60\u6c92\u6709\u8db3\u5920\u7684\u8a72\u7269\u54c1\u4f86\u8ce3\u51fa
@@ -1,6 +1,7 @@
package com.earth2me.essentials.antibuild;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.VersionUtil;
import net.ess3.api.IEssentials;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -56,7 +57,7 @@ public class EssentialsAntiBuildListener implements Listener {
}
return false;
}
return metaPermCheck(user, action, block.getType());
return metaPermCheck(user, action, block.getType(), block.getData());
}
private boolean metaPermCheck(final User user, final String action, final Material material) {
@@ -64,6 +65,24 @@ public class EssentialsAntiBuildListener implements Listener {
return user.isAuthorized(blockPerm);
}
private boolean metaPermCheck(final User user, final String action, final Material material, final short data) {
final String blockPerm = "essentials.build." + action + "." + material;
final String dataPerm = blockPerm + ":" + data;
if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01)) {
if (user.getBase().isPermissionSet(dataPerm)) {
return user.isAuthorized(dataPerm);
} else {
if (ess.getSettings().isDebug()) {
ess.getLogger().log(Level.INFO, "DataValue perm on " + user.getName() + " is not directly set: " + dataPerm);
}
}
}
return user.isAuthorized(blockPerm);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event) {
final User user = ess.getUser(event.getPlayer());
@@ -181,7 +200,7 @@ public class EssentialsAntiBuildListener implements Listener {
}
if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) {
if (event.hasItem() && !metaPermCheck(user, "interact", item.getType())) {
if (event.hasItem() && !metaPermCheck(user, "interact", item.getType(), item.getDurability())) {
event.setCancelled(true);
if (ess.getSettings().warnOnBuildDisallow()) {
user.sendMessage(tl("antiBuildUse", item.getType().toString()));
@@ -206,7 +225,7 @@ public class EssentialsAntiBuildListener implements Listener {
final ItemStack item = event.getRecipe().getResult();
if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) {
if (!metaPermCheck(user, "craft", item.getType())) {
if (!metaPermCheck(user, "craft", item.getType(), item.getDurability())) {
event.setCancelled(true);
if (ess.getSettings().warnOnBuildDisallow()) {
user.sendMessage(tl("antiBuildCraft", item.getType().toString()));
@@ -223,7 +242,7 @@ public class EssentialsAntiBuildListener implements Listener {
final ItemStack item = event.getItemDrop().getItemStack();
if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) {
if (!metaPermCheck(user, "drop", item.getType())) {
if (!metaPermCheck(user, "drop", item.getType(), item.getDurability())) {
event.setCancelled(true);
user.getBase().updateInventory();
if (ess.getSettings().warnOnBuildDisallow()) {
@@ -250,7 +269,7 @@ public class EssentialsAntiBuildListener implements Listener {
final ItemStack item = event.getItem().getItemStack();
if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) {
if (!metaPermCheck(user, "pickup", item.getType())) {
if (!metaPermCheck(user, "pickup", item.getType(), item.getDurability())) {
event.setCancelled(true);
event.getItem().setPickupDelay(50);
}
@@ -266,7 +285,7 @@ public class EssentialsAntiBuildListener implements Listener {
final ItemStack item = event.getItem().getItemStack();
if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) {
if (!metaPermCheck(user, "pickup", item.getType())) {
if (!metaPermCheck(user, "pickup", item.getType(), item.getDurability())) {
event.setCancelled(true);
event.getItem().setPickupDelay(50);
}
@@ -1,5 +1,6 @@
package com.earth2me.essentials.protect;
import com.earth2me.essentials.utils.EnumUtil;
import net.ess3.api.IEssentials;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -12,8 +13,14 @@ import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.world.PortalCreateEvent;
import java.util.Set;
public class EssentialsProtectBlockListener implements Listener {
private static final Set<Material> WATER_TYPES = EnumUtil.getAllMatching(Material.class, "WATER", "STATIONARY_WATER");
private static final Set<Material> LAVA_TYPES = EnumUtil.getAllMatching(Material.class, "LAVA", "STATIONARY_LAVA");
final private IProtect prot;
final private IEssentials ess;
@@ -57,12 +64,12 @@ public class EssentialsProtectBlockListener implements Listener {
public void onBlockFromTo(final BlockFromToEvent event) {
final Block block = event.getBlock();
if (block.getType() == Material.WATER || block.getType() == Material.WATER) {
if (WATER_TYPES.contains(block.getType())) {
event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_water_flow));
return;
}
if (block.getType() == Material.LAVA || block.getType() == Material.LAVA) {
if (LAVA_TYPES.contains(block.getType())) {
event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_lava_flow));
return;
}
+40 -39
View File
@@ -1,71 +1,72 @@
![](https://i.imgur.com/CP4SZpB.png)
[![EssentialsX](https://i.imgur.com/CP4SZpB.png)](https://essentialsx.github.io)
[![Downloads](https://i.imgur.com/MMc0PJY.png)](http://ci.ender.zone/job/EssentialsX/)
[<img alt="Jenkins" src="https://img.shields.io/badge/-Download_from_Jenkins-D24939.svg?logo=jenkins&style=flat-square&logoColor=white" height=32>](http://ci.ender.zone/job/EssentialsX/)
[![Discord](https://imgur.com/MFRRBn4.png)](https://discord.gg/casfFyh)
[<img alt="Discord" src="https://img.shields.io/badge/-Chat_on_Discord-7289DA.svg?logo=discord&style=flat-square&logoColor=white" height=32>](https://discord.gg/casfFyh)
[<img alt="Patreon" src="https://img.shields.io/badge/-Support_on_Patreon-F96854.svg?logo=patreon&style=flat-square&logoColor=white" height=32>](https://www.patreon.com/essentialsx)
This is a fork of Essentials called EssentialsX.
If you are using this, do **NOT** ask Essentials for support.
The official upstream repository is at https://github.com/Essentials/Essentials
The official upstream repository is at https://github.com/Essentials/Essentials.
Why you should use it
Why use EssentialsX?
--------
EssentialsX provides several performance enhancements and fixes that are currently not available in Essentials and Spigot-Essentials, most notably mob spawner support for 1.8+ servers and buy/trade sign support for 1.9+ servers. [See the wiki for details.](https://github.com/EssentialsX/Essentials/wiki)
EssentialsX is an unofficial continuation of Essentials, updated to support modern Minecraft and Spigot versions. It provides several performance enhancements and fixes that are currently not available in Essentials and Spigot-Essentials. [For more details, see the wiki.](https://essentialsx.github.io/#/Improvements)
EssentialsX is almost a completely drop-in replacement for Essentials. However, it has different requirements:
* **EssentialsX requires [Vault](http://dev.bukkit.org/bukkit-plugins/vault/) to enable chat prefix/suffixes and group support if you have a supported permissions plugin.**
* **EssentialsX requires [Vault](http://dev.bukkit.org/bukkit-plugins/vault/) to enable chat prefix/suffixes and group support if you have a supported permissions plugin.** We recommend using [LuckPerms](https://luckperms.github.io).
* **If you have an unsupported permissions plugin but still wish to use wildcards, enable `use-bukkit-permissions` in the configuration. Otherwise, the plugin will fall back to config-based permissions.**
* **If you have an unsupported permissions plugin but still wish to use wildcards, enable `use-bukkit-permissions` in the configuration.** Otherwise, the plugin will fall back to config-based permissions.
* **EssentialsX requires Java 8 or higher.**
* **EssentialsX requires Java 8 or higher.** On older versions, the plugin may not work properly.
* **1.7.10 is no longer supported.**
* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2 and 1.12.2.** Support for 1.13.2 is coming soon.
Support
-------
Need help with using EssentialsX? Join the [MOSS Discord community](https://discord.gg/casfFyh) to ask for help and discuss EssentialsX.
If you need to report a bug or want to suggest a new feature, you can [open an issue on GitHub](https://github.com/EssentialsX/Essentials/issues/new/choose).
* **1.13 will be supported!**
Building
--------
Because EssentialsX builds against the Spigot/CraftBukkit server software for legacy support, you need to run Spigot's BuildTools for several versions in order to get it to compile.
EssentialsX builds against the Spigot/CraftBukkit server software for legacy support.
```
java -jar BuildTools.jar --rev 1.8
java -jar BuildTools.jar --rev 1.8.3
java -jar BuildTools.jar --rev 1.9
java -jar BuildTools.jar --rev 1.9.4
```
To compile EssentialsX, you first need to run [BuildTools](https://www.spigotmc.org/wiki/buildtools).
This only needs to be done once. There are two ways to do this:
Then, to build with Maven, use the command
* Use the provided script at `scripts/buildtools.sh` to automatically download and run BuildTools if needed.
* Download and run BuildTools yourself for versions `1.8` and `1.8.3`.
Next, to build EssentialsX with Maven, run the following command:
```
mvn clean install
```
Jar files can then be found in the /target folder for each module.
Each module's jar can be found in `target/` inside each module's directory.
Commit Guidelines
-----------------
Contributing
------------
Commits should fall into one of 3 areas:
Want to help improve EssentialsX? There are numerous ways you can contribute to the project.
- `[Feature]`: Commits which are features should start with `[Feature]` and followed by a quick summary on the top line, followed by some extra details in the commit body.
If you'd like to make a financial contribution to the project, you can join our [Patreon](https://www.patreon.com/essentialsx/).
If you can't make a donation, don't worry! There's lots of other ways to contribute:
- `[Fix]`: Commits which fix bugs, or minor improvements to existing features should start with `[Fix]` and followed by a quick summary on the top line, followed by some extra details in the commit body.
- Commits which fix bugs caused by previous commits (since last release), or otherwise make no functionality changes, should have no prefix. These will not be added to the project change log.
Other Info
-----------------
This is an unofficial fork of Essentials. It will be consistently updated and maintained with the latest Minecraft and Spigot versions.
Support
-----------------
[Issue Tracker](https://github.com/EssentialsX/Essentials/issues)
[Live Support](https://discord.gg/F7gexAQ)
* Do you run a server? Take a look at our ["help wanted" issues](https://github.com/EssentialsX/Essentials/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22),
where you can find issues that need extra testing and investigation. You can also join the [MOSS Discord community](https://discord.gg/casfFyh)
and provide support to others.
* Do you speak multiple languages? If so, we always welcome pull requests to our [language files](https://essentialsx.github.io/#/Locale).
* If you're a developer, you could look through our ["open to PR" issues](https://github.com/EssentialsX/Essentials/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22status%3A+open+to+PR%22).
We're always happy to receive bug fixes and feature additions as pull requests.
+2 -2
View File
@@ -66,7 +66,7 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
@@ -266,7 +266,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- The plugins' release version -->
<release.version>2.16-pre1</release.version>
<release.version>2.16.0</release.version>
<!-- The plugins' build number -->
<build.version>${git.closest.tag.commit.count}</build.version>
+51
View File
@@ -0,0 +1,51 @@
#!/bin/bash
mkdir -p .buildtools
pushd .buildtools
is_installed() {
mvn dependency:get -q -Dartifact=$1 -DremoteRepositories=file://$HOME/.m2/repository 1>/dev/null 2>&1
return $?
}
ensure_buildtools() {
if [ ! -f "BuildTools.jar" ]; then
echo "Downloading BuildTools..."
wget -O BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
fi
}
run_buildtools() {
ensure_buildtools
java -jar BuildTools.jar --rev $1
if [ $? -ne 0 ]; then
echo "Running BuildTools for CB $1 failed! Aborting."
popd
exit 255
else
echo "Successfully built version $1"
fi
}
# Check CB 1.8
is_installed org.bukkit:craftbukkit:1.8-R0.1-SNAPSHOT
is_18=$? # 0 = present, 1 = not present
# Check CB 1.8.3
is_installed org.bukkit:craftbukkit:1.8.3-R0.1-SNAPSHOT
is_183=$?
if [ $is_18 -ne 0 ]; then
echo "Installing CraftBukkit 1.8..."
run_buildtools 1.8
else
echo "CraftBukkit 1.8 installed; skipping BuildTools..."
fi
if [ $is_183 -ne 0 ]; then
echo "Installing CraftBukkit 1.8.3..."
run_buildtools 1.8.3
else
echo "CraftBukkit 1.8.3 installed; skipping BuildTools..."
fi
popd