diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 000000000..447aa61ba --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,51 @@ +# This workflow automatically tests new commits and pull requests as they come in. +# Note that this does not upload any artifacts, you will need to compile mcMMO manually +# if you wish to create the actual jar. +name: Compile and test + +on: + # We run our tests whenever the pom or a source file was touched. + # There is no need to run Maven when only the changelog was touched. + # We may also want to re-run this workflow when the workflow file itself + # was updated too. + push: + paths: + - 'src/**' + - 'pom.xml' + - '.github/workflows/maven.yml' + + # Whenever someone submits a new pull request which modified the pom or a source file, + # we want to ensure it compiles successfully and that all tests will pass. + pull_request: + paths: + - 'src/**' + - 'pom.xml' + +jobs: + compile: + name: Maven compiler + runs-on: ubuntu-latest + steps: + + # 1. Check out the current working tree + - name: Checkout repository + uses: actions/checkout@v2 + + # 2. Setup Java 1.8 JDK + - name: Java 1.8 setup + uses: actions/setup-java@v1.4.3 + with: + java-package: jdk + java-version: 1.8 + + # 3. Setup local Maven package cache to speed up building + - name: Cache Maven packages + uses: actions/cache@v2 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 + + # 4. Build via Maven + - name: Build via Maven + run: mvn verify -B --file pom.xml diff --git a/Changelog.txt b/Changelog.txt index 018795586..fa1f8671e 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,4 +1,7 @@ Version 2.1.175 + Fixed a bug where mcMMO would occasionally give a 65 item stack from a double smelt on a furnace + Fixed a bug where arrows could be duped when fired from a crossbow with piercing enchantment + Added setting to enable or disable Green Thumb automatically replanting crops per crop to config.yml under 'Green_Thumb_Replanting_Crops' section (API) Many skills with RNG elements now send out a SubSkillEvent (which can be used to modify probability or cancel the results), some skills without RNG still send out this event when activated, this event is cancellable so it can be used to make a skill fail Treasure drop rate from Shake, Fishing, Hylian, and Excavation now benefit from the Luck perk Added a setting to chat.yml to toggle sending party or admin chat messages to console diff --git a/pom.xml b/pom.xml index 411fa1606..485f4d7f9 100755 --- a/pom.xml +++ b/pom.xml @@ -101,6 +101,7 @@ commons-logging:commons-logging org.apache.tomcat:tomcat-jdbc org.apache.tomcat:tomcat-juli + org.bstats:bstats-base org.bstats:bstats-bukkit net.kyori:adventure-api net.kyori:adventure-text-serializer-gson @@ -208,27 +209,27 @@ net.kyori adventure-text-serializer-gson - 4.4.0 + 4.5.1 net.kyori adventure-api - 4.4.0 + 4.5.1 net.kyori adventure-nbt - 4.4.0 + 4.5.1 net.kyori adventure-key - 4.4.0 + 4.5.1 net.kyori adventure-text-serializer-gson-legacy-impl - 4.4.0 + 4.5.1 net.kyori @@ -253,13 +254,13 @@ org.bstats bstats-bukkit - 1.8 + 2.2.1 compile org.spigotmc spigot-api - 1.16.4-R0.1-SNAPSHOT + 1.16.5-R0.1-SNAPSHOT provided @@ -307,7 +308,7 @@ org.mockito mockito-core - 3.4.6 + 3.8.0 test diff --git a/src/main/java/com/gmail/nossr50/config/Config.java b/src/main/java/com/gmail/nossr50/config/Config.java index a59a0e81f..9e43be65c 100644 --- a/src/main/java/com/gmail/nossr50/config/Config.java +++ b/src/main/java/com/gmail/nossr50/config/Config.java @@ -9,6 +9,7 @@ import com.gmail.nossr50.util.text.StringUtils; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -598,4 +599,7 @@ public class Config extends AutoUpdateConfigLoader { public int getPowerLevelUpBroadcastInterval() { return config.getInt("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Milestone_Interval", 100); } public boolean isMasterySystemEnabled() { return config.getBoolean( "General.PowerLevel.Skill_Mastery.Enabled"); } + public boolean isGreenThumbReplantableCrop(@NotNull Material material) { + return config.getBoolean("Green_Thumb_Replanting_Crops." + StringUtils.getCapitalized(material.toString()), true); + } } diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 70b4fc649..4fbe9a2f8 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -148,10 +148,13 @@ public class BlockListener implements Listener { // Get opposite direction so we get correct block BlockFace direction = event.getDirection(); Block movedBlock = event.getBlock().getRelative(direction); - mcMMO.getPlaceStore().setTrue(movedBlock); + if (movedBlock.getY() >= Misc.getWorldMinCompat(movedBlock.getWorld())) // Very weird that the event is giving us these, they shouldn't exist + mcMMO.getPlaceStore().setTrue(movedBlock); for (Block block : event.getBlocks()) { movedBlock = block.getRelative(direction); + if (movedBlock.getY() < Misc.getWorldMinCompat(movedBlock.getWorld())) // Very weird that the event is giving us these, they shouldn't exist + continue; mcMMO.getPlaceStore().setTrue(movedBlock); } } diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 423ff0acd..0263db8c1 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -19,6 +19,7 @@ import com.gmail.nossr50.skills.taming.Taming; import com.gmail.nossr50.skills.taming.TamingManager; import com.gmail.nossr50.skills.unarmed.UnarmedManager; import com.gmail.nossr50.util.BlockUtils; +import com.gmail.nossr50.util.ItemUtils; import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.compat.layers.persistentdata.AbstractPersistentDataLayer; @@ -155,8 +156,7 @@ public class EntityListener implements Listener { Player player = (Player) event.getEntity().getShooter(); /* WORLD GUARD MAIN FLAG CHECK */ - if(WorldGuardUtils.isWorldGuardLoaded()) - { + if(WorldGuardUtils.isWorldGuardLoaded()) { if(!WorldGuardManager.getInstance().hasMainFlag(player)) return; } @@ -173,10 +173,9 @@ public class EntityListener implements Listener { if(!projectile.hasMetadata(mcMMO.arrowDistanceKey)) projectile.setMetadata(mcMMO.arrowDistanceKey, new FixedMetadataValue(pluginRef, projectile.getLocation())); - for (Enchantment enchantment : player.getInventory().getItemInMainHand().getEnchantments().keySet()) { - if (enchantment.getKey().equals(piercingEnchantment)) { - return; - } + //Check both hands + if(ItemUtils.doesPlayerHaveEnchantmentInHands(player, "piercing")) { + return; } if (SkillUtils.isSkillRNGSuccessful(SubSkillType.ARCHERY_ARROW_RETRIEVAL, player)) { diff --git a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java index bf78964d6..c3a0aa838 100644 --- a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java @@ -116,7 +116,8 @@ public class InventoryListener implements Listener { //Profile doesn't exist if(offlineProfile != null) { - event.setResult(offlineProfile.getSmeltingManager().smeltProcessing(smelting, event.getResult())); + //Process smelting + offlineProfile.getSmeltingManager().smeltProcessing(event); } } } diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 0b52bb832..858160043 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -52,21 +52,24 @@ import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SmeltingTracker; import com.gmail.nossr50.util.upgrade.UpgradeManager; import com.gmail.nossr50.worldguard.WorldGuardManager; -import com.google.common.base.Charsets; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.shatteredlands.shatt.backup.ZipLibrary; import org.bstats.bukkit.Metrics; +import org.bstats.charts.SimplePie; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -124,24 +127,24 @@ public class mcMMO extends JavaPlugin { private static boolean isRetroModeEnabled; /* Metadata Values */ - public final static String REPLANT_META_KEY = "mcMMO: Recently Replanted"; + public static final String REPLANT_META_KEY = "mcMMO: Recently Replanted"; public static final String FISH_HOOK_REF_METAKEY = "mcMMO: Fish Hook Tracker"; - public static final String DODGE_TRACKER = "mcMMO: Dodge Tracker"; + public static final String DODGE_TRACKER = "mcMMO: Dodge Tracker"; public static final String CUSTOM_DAMAGE_METAKEY = "mcMMO: Custom Damage"; - public final static String travelingBlock = "mcMMO: Traveling Block"; - public final static String blockMetadataKey = "mcMMO: Piston Tracking"; - public final static String tntMetadataKey = "mcMMO: Tracked TNT"; - public final static String customNameKey = "mcMMO: Custom Name"; - public final static String customVisibleKey = "mcMMO: Name Visibility"; - public final static String droppedItemKey = "mcMMO: Tracked Item"; - public final static String infiniteArrowKey = "mcMMO: Infinite Arrow"; - public final static String trackedArrow = "mcMMO: Tracked Arrow"; - public final static String bowForceKey = "mcMMO: Bow Force"; - public final static String arrowDistanceKey = "mcMMO: Arrow Distance"; - public final static String BONUS_DROPS_METAKEY = "mcMMO: Double Drops"; - public final static String disarmedItemKey = "mcMMO: Disarmed Item"; - public final static String playerDataKey = "mcMMO: Player Data"; - public final static String databaseCommandKey = "mcMMO: Processing Database Command"; + public static final String travelingBlock = "mcMMO: Traveling Block"; + public static final String blockMetadataKey = "mcMMO: Piston Tracking"; + public static final String tntMetadataKey = "mcMMO: Tracked TNT"; + public static final String customNameKey = "mcMMO: Custom Name"; + public static final String customVisibleKey = "mcMMO: Name Visibility"; + public static final String droppedItemKey = "mcMMO: Tracked Item"; + public static final String infiniteArrowKey = "mcMMO: Infinite Arrow"; + public static final String trackedArrow = "mcMMO: Tracked Arrow"; + public static final String bowForceKey = "mcMMO: Bow Force"; + public static final String arrowDistanceKey = "mcMMO: Arrow Distance"; + public static final String BONUS_DROPS_METAKEY = "mcMMO: Double Drops"; + public static final String disarmedItemKey = "mcMMO: Disarmed Item"; + public static final String playerDataKey = "mcMMO: Player Data"; + public static final String databaseCommandKey = "mcMMO: Processing Database Command"; public static FixedMetadataValue metadataValue; @@ -158,7 +161,9 @@ public class mcMMO extends JavaPlugin { //Platform Manager platformManager = new PlatformManager(); + //Filter out any debug messages (if debug/verbose logging is not enabled) getLogger().setFilter(new LogFilter(this)); + metadataValue = new FixedMetadataValue(this, true); PluginManager pluginManager = getServer().getPluginManager(); @@ -254,12 +259,12 @@ public class mcMMO extends JavaPlugin { if(Config.getInstance().getIsMetricsEnabled()) { metrics = new Metrics(this, 3894); - metrics.addCustomChart(new Metrics.SimplePie("version", () -> getDescription().getVersion())); + metrics.addCustomChart(new SimplePie("version", () -> getDescription().getVersion())); if(Config.getInstance().getIsRetroMode()) - metrics.addCustomChart(new Metrics.SimplePie("leveling_system", () -> "Retro")); + metrics.addCustomChart(new SimplePie("leveling_system", () -> "Retro")); else - metrics.addCustomChart(new Metrics.SimplePie("leveling_system", () -> "Standard")); + metrics.addCustomChart(new SimplePie("leveling_system", () -> "Standard")); } } catch (Throwable t) { @@ -273,6 +278,9 @@ public class mcMMO extends JavaPlugin { } getServer().getPluginManager().disablePlugin(this); + + //Fixes #4438 - Don't initialize things if we are going to disable mcMMO anyway + return; } //Init player level values @@ -284,6 +292,7 @@ public class mcMMO extends JavaPlugin { //Init smelting tracker smeltingTracker = new SmeltingTracker(); + //Set up Adventure's audiences audiences = BukkitAudiences.create(this); transientMetadataTools = new TransientMetadataTools(this); @@ -347,8 +356,9 @@ public class mcMMO extends JavaPlugin { holidayManager.saveAnniversaryFiles(); placeStore.closeAll(); } - - catch (Exception e) { e.printStackTrace(); } + catch (Exception e) { + e.printStackTrace(); + } if (Config.getInstance().getBackupsEnabled()) { // Remove other tasks BEFORE starting the Backup, or we just cancel it straight away. @@ -358,14 +368,12 @@ public class mcMMO extends JavaPlugin { catch (IOException e) { getLogger().severe(e.toString()); } + catch(NoClassDefFoundError e) { + getLogger().severe("Backup class not found!"); + getLogger().info("Please do not replace the mcMMO jar while the server is running."); + } catch (Throwable e) { - if (e instanceof NoClassDefFoundError) { - getLogger().severe("Backup class not found!"); - getLogger().info("Please do not replace the mcMMO jar while the server is running."); - } - else { - getLogger().severe(e.toString()); - } + getLogger().severe(e.toString()); } } @@ -682,9 +690,9 @@ public class mcMMO extends JavaPlugin { } } - public InputStreamReader getResourceAsReader(String fileName) { + public @Nullable InputStreamReader getResourceAsReader(@NotNull String fileName) { InputStream in = getResource(fileName); - return in == null ? null : new InputStreamReader(in, Charsets.UTF_8); + return in == null ? null : new InputStreamReader(in, StandardCharsets.UTF_8); } /** diff --git a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java index 476012ead..4e4f244af 100644 --- a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java +++ b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java @@ -179,8 +179,10 @@ public class HerbalismManager extends SkillManager { //TODO: The design of Green Terra needs to change, this is a mess if(Permissions.greenThumbPlant(getPlayer(), originalBreak.getType())) { - if(!getPlayer().isSneaking()) { - greenThumbActivated = processGreenThumbPlants(originalBreak, blockBreakEvent, isGreenTerraActive()); + if(Config.getInstance().isGreenThumbReplantableCrop(originalBreak.getType())) { + if(!getPlayer().isSneaking()) { + greenThumbActivated = processGreenThumbPlants(originalBreak, blockBreakEvent, isGreenTerraActive()); + } } } @@ -685,7 +687,7 @@ public class HerbalismManager extends SkillManager { */ private boolean processGreenThumbPlants(BlockState blockState, BlockBreakEvent blockBreakEvent, boolean greenTerra) { if (!ItemUtils.isHoe(blockBreakEvent.getPlayer().getInventory().getItemInMainHand()) - && !ItemUtils.isAxe(blockBreakEvent.getPlayer().getInventory().getItemInMainHand())) { + && !ItemUtils.isAxe(blockBreakEvent.getPlayer().getInventory().getItemInMainHand())) { return false; } diff --git a/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java b/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java index 5390e2390..f9e68e533 100644 --- a/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java @@ -11,7 +11,9 @@ import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SkillUtils; import org.bukkit.event.inventory.FurnaceBurnEvent; +import org.bukkit.event.inventory.FurnaceSmeltEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; public class SmeltingManager extends SkillManager { public SmeltingManager(McMMOPlayer mcMMOPlayer) { @@ -107,19 +109,29 @@ public class SmeltingManager extends SkillManager { } } - public ItemStack smeltProcessing(ItemStack smelting, ItemStack result) { + public void smeltProcessing(@NotNull FurnaceSmeltEvent furnaceSmeltEvent) { + ItemStack sourceItemStack = furnaceSmeltEvent.getSource(); + ItemStack resultItemStack = furnaceSmeltEvent.getResult(); - applyXpGain(Smelting.getResourceXp(smelting), XPGainReason.PVE, XPGainSource.PASSIVE); + applyXpGain(Smelting.getResourceXp(sourceItemStack), XPGainReason.PVE, XPGainSource.PASSIVE); //Add XP + int itemLimit = resultItemStack.getMaxStackSize(); - if (Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.SMELTING, result.getType()) - && isSecondSmeltSuccessful() && result.getAmount() < 64) { - ItemStack newResult = result.clone(); + processDoubleSmelt(furnaceSmeltEvent, resultItemStack, itemLimit); + } - newResult.setAmount(result.getAmount() + 1); - return newResult; + private void processDoubleSmelt(@NotNull FurnaceSmeltEvent furnaceSmeltEvent, @NotNull ItemStack resultItemStack, int itemLimit) { + //TODO: Permission check work around, could store it as NBT on the furnace + //We don't do permission checks because this can be for an offline player and Bukkit has nothing to grab permissions for offline players + + //Process double smelt + if (Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.SMELTING, resultItemStack.getType()) + && resultItemStack.getAmount() < itemLimit + && isSecondSmeltSuccessful()) { + + ItemStack newResult = resultItemStack.clone(); + newResult.setAmount(Math.min(resultItemStack.getAmount() + 1, itemLimit)); //Don't go over max stack limits + furnaceSmeltEvent.setResult(newResult); } - - return result; } public int vanillaXPBoost(int experience) { diff --git a/src/main/java/com/gmail/nossr50/util/ItemUtils.java b/src/main/java/com/gmail/nossr50/util/ItemUtils.java index 62c8d2165..46c68183b 100644 --- a/src/main/java/com/gmail/nossr50/util/ItemUtils.java +++ b/src/main/java/com/gmail/nossr50/util/ItemUtils.java @@ -10,6 +10,7 @@ import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.FurnaceRecipe; @@ -18,6 +19,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; @@ -35,14 +37,98 @@ public final class ItemUtils { * @param item Item to check * @return true if the item is a bow, false otherwise */ - public static boolean isBow(ItemStack item) { + public static boolean isBow(@NotNull ItemStack item) { return mcMMO.getMaterialMapStore().isBow(item.getType().getKey().getKey()); } + public static boolean isCrossbow(@NotNull ItemStack item) { + return mcMMO.getMaterialMapStore().isCrossbow(item.getType().getKey().getKey()); + } + public static boolean hasItemInEitherHand(@NotNull Player player, Material material) { return player.getInventory().getItemInMainHand().getType() == material || player.getInventory().getItemInOffHand().getType() == material; } + public static boolean doesPlayerHaveEnchantmentOnArmor(@NotNull Player player, @NotNull String enchantmentByName) { + Enchantment enchantment = getEnchantment(enchantmentByName); + + if(enchantment == null) + return false; + + return doesPlayerHaveEnchantmentOnArmor(player, enchantment); + } + + public static boolean doesPlayerHaveEnchantmentOnArmor(@NotNull Player player, @NotNull Enchantment enchantment) { + for(ItemStack itemStack : player.getInventory().getArmorContents()) { + if(itemStack != null) { + if(hasEnchantment(itemStack, enchantment)) + return true; + } + } + + return false; + } + + public static boolean doesPlayerHaveEnchantmentOnArmorOrHands(@NotNull Player player, @NotNull String enchantmentName) { + Enchantment enchantment = getEnchantment(enchantmentName); + + if(enchantment == null) + return false; + + return doesPlayerHaveEnchantmentOnArmorOrHands(player, enchantment); + } + + public static boolean doesPlayerHaveEnchantmentOnArmorOrHands(@NotNull Player player, @NotNull Enchantment enchantment) { + if(doesPlayerHaveEnchantmentOnArmor(player, enchantment)) + return true; + + if(doesPlayerHaveEnchantmentInHands(player, enchantment)) + return true; + + return false; + } + + public static boolean doesPlayerHaveEnchantmentInHands(@NotNull Player player, @NotNull NamespacedKey enchantmentNameKey) { + Enchantment enchantment = Enchantment.getByKey(enchantmentNameKey); + + if(enchantment == null) + return false; + + return doesPlayerHaveEnchantmentInHands(player, enchantment); + } + + public static boolean doesPlayerHaveEnchantmentInHands(@NotNull Player player, @NotNull String enchantmentName) { + Enchantment enchantment = getEnchantment(enchantmentName); + + if(enchantment == null) + return false; + + return doesPlayerHaveEnchantmentInHands(player, enchantment); + } + + public static boolean doesPlayerHaveEnchantmentInHands(@NotNull Player player, @NotNull Enchantment enchantment) { + return hasEnchantment(player.getInventory().getItemInMainHand(), enchantment) || + hasEnchantment(player.getInventory().getItemInOffHand(), enchantment); + } + + public static boolean hasEnchantment(@NotNull ItemStack itemStack, @NotNull Enchantment enchantment) { + if(itemStack.getItemMeta() != null) { + return itemStack.getItemMeta().hasEnchant(enchantment); + } + + return false; + } + + public static @Nullable Enchantment getEnchantment(@NotNull String enchantmentName) { + for(Enchantment enchantment : Enchantment.values()) { + if(enchantment.getKey().getKey().equalsIgnoreCase(enchantmentName)) { + return enchantment; + } + } + + return null; + } + /** * Checks if the item is a sword. * diff --git a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java index 8a0c378ed..3c88edd47 100644 --- a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java +++ b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java @@ -49,6 +49,7 @@ public class MaterialMapStore { private final @NotNull HashSet pickAxes; private final @NotNull HashSet tridents; private final @NotNull HashSet bows; + private final @NotNull HashSet crossbows; private final @NotNull HashSet tools; private final @NotNull HashSet enchantables; @@ -88,6 +89,7 @@ public class MaterialMapStore { diamondTools = new HashSet<>(); netheriteTools = new HashSet<>(); bows = new HashSet<>(); + crossbows = new HashSet<>(); stringTools = new HashSet<>(); tools = new HashSet<>(); @@ -447,6 +449,7 @@ public class MaterialMapStore { fillTridents(); fillStringTools(); fillBows(); + fillCrossbows(); //Tools collection tools.addAll(woodTools); @@ -464,6 +467,10 @@ public class MaterialMapStore { bows.add("bow"); } + private void fillCrossbows() { + crossbows.add("crossbow"); + } + private void fillStringTools() { stringTools.add("bow"); stringTools.add("fishing_rod"); @@ -771,6 +778,14 @@ public class MaterialMapStore { return bows.contains(id); } + public boolean isCrossbow(@NotNull Material material) { + return isCrossbow(material.getKey().getKey()); + } + + public boolean isCrossbow(@NotNull String id) { + return crossbows.contains(id); + } + public boolean isLeatherArmor(@NotNull Material material) { return isLeatherArmor(material.getKey().getKey()); } diff --git a/src/main/java/com/gmail/nossr50/util/Misc.java b/src/main/java/com/gmail/nossr50/util/Misc.java index 1bd24c5e3..d082d82be 100644 --- a/src/main/java/com/gmail/nossr50/util/Misc.java +++ b/src/main/java/com/gmail/nossr50/util/Misc.java @@ -9,6 +9,7 @@ import com.gmail.nossr50.util.player.UserManager; import com.google.common.collect.ImmutableSet; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.block.BlockState; import org.bukkit.entity.*; import org.bukkit.inventory.ItemStack; @@ -259,6 +260,12 @@ public final class Misc { } } + public static int getWorldMinCompat(World world) + { + // TODO this method should access the world min variable in a version safe manner so that we don't restrict usage to new versions of spigot only + return 0; + } + public static void printProgress(int convertedUsers, int progressInterval, long startMillis) { if ((convertedUsers % progressInterval) == 0) { mcMMO.p.getLogger().info(String.format("Conversion progress: %d users at %.2f users/second", convertedUsers, convertedUsers / (double) ((System.currentTimeMillis() - startMillis) / TIME_CONVERSION_FACTOR))); diff --git a/src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java b/src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java index 272710aeb..4830c9045 100644 --- a/src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java +++ b/src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.util.blockmeta; +import com.gmail.nossr50.util.Misc; import org.bukkit.Bukkit; import org.bukkit.World; import org.jetbrains.annotations.NotNull; @@ -10,12 +11,13 @@ import java.util.BitSet; import java.util.UUID; public class BitSetChunkStore implements ChunkStore { - private static final int CURRENT_VERSION = 8; + private static final int CURRENT_VERSION = 9; private static final int MAGIC_NUMBER = 0xEA5EDEBB; private final int cx; private final int cz; - private final int worldHeight; + private final int worldMin; + private final int worldMax; private final @NotNull UUID worldUid; // Bitset store conforms to a "bottom-up" bit ordering consisting of a stack of {worldHeight} Y planes, each Y plane consists of 16 Z rows of 16 X bits. private final @NotNull BitSet store; @@ -23,15 +25,16 @@ public class BitSetChunkStore implements ChunkStore { private transient boolean dirty = false; public BitSetChunkStore(@NotNull World world, int cx, int cz) { - this(world.getUID(), world.getMaxHeight(), cx, cz); + this(world.getUID(), Misc.getWorldMinCompat(world), world.getMaxHeight(), cx, cz); } - private BitSetChunkStore(@NotNull UUID worldUid, int worldHeight, int cx, int cz) { + private BitSetChunkStore(@NotNull UUID worldUid, int worldMin, int worldMax, int cx, int cz) { this.cx = cx; this.cz = cz; this.worldUid = worldUid; - this.worldHeight = worldHeight; - this.store = new BitSet(16 * 16 * worldHeight); + this.worldMin = worldMin; + this.worldMax = worldMax; + this.store = new BitSet(16 * 16 * (worldMax - worldMin)); } @Override @@ -54,6 +57,16 @@ public class BitSetChunkStore implements ChunkStore { return cz; } + @Override + public int getChunkMin() { + return worldMin; + } + + @Override + public int getChunkMax() { + return worldMax; + } + @Override public @NotNull UUID getWorldId() { return worldUid; @@ -86,22 +99,34 @@ public class BitSetChunkStore implements ChunkStore { } private int coordToIndex(int x, int y, int z) { - return coordToIndex(x, y, z, worldHeight); + return coordToIndex(x, y, z, worldMin, worldMax); } - private static int coordToIndex(int x, int y, int z, int worldHeight) { - if (x < 0 || x >= 16 || y < 0 || y >= worldHeight || z < 0 || z >= 16) - throw new IndexOutOfBoundsException(String.format("x: %d y: %d z: %d World Height: %d", x, y, z, worldHeight)); - return (z * 16 + x) + (256 * y); + private static int coordToIndex(int x, int y, int z, int worldMin, int worldMax) { + if (x < 0 || x >= 16 || y < worldMin || y >= worldMax || z < 0 || z >= 16) + throw new IndexOutOfBoundsException(String.format("x: %d y: %d z: %d World Min: %d World Max: %d", x, y, z, worldMin, worldMax)); + int yOffset = -worldMin; // Ensures y multiplier remains positive + return (z * 16 + x) + (256 * (y + yOffset)); } - private static int getWorldHeight(@NotNull UUID worldUid, int storedWorldHeight) + private static int getWorldMin(@NotNull UUID worldUid, int storedWorldMin) { World world = Bukkit.getWorld(worldUid); // Not sure how this case could come up, but might as well handle it gracefully. Loading a chunkstore for an unloaded world? if (world == null) - return storedWorldHeight; + return storedWorldMin; + + return Misc.getWorldMinCompat(world); + } + + private static int getWorldMax(@NotNull UUID worldUid, int storedWorldMax) + { + World world = Bukkit.getWorld(worldUid); + + // Not sure how this case could come up, but might as well handle it gracefully. Loading a chunkstore for an unloaded world? + if (world == null) + return storedWorldMax; return world.getMaxHeight(); } @@ -114,7 +139,8 @@ public class BitSetChunkStore implements ChunkStore { out.writeLong(worldUid.getMostSignificantBits()); out.writeInt(cx); out.writeInt(cz); - out.writeInt(worldHeight); + out.writeInt(worldMin); + out.writeInt(worldMax); // Store the byte array directly so we don't have the object type info overhead byte[] storeData = store.toByteArray(); @@ -129,7 +155,7 @@ public class BitSetChunkStore implements ChunkStore { // Can be used to determine the format of the file int fileVersionNumber = in.readInt(); - if (magic != MAGIC_NUMBER || fileVersionNumber != CURRENT_VERSION) + if (magic != MAGIC_NUMBER || fileVersionNumber < 8) throw new IOException(); long lsb = in.readLong(); @@ -138,21 +164,38 @@ public class BitSetChunkStore implements ChunkStore { int cx = in.readInt(); int cz = in.readInt(); - int worldHeight = in.readInt(); + int worldMin = 0; + if (fileVersionNumber >= 9) + worldMin = in.readInt(); + int worldMax = in.readInt(); byte[] temp = new byte[in.readInt()]; in.readFully(temp); BitSet stored = BitSet.valueOf(temp); - int currentWorldHeight = getWorldHeight(worldUid, worldHeight); + int currentWorldMin = getWorldMin(worldUid, worldMin); + int currentWorldMax = getWorldMax(worldUid, worldMax); - boolean worldHeightShrunk = currentWorldHeight < worldHeight; - // Lop off extra data if world height has shrunk - if (worldHeightShrunk) - stored.clear(coordToIndex(16, currentWorldHeight, 16, worldHeight), stored.length()); + // The order in which the world height update code occurs here is important, the world max truncate math only holds up if done before adjusting for min changes + // Lop off extra data if world max has shrunk + if (currentWorldMax < worldMax) + stored.clear(coordToIndex(16, currentWorldMax, 16, worldMin, worldMax), stored.length()); + // Left shift store if world min has shrunk + if (currentWorldMin > worldMin) + stored = stored.get(currentWorldMin, stored.length()); // Because BitSet's aren't fixed size, a "substring" operation is equivalent to a left shift + // Right shift store if world min has expanded + if (currentWorldMin < worldMin) + { + int offset = (worldMin - currentWorldMin) * 16 * 16; // We are adding this many bits to the front + // This isn't the most efficient way to do this, however, its a rare case to occur, and in the grand scheme of things, the small performance we could gain would cost us significant reduced readability of the code + BitSet shifted = new BitSet(); + for (int i = 0; i < stored.length(); i++) + shifted.set(i + offset, stored.get(i)); + stored = shifted; + } - BitSetChunkStore chunkStore = new BitSetChunkStore(worldUid, currentWorldHeight, cx, cz); + BitSetChunkStore chunkStore = new BitSetChunkStore(worldUid, currentWorldMin, currentWorldMax, cx, cz); chunkStore.store.or(stored); - chunkStore.dirty = worldHeightShrunk; // In the expanded case there is no reason to re-write it unless the data changes + chunkStore.dirty = currentWorldMin != worldMin || currentWorldMax != worldMax; return chunkStore; } @@ -203,7 +246,7 @@ public class BitSetChunkStore implements ChunkStore { private int cx; private int cz; - private int worldHeight; + private int worldMax; private UUID worldUid; private boolean[][][] store; @@ -226,19 +269,20 @@ public class BitSetChunkStore implements ChunkStore { cz = in.readInt(); store = (boolean[][][]) in.readObject(); - worldHeight = store[0][0].length; + worldMax = store[0][0].length; } public @NotNull BitSetChunkStore convert() { - int currentWorldHeight = getWorldHeight(worldUid, worldHeight); + int currentWorldMin = getWorldMin(worldUid, 0); + int currentWorldMax = getWorldMax(worldUid, worldMax); - BitSetChunkStore converted = new BitSetChunkStore(worldUid, currentWorldHeight, cx, cz); + BitSetChunkStore converted = new BitSetChunkStore(worldUid, currentWorldMin, currentWorldMax, cx, cz); // Read old data into new chunkstore for (int x = 0; x < 16; x++) { for (int z = 0; z < 16; z++) { - for (int y = 0; y < worldHeight && y < currentWorldHeight; y++) { + for (int y = 0; y < worldMax && y < currentWorldMax; y++) { converted.store.set(converted.coordToIndex(x, y, z), store[x][z][y]); } } diff --git a/src/main/java/com/gmail/nossr50/util/blockmeta/ChunkStore.java b/src/main/java/com/gmail/nossr50/util/blockmeta/ChunkStore.java index e21006628..632cde2e2 100644 --- a/src/main/java/com/gmail/nossr50/util/blockmeta/ChunkStore.java +++ b/src/main/java/com/gmail/nossr50/util/blockmeta/ChunkStore.java @@ -36,6 +36,9 @@ public interface ChunkStore { */ int getChunkZ(); + int getChunkMin(); + int getChunkMax(); + @NotNull UUID getWorldId(); /** diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 10b9dd572..5ce90bdd5 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -454,6 +454,14 @@ Skills: Tree_Feller_Sounds: true Level_Cap: 0 +# Disable or Enable the Green Thumb auto replant feature for specific crops, use the name of the block not the crop itemstack +Green_Thumb_Replanting_Crops: + Carrots: true + Wheat: true + Nether_Wart: true + Potatoes: true + Beetroots: true + Cocoa: true # # Settings for Double Drops ### diff --git a/src/main/resources/locale/locale_de.properties b/src/main/resources/locale/locale_de.properties index 993399dee..7b6b534b5 100644 --- a/src/main/resources/locale/locale_de.properties +++ b/src/main/resources/locale/locale_de.properties @@ -4,24 +4,24 @@ Ability.Generic.Template = &3{0}: &a{1} Ability.Generic.Template.Custom = &3{0} Ability.Generic.Template.Lock = &7{0} -Acrobatics.Ability.Proc = &a&o**Du bist Anmutig Gelandet** -Acrobatics.Combat.Proc = &a&o**Du bist Ausgewichen** +Acrobatics.Ability.Proc = &a&o**Du bist anmutig gelandet** +Acrobatics.Combat.Proc = &a&o**Du bist ausgewichen** Acrobatics.Listener = Akrobatik: Acrobatics.Roll.Text = &a&o**Du hast dich abgerollt** Acrobatics.SkillName = Akrobatik Acrobatics.SubSkill.Dodge.Description = Reduziert den erhaltenen Angriffsschaden um die H\u00E4lfte. Acrobatics.SubSkill.Dodge.Name = Ausweichen -Acrobatics.SubSkill.Dodge.Stat = Chance Auszuweichen -Acrobatics.SubSkill.GracefulRoll.Description = Doppelt so Effektiv wie normales Abrollen. +Acrobatics.SubSkill.Dodge.Stat = Chance auszuweichen +Acrobatics.SubSkill.GracefulRoll.Description = Doppelt so effektiv wie normales Abrollen. Acrobatics.SubSkill.GracefulRoll.Name = Anmutiges Abrollen -Acrobatics.SubSkill.Roll.Chance = Chance Abzurollen: &e{0} +Acrobatics.SubSkill.Roll.Chance = Chance abzurollen: &e{0} Acrobatics.SubSkill.Roll.Description = Lande gezielt, um deinen Fallschaden zu reduzieren. -Acrobatics.SubSkill.Roll.GraceChance = Chance Anmutig Abzurollen: &e{0} -Acrobatics.SubSkill.Roll.Mechanics = &7Abrollen ist eine aktive F\u00E4higkeit mit einem passiven Teil. Immer, wenn du Fallschaden nimmst, gibt es eine Chance, dass der Schaden reduziert wird, je nachdem wie hoch dein Akrobatik Level ist. Auf Level 50 hast du eine &e{0}%&7 Chance, den Schaden zu reduzieren bzw. &e{1}%&7 wenn Anmutiges Abrollen aktiviert wird. Die ErfolgsChance steigt linear bis Level &e{2}&7, auf welchem es seinen maximalen Wert erreicht. Jedes Akrobatik Level gibt dir eine &e{3}%&7 Chance zum erfolgreichen Abrollen. H\u00E4lst du im Fall die Duck-Taste (Standardm\u00E4\u00DFig Shift), aktivierst du Anmutiges Abrollen, welches den Fallschaden um noch mehr Schaden reduzieren oder sogar komplett verhindern kann. Normales Abrollen wird maximal &c{4}&7 Schaden verhindern, Anmutiges Abrollen bis zu &a{5}&7. +Acrobatics.SubSkill.Roll.GraceChance = Chance anmutig abzurollen: &e{0} +Acrobatics.SubSkill.Roll.Mechanics = &7Abrollen ist eine aktive F\u00E4higkeit mit einem passiven Teil. Immer, wenn du Fallschaden nimmst, gibt es eine Chance, dass der Schaden reduziert wird, je nachdem wie hoch dein Akrobatik-Level ist. Auf Level 50 hast du eine &e{0}%&7 Chance, den Schaden zu reduzieren bzw. &e{1}%&7 wenn Anmutiges Abrollen aktiviert wird. Die Erfolgschance steigt linear bis Level &e{2}&7, auf welchem es seinen maximalen Wert erreicht. Jedes Akrobatik-Level gibt dir eine &e{3}%&7 Chance zum erfolgreichen Abrollen. H\u00E4ltst du im Fall die Duck-Taste (standardm\u00E4\u00DFig Shift), aktivierst du Anmutiges Abrollen, welches den Fallschaden um noch mehr Schaden reduzieren oder sogar komplett verhindern kann. Normales Abrollen wird maximal &c{4}&7 Schaden verhindern, Anmutiges Abrollen bis zu &a{5}&7. Acrobatics.SubSkill.Roll.Name = Abrollen -Acrobatics.SubSkill.Roll.Stat = Chance Abzurollen -Acrobatics.SubSkill.Roll.Stat.Extra = Chance Anmutig Abzurollen -Acrobatics.SubSkill.Roll.Stats = &6Chance Abzurollen &e{0}% &6Chance Anmutig Abzurollen &e{1}% +Acrobatics.SubSkill.Roll.Stat = Chance abzurollen +Acrobatics.SubSkill.Roll.Stat.Extra = Chance anmutig abzurollen +Acrobatics.SubSkill.Roll.Stats = &6Chance abzurollen &e{0}% &6Chance anmutig abzurollen &e{1}% Alchemy.Ability.Locked.0 = &cGesperrt bis Level {0}! Alchemy.Listener = Alchemie: @@ -41,45 +41,45 @@ Archery.Listener = Bogenschie\u00DFen: Archery.SkillName = Bogenschie\u00DFen Archery.SubSkill.ArcheryLimitBreak.Description = \u00DCberschreite deine Grenzen. Archery.SubSkill.ArcheryLimitBreak.Name = \u00DCberwindung -Archery.SubSkill.ArcheryLimitBreak.Stat = Bonus Schaden durch \u00DCberwindung -Archery.SubSkill.ArrowRetrieval.Description = Chance, Pfeile von Leichen zur\u00FCck zu gewinnen +Archery.SubSkill.ArcheryLimitBreak.Stat = Bonus-Schaden durch \u00DCberwindung +Archery.SubSkill.ArrowRetrieval.Description = Chance, Pfeile von Leichen zur\u00FCck zu gewinnen. Archery.SubSkill.ArrowRetrieval.Name = Pfeilbergung Archery.SubSkill.ArrowRetrieval.Stat = Chance, Pfeile zu bergen -Archery.SubSkill.Daze.Description = Verwirrt Feinde und f\u00FCgt Bonus Schaden zu. +Archery.SubSkill.Daze.Description = Verwirrt Feinde und f\u00FCgt Bonus-Schaden zu. Archery.SubSkill.Daze.Name = Bet\u00E4ubung Archery.SubSkill.Daze.Stat = Chance, zu bet\u00E4uben Archery.SubSkill.SkillShot.Description = Erh\u00F6ht den von B\u00F6gen erteilten Schaden. Archery.SubSkill.SkillShot.Name = Skillshot -Archery.SubSkill.SkillShot.Stat = Skillshot Bonus Schaden +Archery.SubSkill.SkillShot.Stat = Skillshot Bonus-Schaden Axes.Ability.Bonus.0 = Axtmeister -Axes.Ability.Bonus.1 = {0} Bonus Schaden. +Axes.Ability.Bonus.1 = {0} Bonus-Schaden. Axes.Ability.Bonus.2 = R\u00FCstungsbruch -Axes.Ability.Bonus.3 = Verursacht {0} Bonus Schaden gegen R\u00FCstungen. +Axes.Ability.Bonus.3 = Verursacht {0} Bonus-Schaden gegen R\u00FCstungen. Axes.Ability.Bonus.4 = Wuchtschlag -Axes.Ability.Bonus.5 = Verursacht {0} Bonus Schaden gegen Gegner ohne R\u00FCstung. -Axes.Ability.Lower = &7Du senkst deine Axt wieder. -Axes.Ability.Ready = &3Du &6hebst&3 deine Axt... +Axes.Ability.Bonus.5 = Verursacht {0} Bonus-Schaden gegen Gegner ohne R\u00FCstung. +Axes.Ability.Lower = &7&o**Du senkst deine Axt.** +Axes.Ability.Ready = &a&o**Du hebst deine Axt...** Axes.Ability.Ready.Extra = &3Du &6hebst&3 deine Axt. &7({0} ist f\u00FCr {1}s pausiert) -Axes.Combat.CritStruck = &cDu wurdest &4SCHWER &cverwundet! -Axes.Combat.CriticalHit = &4&lKRITISCHER TREFFER! -Axes.Combat.GI.Proc = &a**Du landest einen &2GEWALTIGEN &aSchlag** -Axes.Combat.GI.Struck = &a&o**Von einem Wucht Schlag getroffen** -Axes.Combat.SS.Struck = &4&o**Von einem Sch\u00E4delspalter getroffen** +Axes.Combat.CritStruck = &cDu wurdest &4schwer &cverwundet! +Axes.Combat.CriticalHit = &4&Kritischer Treffer! +Axes.Combat.GI.Proc = &a**Du landest einen &2gewaltigen &aSchlag** +Axes.Combat.GI.Struck = &a&o**Von einem Wuchtschlag getroffen** +Axes.Combat.SS.Struck = &a&o**Von einem Sch\u00E4delspalter getroffen** Axes.Listener = Axtkampf: Axes.SkillName = Axtkampf Axes.Skills.SS.Off = &a&o**Sch\u00E4delspalter wurde abgenutzt** Axes.Skills.SS.On = &a&o**Sch\u00E4delspalter aktiviert!** -Axes.Skills.SS.Other.Off = &2Sch\u00E4delspalter &aist abgenutzt f\u00FCr &e{0} +Axes.Skills.SS.Other.Off = &2Sch\u00E4delspalter &aist abgenutzt f\u00FCr &e{0}. Axes.Skills.SS.Other.On = &a{0} hat &cSch\u00E4delspalter &2benutzt! Axes.Skills.SS.Refresh = &aDein &eSch\u00E4delspalter &aist wieder bereit! Axes.SubSkill.ArmorImpact.Description = Treffe mit gen\u00FCgend Gewalt um R\u00FCstungen zu zerschmettern. Axes.SubSkill.ArmorImpact.Name = R\u00FCstungsbruch -Axes.SubSkill.AxeMastery.Description = Verursacht Bonus Schaden. +Axes.SubSkill.AxeMastery.Description = Verursacht Bonus-Schaden. Axes.SubSkill.AxeMastery.Name = Axtmeister Axes.SubSkill.AxesLimitBreak.Description = \u00DCberschreite deine Grenzen. Axes.SubSkill.AxesLimitBreak.Name = \u00DCberwindung -Axes.SubSkill.AxesLimitBreak.Stat = Bonus Schaden durch \u00DCberwindung +Axes.SubSkill.AxesLimitBreak.Stat = Bonus-Schaden durch \u00DCberwindung Axes.SubSkill.CriticalStrikes.Description = Doppelter Schaden. Axes.SubSkill.CriticalStrikes.Name = Kritischer Treffer Axes.SubSkill.CriticalStrikes.Stat = Chance f\u00FCr kritischen Treffer @@ -106,20 +106,20 @@ Combat.BeastLoreHorseJumpStrength = &3Pferde-Sprungst\u00E4rke (&aMaximal {0} Bl Combat.BeastLoreHorseSpeed =&3Pferde-Laufgeschwindigkeit (&a{0} Bl\u00F6cke/s&3) Combat.BeastLoreOwner = &3Besitzer (&c{0}&3) Combat.Gore = &a&o**Aufgeschlitzt** -Combat.StruckByGore = &a&o**du wurdest AUFGESCHLITZT** +Combat.StruckByGore = &a&o**Du wurdest aufgeschlitzt** Combat.TargetDazed = Ziel wurde &4bet\u00E4ubt! -Combat.TouchedFuzzy = &a&o**Du wurdest ungl\u00FCcklich ber\u00FChrt, rin Schwindelgef\u00FChl kommt dir auf...** +Combat.TouchedFuzzy = &a&o**Du wurdest ungl\u00FCcklich ber\u00FChrt, ein Schwindelgef\u00FChl kommt dir auf...** Commands.Ability.Off = F\u00E4higkeiten Benutzung &cdeaktiviert Commands.Ability.On = F\u00E4higkeiten Benutzung &aaktiviert Commands.Ability.Toggle = Benutzung von F\u00E4higkeiten wurde f\u00FCr &e{0} ge\u00E4ndert -Commands.AdminChat.Off = Exklusiver Admin Chat wurde &c deaktiviert -Commands.AdminChat.On = Exklusiver Admin Chat wurde &a aktiviert +Commands.AdminChat.Off = Exklusiver Admin-Chat wurde &c deaktiviert +Commands.AdminChat.On = Exklusiver Admin-Chat wurde &a aktiviert Commands.AdminChatSpy.Chat = &6[Spy: &a{0}&6] &f{1} Commands.AdminChatSpy.Disabled = mcMMO Party Chat-Spy deaktiviert Commands.AdminChatSpy.Enabled = mcMMO Party Chat-Spy aktiviert Commands.AdminChatSpy.Toggle = mcMMO Party Chat w\u00FCrde ver\u00E4ndert f\u00FCr &e{0} -Commands.AdminToggle = &a- Schalte den Adminchat an/aus +Commands.AdminToggle = &a- Schalte den Admin-Chat an/aus Commands.Chat.Console = Konsole Commands.Cooldowns.Header = &6--= &amcMMO F\u00E4higkeiten Cooldowns&6 =-- Commands.Cooldowns.Row.N = &c{0}&f - &6{1} Sekunden verbleiben @@ -127,55 +127,55 @@ Commands.Cooldowns.Row.Y = &b{0}&f - &2Bereit! Commands.Database.Cooldown = Du musst {0} Sekunden warten bis du diesen Befehl wieder ausf\u00FChren kannst! Commands.Database.CooldownMS = Du musst {0}ms warten bis du diesen Befehl wieder ausf\u00FChren kannst! Commands.Database.Processing = Dein vorheriger Befehl wird noch verarbeitet. Bitte warten. -Commands.Description.Skill = Zeige detaillierte Informationen zum {0} Skill -Commands.Description.addlevels = Gib einem Spieler Skill Level -Commands.Description.addxp = Gib einem Spieler Skillerfahrung -Commands.Description.adminchat = Schalte den Adminchat an/aus oder sende Adminchat Nachrichten -Commands.Description.hardcore = \u00C4ndere den Hardcore Prozentsatz oder schalte den Hardcore Modus an oder aus -Commands.Description.inspect = Sieh detaillierte Informationen \u00FCber einen anderen Spieler -Commands.Description.mcability = Schalte die Bereitschaft von F\u00E4higkeiten bei Rechtsklick an oder aus -Commands.Description.mcchatspy = Schalte den Party Chat-Spy an oder aus -Commands.Description.mcconvert = Konvertiert Datenbanktypen oder Erfahrungsformeln -Commands.Description.mccooldown = Sieh alle F\u00E4higkeiten Cooldowns -Commands.Description.mcgod = Schalte mcMMO godmode an oder aus -Commands.Description.mchud = \u00C4ndere deinen HUD Stil -Commands.Description.mcmmo = Zeige eine kurze Beschreibung \u00FCber mcMMO -Commands.Description.mcnotify = Schalte F\u00E4higkeiten Hinweise im Chat an oder aus +Commands.Description.Skill = Zeige detaillierte Informationen zum {0} Skill. +Commands.Description.addlevels = Gib einem Spieler Skill-Level. +Commands.Description.addxp = Gib einem Spieler Skillerfahrung. +Commands.Description.adminchat = Schalte den Admin-Chat an/aus oder sende Admin-Chat Nachrichten. +Commands.Description.hardcore = \u00C4ndere den Hardcore Prozentsatz oder schalte den Hardcore Modus an oder aus. +Commands.Description.inspect = Sieh detaillierte Informationen \u00FCber einen anderen Spieler. +Commands.Description.mcability = Schalte die Bereitschaft von F\u00E4higkeiten bei Rechtsklick an oder aus. +Commands.Description.mcchatspy = Schalte den Party Chat-Spy an oder aus. +Commands.Description.mcconvert = Konvertiert Datenbanktypen oder Erfahrungsformeln. +Commands.Description.mccooldown = Sieh alle F\u00E4higkeiten-Cooldowns. +Commands.Description.mcgod = Schalte mcMMO godmode an oder aus. +Commands.Description.mchud = \u00C4ndere deinen HUD Stil. +Commands.Description.mcmmo = Zeige eine kurze Beschreibung \u00FCber mcMMO. +Commands.Description.mcnotify = Schalte F\u00E4higkeiten-Hinweise im Chat an oder aus. Commands.Description.mcpurge = Bereinige die mcMMO Datenbank von Spielern die {0} Monate nicht online waren oder keine Level haben. -Commands.Description.mcrank = Zeige das Skill Ranking f\u00FCr einen Spieler -Commands.Description.mcrefresh = Aktualisiere alle Cooldowns -Commands.Description.mcremove = Entferne einen Benutzer aus der Datenbank -Commands.Description.mcscoreboard = Verwalte deine Skill \u00DCbersicht -Commands.Description.mcstats = Zeige deine Skill Level und Erfahrung -Commands.Description.mctop = Zeige die Skill Bestenlisten -Commands.Description.mmocompat = Information about mcMMO and whether or not its in compatibility mode or fully functional. -Commands.Description.mmodebug = (De)aktiviere den Debugging-Modus, welcher n\u00FCtzliche Informationen ausgibt, wenn du einen Block schl\u00E4gst -Commands.Description.mmoedit = Editiere die Skill Level eines Spielers -Commands.Description.mmoinfo = Lese Details \u00FCber einen Skill oder andere Funktion -Commands.Description.mmoshowdb = Zeige den Namen der aktuellen Datenbank (zur Benutzung mit /mmoupdate) -Commands.Description.mmoupdate = Kopiere Daten von einer alten Datenbank zur aktuell benutzen -Commands.Description.mmoxpbar = Player settings for mcMMO XP bars -Commands.Description.party = \u00C4ndere verschiedene Party Einstellungen -Commands.Description.partychat = Schalte den mcMMO Party Chat an oder aus oder sende Party Nachrichten -Commands.Description.ptp = Teleportiere zu einem Party Mitglied -Commands.Description.skillreset = Setze die Skills eines Spielers zur\u00FCck -Commands.Description.vampirism = Schalte Vampirismus an oder aus bzw. \u00E4ndere den Vampirismus Prozentsatz -Commands.Description.xplock = Setze deine Erfahrungs-Leiste auf einen bestimmten Skill fest -Commands.Description.xprate = \u00C4ndere die Erfahrungs Rate oder starte ein Erfahrungs Event +Commands.Description.mcrank = Zeige das Skill-Ranking f\u00FCr einen Spieler. +Commands.Description.mcrefresh = Aktualisiere alle Cooldowns. +Commands.Description.mcremove = Entferne einen Benutzer aus der Datenbank. +Commands.Description.mcscoreboard = Verwalte deine Skill-\u00DCbersicht. +Commands.Description.mcstats = Zeige deine Skill-Level und Erfahrung. +Commands.Description.mctop = Zeige die Skill-Bestenlisten. +Commands.Description.mmocompat = Informationen dar\u00FCber, ob mcMMO im Kompatibilit\u00E4tsmodus oder voll funktionsf\u00E4hig ist. +Commands.Description.mmodebug = (De)aktiviere den Debugging-Modus, welcher n\u00FCtzliche Informationen ausgibt, wenn du einen Block schl\u00E4gst. +Commands.Description.mmoedit = Editiere die Skill-Level eines Spielers. +Commands.Description.mmoinfo = Lese Details \u00FCber einen Skill oder andere Funktionen. +Commands.Description.mmoshowdb = Zeige den Namen der aktuellen Datenbank (zur Benutzung mit /mmoupdate). +Commands.Description.mmoupdate = Kopiere Daten von einer alten Datenbank zur aktuell benutzen. +Commands.Description.mmoxpbar = Spielereinstellungen f\u00FCr die mcMMO Erfahrungsleisten. +Commands.Description.party = \u00C4ndere verschiedene Party-Einstellungen. +Commands.Description.partychat = Schalte den mcMMO Party-Chat an oder aus oder sende Party-Nachrichten. +Commands.Description.ptp = Teleportiere zu einem Party-Mitglied. +Commands.Description.skillreset = Setze die Skills eines Spielers zur\u00FCck. +Commands.Description.vampirism = Schalte Vampirismus an oder aus bzw. \u00E4ndere den Vampirismus Prozentsatz. +Commands.Description.xplock = Setze deine Erfahrungsleiste auf einen bestimmten Skill fest. +Commands.Description.xprate = \u00C4ndere die Erfahrungsrate oder starte ein Erfahrungs-Event. Commands.Disabled = Dieser Befehl ist deaktiviert. Commands.DoesNotExist = &cSpieler in Datenbank nicht vorhanden! Commands.Event.Start = &aSkill&6 Event! Commands.Event.Stop = &aSkill&3 Event vorbei! Commands.Event.Stop.Subtitle = &aWir hoffen, du hattest Spa\u00DF! -Commands.Event.XP = &3Erfahrungs Rate ist jetzt &6{0}&3x +Commands.Event.XP = &3Erfahrungsrate ist jetzt &6{0}&3x Commands.GodMode.Disabled = mcMMO Godmode deaktiviert Commands.GodMode.Enabled = mcMMO Godmode aktiviert -Commands.GodMode.Forbidden = [mcMMO] Der Godmode ist in dieser Welt nicht erlaubt -Commands.GodMode.Toggle = Godmode wurde f\u00FCr &e{0} aktiviert +Commands.GodMode.Forbidden = [mcMMO] Der Godmode ist in dieser Welt nicht erlaubt. +Commands.GodMode.Toggle = Godmode wurde f\u00FCr &e{0} aktiviert. Commands.Healthbars.Changed.BAR = [mcMMO] Deine Lebensanzeige wurde zu &eK\u00E4stchen&f ge\u00E4ndert. Commands.Healthbars.Changed.DISABLED = [mcMMO] Die Mob-Lebensanzeige wurde &7deaktiviert&f. -Commands.Healthbars.Changed.HEARTS = [mcMMO]Deine Lebensanzeige wurde zu &cHerzen&f ge\u00E4ndert. -Commands.Healthbars.Invalid = Ung\u00FCltiger Lebensanzeige Typ! +Commands.Healthbars.Changed.HEARTS = [mcMMO]Deine Lebensanzeige wurde zu &cHerzen&f ge\u00E4ndert. +Commands.Healthbars.Invalid = Ung\u00FCltiger Lebensanzeige-Typ! Commands.Inspect = &a- Siehe detaillierte Spielerinformationen Commands.Invite.Success = &aEinladung erfolgreich gesendet. Commands.Leaderboards = &a- Bestenlisten @@ -196,16 +196,16 @@ Commands.Notifications.Off = F\u00E4higkeiten Hinweise wurden &cdeaktiviert Commands.Notifications.On = F\u00E4higkeiten Hinweise wurden &aaktiviert Commands.Offline = Dieser Befehl funktioniert nur bei eingeloggten Spielern. Commands.Other = ---[]&aBesondere Befehle&c[]--- -Commands.Party.Accept = &a- Nimm Party Einladung an +Commands.Party.Accept = &a- Nimm Party-Einladung an Commands.Party.Alliance.Ally = &f{0} &8Ist verb\u00FCndet mit: &f{1} Commands.Party.Alliance.AlreadyAllies = Deine Party ist bereits in einem B\u00FCndnis. Trenne es mit&3/party alliance disband -Commands.Party.Alliance.Header = -----[]&aParty B\u00FCndnisse&c[]----- -Commands.Party.Alliance.Help.0 = Diese Party ist in keinem B\u00FCndnis. Lade einen Party Anf\u00FChrer ein. +Commands.Party.Alliance.Header = -----[]&aParty-B\u00FCndnisse&c[]----- +Commands.Party.Alliance.Help.0 = Diese Party ist in keinem B\u00FCndnis. Lade einen Party-Anf\u00FChrer ein. Commands.Party.Alliance.Help.1 = &c um zu verb\u00FCnden &3/party alliance invite &c. -Commands.Party.Alliance.Invite.0 = ALERT: &aDu hast eine B\u00FCndnis Anfrage f\u00FCr {0} von {1} erhalten -Commands.Party.Alliance.Invite.1 = Tippe &a/party alliance accept&e um die Anfrage anzunehmen -Commands.Party.Alliance.Invite.Accepted = &aB\u00FCndnis Anfrage angenommen -Commands.Party.Alliance.Members.Header = -----[]&aB\u00FCndnis Mitglieder&c[]----- +Commands.Party.Alliance.Invite.0 = ALERT: &aDu hast eine B\u00FCndnis-Anfrage f\u00FCr {0} von {1} erhalten. +Commands.Party.Alliance.Invite.1 = Tippe &a/party alliance accept&e um die Anfrage anzunehmen. +Commands.Party.Alliance.Invite.Accepted = &aB\u00FCndnis-Anfrage angenommen +Commands.Party.Alliance.Members.Header = -----[]&aB\u00FCndnis-Mitglieder&c[]----- Commands.Party.Alliance.None = Deine Party hat keine Verb\u00FCndeten. Commands.Party.AlreadyExists = &4Party {0} ist bereits vorhanden! Commands.Party.Chat.Off = Exklusiver Party Chat &cdeaktiviert @@ -215,20 +215,20 @@ Commands.Party.Create = &7Erstellte Party: {0} Commands.Party.ExpShare = &7Erfahrung &3({0}) Commands.Party.Features.Header = -----[]&aFunktionen&c[]----- Commands.Party.Header = &c-----[]&aParty&c[]----- -Commands.Party.Invite = &a- Sende eine Party Einladung -Commands.Party.Invite.0 = ALERT: &aDu hast eine Party Einladung f\u00FCr {0} von {1} erhalten. -Commands.Party.Invite.1 = &eBenutze &a/party accept&e um die Einladung anzunehmen +Commands.Party.Invite = &a- Sende eine Party-Einladung +Commands.Party.Invite.0 = ALERT: &aDu hast eine Party-Einladung f\u00FCr {0} von {1} erhalten. +Commands.Party.Invite.1 = &eBenutze &a/party accept&e um die Einladung anzunehmen. Commands.Party.Invite.Accepted = &aEinladung angenommen. Du bist der {0} Party beigetreten. Commands.Party.ItemShare = &7Item &3({0}) Commands.Party.ItemShareCategories = &8Teile Items: &7&o{0} Commands.Party.Join = &7Beigetretene Party: {0} Commands.Party.Kick = &cDu wurdest von Party &a{0} ¢fernt! -Commands.Party.Leave = &eDu hast die Party verlassen +Commands.Party.Leave = &eDu hast die Party verlassen. Commands.Party.Members.Header = &c-----[]&aMitglieder&c[]----- Commands.Party.MembersNear = &8In der N\u00E4he: &3{0}&8/&3{1} Commands.Party.None = &cDu bist in keiner Party. Commands.Party.PartyFull = &6{0}&c ist voll! -Commands.Party.PartyFull.Invite = Du kannst &e{0}&c nicht zur Party &a{1}&c einladen, weil sie schon &3{2}&c Spieler hat! +Commands.Party.PartyFull.Invite = Du kannst &e{0}&c nicht zur Party &a{1}&c einladen, weil sie schon &3{2}&c Spieler hat! Commands.Party.PartyFull.InviteAccept = Du kannst der Party &a{0}&c nicht beitreten, weil sie schon &3{1}&c Spieler hat! Commands.Party.Quit = &a- Verlasse deine aktuelle Party. Commands.Party.Rename = &7Party Name wurde zu &f{0} &7ver\u00E4ndert @@ -237,14 +237,14 @@ Commands.Party.ShareMode = &8Teilen Modus: Commands.Party.Status = &8Name: &f{0} {1} &8Level: &3{2} Commands.Party.Status.Alliance = &8Verb\u00FCndeter: &f{0} Commands.Party.Teleport = &a- Teleportiere dich zu Partymitgliedern. -Commands.Party.Toggle = &a- Schalte den Party Chat an oder aus. -Commands.Party.ToggleShareCategory = &7Party Item Teilen f\u00FCr&6{0} &7wurde &3{1} +Commands.Party.Toggle = &a- Schalte den Party-Chat an oder aus. +Commands.Party.ToggleShareCategory = &7Party Item teilen f\u00FCr&6{0} &7wurde &3{1} Commands.Party.UnlockedFeatures = &8Freigeschaltete Features: &7&o{0} -Commands.Party1 = &a- Erstelle eine neue Party +Commands.Party1 = &a- Erstelle eine neue Party. Commands.Party2 = &a- Tritt der Party eines Spielers bei. Commands.PowerLevel = &4GESAMT LEVEL: &a{0} Commands.PowerLevel.Capped = &4Gesamtlevel: &a{0} &4H\u00F6chstlevel: &e{1} -Commands.PowerLevel.Leaderboard = --mcMMO&9 Power Level &eBestenliste-- +Commands.PowerLevel.Leaderboard = --mcMMO&9 Power-Level &eBestenliste-- Commands.Reset = &a- Setze ein Skilllevel auf 0 Commands.Reset.All = &aAlle deine Skilllevel wurden erfolgreich zur\u00FCckgesetzt. Commands.Reset.Single = &aDein {0} Skilllevel wurde erfolgreich zur\u00FCckgesetzt. @@ -253,23 +253,23 @@ Commands.Scoreboard.Help.0 = &6 == &aHilfe f\u00FCr&c/mcscoreboard&6 == Commands.Scoreboard.Help.1 = &3/mcscoreboard&b clear &f - blende die \u00DCbersicht aus Commands.Scoreboard.Help.2 = &3/mcscoreboard&b keep &f - behalte die \u00DCbersicht offen Commands.Scoreboard.Help.3 = &3/mcscoreboard&b time [n] &f - blende die \u00DCbersicht nach &dn&f Sekunden aus -Commands.Scoreboard.Keep = &3Die Stats \u00DCbersicht bleibt sichtbar bis du &a/mcscoreboard clear&3 verwendest. -Commands.Scoreboard.NoBoard = &cDie Stats Anzeige ist nicht sichtbar. +Commands.Scoreboard.Keep = &3Die Stats-\u00DCbersicht bleibt sichtbar bis du &a/mcscoreboard clear&3 verwendest. +Commands.Scoreboard.NoBoard = &cDie Stats-Anzeige ist nicht sichtbar. Commands.Scoreboard.Timer = &3Das Scoreboard wird nach &6{0}&3 Sekunden verschwinden. -Commands.Scoreboard.Tip.Clear = &6Tipp: Benutze &c/mcscoreboard clear&6 um die \u00DCbersicht auszublenden -Commands.Scoreboard.Tip.Keep = &6Tipp: Benutze &c/mcscoreboard keep&6 um das Scoreboard sichtbar zu lassen +Commands.Scoreboard.Tip.Clear = &6Tipp: Benutze &c/mcscoreboard clear&6 um die \u00DCbersicht auszublenden. +Commands.Scoreboard.Tip.Keep = &6Tipp: Benutze &c/mcscoreboard keep&6 um das Scoreboard sichtbar zu lassen. Commands.Skill.ChildSkill = Unterskills sind f\u00FCr diesen Befehl nicht benutzbar! Commands.Skill.Invalid = Das ist kein g\u00FCltiger Skillname! Commands.Skill.Leaderboard = --mcMMO &9{0}&e Bestenliste-- -Commands.SkillInfo = &a- Detaillierte Informationen zu einem Skill -Commands.Stats = &a- Zeige deine Skill Statistiken +Commands.SkillInfo = &a- Detaillierte Informationen zu einem Skill. +Commands.Stats = &a- Zeige deine Skill Statistiken. Commands.Stats.Self.Overhaul = Statistiken -Commands.ToggleAbility = &a- Schalte F\u00E4higkeiten-Aktivierung mit Rechtsklick an oder aus +Commands.ToggleAbility = &a- Schalte F\u00E4higkeiten-Aktivierung mit Rechtsklick an oder aus. Commands.Usage.0 = &cDie korrekte Verwendung ist /{0} Commands.Usage.1 = &cDie korrekte Verwendung ist /{0} {1} Commands.Usage.2 = &cDie korrekte Verwendung ist /{0} {1} {2} Commands.Usage.3 = &cDie korrekte Verwendung ist /{0} {1} {2} {3} -Commands.Usage.3.XP = &cDie korrekte Verwendung /{0} {1} {2} {3}&7 (Du kannst auch -s an das Ende des Befehls hinzuf\u00FC"gen, damit der Spieler nicht benachrichtigt wird) +Commands.Usage.3.XP = &cDie korrekte Verwendung ist /{0} {1} {2} {3}&7 (Du kannst auch -s an das Ende des Befehls hinzuf\u00FC"gen, damit der Spieler nicht benachrichtigt wird.) Commands.Usage.FullClassName = Klassenname Commands.Usage.Level = Level Commands.Usage.Message = Nachricht @@ -284,7 +284,7 @@ Commands.Usage.XP = Erfahrung Commands.XPBar.DisableAll = &6Alle mcMMO Erfahrungsleisten wurden deaktiviert, benutze /mmoxpbar reset um die Standardeinstellungen wiederherzustellen. Commands.XPBar.Reset = &6Die Erfahrungsleisten-Einstellungen f\u00FCr mcMMO wurden zur\u00FCckgesetzt. Commands.XPBar.SettingChanged = &6Die Erfahrungsleisten-Einstellungen f\u00FCr &a{0}&6 wurden gesetzt auf: &a{1} -Commands.XPBar.Usage = Proper usage is /mmoxpbar +Commands.XPBar.Usage = Die korrekte Verwendung ist /mmoxpbar Commands.XPGain = &8XP ZUWACHS: &f{0} Commands.XPGain.Acrobatics = Fallen Commands.XPGain.Alchemy = Tr\u00E4nke brauen @@ -292,7 +292,7 @@ Commands.XPGain.Archery = Monster angreifen Commands.XPGain.Axes = Monster angreifen Commands.XPGain.Child = Levelerhalt durch Verbesserung der Elternskills Commands.XPGain.Excavation = Graben und Sch\u00E4tze finden -Commands.XPGain.Fishing = Angeln (Ach was :o) +Commands.XPGain.Fishing = Angeln Commands.XPGain.Herbalism = Ernten Commands.XPGain.Mining = Erze und Steine abbauen Commands.XPGain.Overhaul = &6Erfahrungserhalt: &3{0} @@ -308,14 +308,14 @@ Commands.addlevels.AwardSkill.2 = {0} wurde um {1} ge\u00E4ndert. Commands.addxp.AwardAll = &aDir wurden {0} Erfahrungspunkte in Skills gutgeschrieben! Commands.addxp.AwardSkill = &aDir wurde {0} Erfahrung in {1} gutgeschrieben! Commands.mcc.Header = ---[]&amcMMO Befehle&c[]--- -Commands.mcconvert.Database.Finish = &7Datenbanken Umzug vollendet - die {1} Datenbank hat nun alle Daten von der {0} Datenbank. +Commands.mcconvert.Database.Finish = &7Datenbanken-Umzug vollendet - die {1} Datenbank hat nun alle Daten von der {0} Datenbank. Commands.mcconvert.Database.InvalidType = {0} ist kein g\u00FCltiger Datenbanktyp. Commands.mcconvert.Database.Same = Du benutzt bereits eine {0} Datenbank! Commands.mcconvert.Database.Start = &7Beginne Konvertierung von {0} zu {1}... -Commands.mcconvert.Experience.Finish = &7Konvertierung vollendet - es wird jetzt die {0} Erfahrungs Kurve verwendet. +Commands.mcconvert.Experience.Finish = &7Konvertierung vollendet - es wird jetzt die {0} Erfahrungskurve verwendet. Commands.mcconvert.Experience.Invalid = Unbekannter Formeltyp! G\u00FCltige Typen sind: &aLINEAR &cund &aEXPONENTIAL. -Commands.mcconvert.Experience.Same = Formeltyp {0} wird bereits verwendet -Commands.mcconvert.Experience.Start = &7Beginne Konvertierung von Kurve {0} zu Kurve {1} +Commands.mcconvert.Experience.Same = Formeltyp {0} wird bereits verwendet. +Commands.mcconvert.Experience.Start = &7Beginne Konvertierung von Kurve {0} zu Kurve {1}. Commands.mcgod = &a- Schalte Godmode um Commands.mchud.Invalid = Das ist kein g\u00FCltiger HUD Typ. Commands.mcpurge.Success = &aDie Datenbank wurde erfolgreich ges\u00E4ubert! @@ -339,7 +339,7 @@ Commands.ptp.Enabled = Party-Teleportierung &aaktiviert Commands.ptp.NoRequests = Du hast aktuell keine Teleportierungsanfragen. Commands.ptp.NoWorldPermissions = &c[mcMMO] Du hast nicht die n\u00F6tigen Rechte um dich in die Welt {0} zu teleportieren. Commands.ptp.Request1 = {0} &am\u00F6chte sich zu dir teleportieren. -Commands.ptp.Request2 = &aUm zu teleportieren tippe&e/ptp accept&a. Die Anfrage l\u00E4uft in&c{0} &aSekunden aus. +Commands.ptp.Request2 = &aUm zu teleportieren tippe &e/ptp accept&a. Die Anfrage l\u00E4uft in &c{0} &aSekunden aus. Commands.ptp.RequestExpired = &cParty-Teleportierungsanfrage ist ausgelaufen. Commands.xplock.locked = &6Deine Erfahrungsanzeige ist nun auf {0} festgesetzt! Commands.xplock.unlocked = &6Deine Erfahrungsanzeige ist nun wieder &afreigeschaltet&6! @@ -362,141 +362,141 @@ Effects.Parent = &6{0} - Effects.SubSkills.Overhaul = F\u00E4higkeiten Effects.Template = &3{0}: &a{1} -Excavation.Ability.Lower = &a&o**Du senkst deine Schaufel ...** -Excavation.Ability.Ready = &a&o**Du hebst deine Schaufel!** +Excavation.Ability.Lower = &7&o**Du senkst deine Schaufel.** +Excavation.Ability.Ready = &a&o**Du hebst deine Schaufel...** Excavation.Listener = Graben: Excavation.SkillName = Graben Excavation.Skills.GigaDrillBreaker.Off = &a&o**Dein Gigabohrer ist ausgelaufen** Excavation.Skills.GigaDrillBreaker.On = &a&o**Gigabohrer wurde aktiviert** -Excavation.Skills.GigaDrillBreaker.Other.Off = {0}s &cGigabohrer&a ist &aausgelaufen +Excavation.Skills.GigaDrillBreaker.Other.Off = {0}s &cGigabohrer&a ist &aausgelaufen. Excavation.Skills.GigaDrillBreaker.Other.On = &a{0}&2 benutzte &cGigabohrer! Excavation.Skills.GigaDrillBreaker.Refresh = &aDein &eGigabohrer &aist wieder bereit! Excavation.SubSkill.Archaeology.Description = Ergrabe die Sch\u00E4tze der Unterwelt! Excavation.SubSkill.Archaeology.Name = Arch\u00E4ologie Excavation.SubSkill.Archaeology.Stat = Arch\u00E4ologie Erfahrungspunkte-Chance Excavation.SubSkill.Archaeology.Stat.Extra = Arch\u00E4ologie Erfahrungspunkte-Anzahl -Excavation.SubSkill.GigaDrillBreaker.Description = Dreifache Droprate, Dreifache Erfahrung und Bonus Geschwindigkeit. +Excavation.SubSkill.GigaDrillBreaker.Description = Dreifache Droprate, dreifache Erfahrung und Bonus-Geschwindigkeit. Excavation.SubSkill.GigaDrillBreaker.Name = Gigabohrer Excavation.SubSkill.GigaDrillBreaker.Stat = Gigabohrer-Dauer -Fishing.Ability.Info = Zauberj\u00E4ger: &7 **Verbessert sich mit Schatzj\u00E4ger Rang** +Fishing.Ability.Info = Zauberj\u00E4ger: &7 **Verbessert sich mit Schatzj\u00E4ger-Rang** Fishing.Ability.Locked.0 = Gesperrt bis Level {0}! Fishing.Ability.Locked.1 = Gesperrt bis Level {0}! Fishing.Ability.Locked.2 = Gesperrt bis Level {0}! Fishing.Ability.TH.Boom = &c&lDeine Angelschnur hat sich in einer &4&lSeemine &c&lverfangen! -Fishing.Ability.TH.MagicFound = &bDu f\u00FChlst etwas magisches in diesem Fang... -Fishing.Ability.TH.Poison = &7Irgendentwas stinkt hier... +Fishing.Ability.TH.MagicFound = &bDu f\u00FChlst etwas Magisches in diesem Fang... +Fishing.Ability.TH.Poison = &7Irgendetwas stinkt hier... Fishing.Chance.Raining = &9Regen-Bonus -Fishing.Exhausting = &c&oUnsachgem\u00E4\u00DFe Nutzung der Angelrute f\u00FChrt zu Erm\u00FCdung und abnutzen der Rute. +Fishing.Exhausting = &c&oUnsachgem\u00E4\u00DFe Nutzung der Angelrute f\u00FChrt zu Erm\u00FCdung und Abnutzen der Rute. Fishing.Listener = Angeln: -Fishing.LowResourcesTip = &7Dein Gesp\u00FChr sagt dir, dass es hier kaum noch Fische gibt. Versuche es mindestens {0} Bl\u00F6cke entfernt. +Fishing.LowResourcesTip = &7Dein Gesp\u00FCr sagt dir, dass es hier kaum noch Fische gibt. Versuche es mindestens {0} Bl\u00F6cke entfernt. Fishing.ScarcityTip = &e&oDas Gebiet ist \u00FCberfischt. Versuche es woanders, mindestens {0} Bl\u00F6cke entfernt. Fishing.Scared = &7&oHektische Bewegungen ver\u00E4ngstigen Fische! Fishing.SkillName = Angeln -Fishing.SubSkill.FishermansDiet.Description = Verbessert den N\u00E4hrwert von geangelter Nahrung +Fishing.SubSkill.FishermansDiet.Description = Verbessert den N\u00E4hrwert von geangelter Nahrung. Fishing.SubSkill.FishermansDiet.Name = Fischers-Di\u00E4t Fishing.SubSkill.FishermansDiet.Stat = Fishers-Di\u00E4t:&a Rang {0} -Fishing.SubSkill.IceFishing.Description = Erm\u00F6glicht dir in Eisbiomen zu angeln +Fishing.SubSkill.IceFishing.Description = Erm\u00F6glicht dir in Eisbiomen zu angeln. Fishing.SubSkill.IceFishing.Name = Eisangeln Fishing.SubSkill.IceFishing.Stat = Eisangeln -Fishing.SubSkill.MagicHunter.Description = Finde verzauberte Gegenst\u00E4nde +Fishing.SubSkill.MagicHunter.Description = Finde verzauberte Gegenst\u00E4nde. Fishing.SubSkill.MagicHunter.Name = Zauber-J\u00E4ger Fishing.SubSkill.MagicHunter.Stat = Zauber-J\u00E4ger Chance Fishing.SubSkill.MasterAngler.Description = Fische k\u00F6nnen h\u00E4ufiger gefangen werden, mit einem Boot funktioniert es umso besser. Fishing.SubSkill.MasterAngler.Name = Superangel -Fishing.SubSkill.MasterAngler.Stat = Mindestwartezeit beim Angeln reduziert um: &a-{0} seconds -Fishing.SubSkill.MasterAngler.Stat.Extra = Maximalwartezeit beim Angeln reduziert um: &a-{0} seconds -Fishing.SubSkill.Shake.Description = Rei\u00DFe Gegenst\u00E4nde weg von Lebewesen und Spielern mit deiner Angel +Fishing.SubSkill.MasterAngler.Stat = Mindestwartezeit beim Angeln reduziert um: &a-{0} Sekunden +Fishing.SubSkill.MasterAngler.Stat.Extra = Maximalwartezeit beim Angeln reduziert um: &a-{0} Sekunden +Fishing.SubSkill.Shake.Description = Rei\u00DFe mit deiner Angel Gegenst\u00E4nde weg von Lebewesen und Spielern. Fishing.SubSkill.Shake.Name = Rei\u00DFen Fishing.SubSkill.Shake.Stat = Rei\u00DFen Chance -Fishing.SubSkill.TreasureHunter.Description = Angle verschiedene Objekte -Fishing.SubSkill.TreasureHunter.Name = Schatz J\u00E4ger -Fishing.SubSkill.TreasureHunter.Stat = Schatz J\u00E4ger Rang: &a{0}&3/&a{1} -Fishing.SubSkill.TreasureHunter.Stat.Extra = Drop Rate: &7\u00DCblich: &e{0} &aUn\u00FCblich: &e{1}\n&9Selten: &e{2} &dEpisch: &e{3} &6Legend\u00E4r: &e{4} &bMythic: &e{5} +Fishing.SubSkill.TreasureHunter.Description = Angle verschiedene Objekte. +Fishing.SubSkill.TreasureHunter.Name = Schatz-J\u00E4ger +Fishing.SubSkill.TreasureHunter.Stat = Schatz-J\u00E4ger Rang: &a{0}&3/&a{1} +Fishing.SubSkill.TreasureHunter.Stat.Extra = Drop-Rate: &7\u00DCblich: &e{0} &aUn\u00FCblich: &e{1}\n&9Selten: &e{2} &dEpisch: &e{3} &6Legend\u00E4r: &e{4} &bMythic: &e{5} Guides.Acrobatics.Section.0 = &3\u00DCber Akrobatik:\n&eAkrobatik ist die Kunst sich anmutig fortzubewegen.\n&eFall- und Kampfschaden werden reduziert\n\n&3XP GAIN:\n&eErfahrung sammelst du indem du in K\u00E4mpfen\n&eausweichst oder St\u00FCrze aus gro\u00DFen H\u00F6hen \u00FCberlebst. -Guides.Acrobatics.Section.1 = &3Wie funktioniert Abrollen?\n&eAb und zu rollst du beim Fallen ab und der Fallschaden wird\n&ereduziert. Wenn du den Schleichen Knopf w\u00E4hrend dem Fallen\n&eh\u00E4ltst, verdoppelt sich die Chance abzurollen.\n&eIn dem Fall rollst du anmutig ab.\n&eAnmutige Rollen sind wie normale Rollen, nur dass\n&esie \u00F6fter passieren und damit mehr Schutz vor St\u00FCrzen\n&eliefern. +Guides.Acrobatics.Section.1 = &3Wie funktioniert Abrollen?\n&eAb und zu rollst du beim Fallen ab und der Fallschaden wird\n&ereduziert. Wenn du die Schleichen-Taste w\u00E4hrend dem Fallen\n&eh\u00E4ltst, verdoppelt sich die Chance abzurollen.\n&eIn dem Fall rollst du anmutig ab.\n&eAnmutige Rollen sind wie normale Rollen, nur dass\n&esie \u00F6fter passieren und damit mehr Schutz vor St\u00FCrzen\n&eliefern. Guides.Acrobatics.Section.2 = &3Wie funktioniert Ausweichen?\n&eAusweichen ist eine passive F\u00E4higkeit\n&edie ab und zu den Schaden in K\u00E4mpfen halbiert.\n&eDie Chance auszuweichen ist abh\u00E4ngig vom \n&eAkrobatiklevel. Guides.Alchemy.Section.0 = &3\u00DCber Alchemie:\n&eIn Alchemie musst du Tr\u00E4nke brauen.\n&eMit h\u00F6herem Level werden die Tr\u00E4nke schneller\n&egebraut und neue Zutaten f\u00FCr zun\u00E4chst unerh\u00E4ltliche Tr\u00E4nke \n&efreigeschaltet.\n\n&3XP ZUWACHS:\n&eTr\u00E4nke brauen. Guides.Alchemy.Section.1 = &3Wie funktioniert Katalyse?\n&eKatalyse beschleunigt das Brauen von Tr\u00E4nken bis\n&ezu 4-facher Geschwindigkeit bei Level 1000. -Guides.Alchemy.Section.2 = &3Wie funktioniert Gebr\u00E4u?\n&eGebr\u00E4u erm\u00F6glich das Brauen weiterer Tr\u00E4nke mit neuen\n&eZutaten.\n&eWelche Zutaten m\u00F6glich sind, h\u00E4ngt vom Rang ab.\n&eInsgesamt gibt es 8 R\u00E4nge zum freischalten. +Guides.Alchemy.Section.2 = &3Wie funktioniert Gebr\u00E4u?\n&eGebr\u00E4u erm\u00F6glich das Brauen weiterer Tr\u00E4nke mit neuen\n&eZutaten.\n&eWelche Zutaten m\u00F6glich sind, h\u00E4ngt vom Rang ab.\n&eInsgesamt gibt es 8 R\u00E4nge freizuschalten. Guides.Alchemy.Section.3 = &3Gebr\u00E4u Tier 1 Zutaten:\n&eLohnenstaub, Fermentierte Spinnenaugen, Ghast Tr\u00E4nen,\n&eRedstone, Glowstonestaub, Zucker, Glitzernde Melone,\n&eGoldene Karotte, Magma Creme, Netherwarzen, Spinnenaugen, \n&eSchwarzpulver, Seerose, Kugelfisch (Vanilla Tr\u00E4nke) -Guides.Alchemy.Section.4 = &3Gebr\u00E4u Tier 2 Zutaten:\n&eKarotte (Eile)\n&eSchleimball (Langsamkeit)\n\n&3Gebr\u00E4u Tier 3 Zutaten:\n&eQuarz (Absoption)\n&eRoter Pilz (Springen) +Guides.Alchemy.Section.4 = &3Gebr\u00E4u Tier 2 Zutaten:\n&eKarotte (Eile)\n&eSchleimball (Langsamkeit)\n\n&3Gebr\u00E4u Tier 3 Zutaten:\n&eQuarz (Absorption)\n&eRoter Pilz (Sprungkraft) Guides.Alchemy.Section.5 = &3Gebr\u00E4u Tier 4 Zutaten:\n&eApfel (Gesundheitsboost)\n&eVerrottetes Fleisch (Hunger)\n\n&3Gebr\u00E4u Tier 5 Zutaten:\n&eBrauner Pilz(\u00DCbelkeit)\n&eTintensack (Blindheit) Guides.Alchemy.Section.6 = &3Gebr\u00E4u Tier 6 Zutaten:\n&eGras (S\u00E4ttigung)\n\n&3Gebr\u00E4u Tier 7 Zutaten:\n&eGiftige Kartoffel (Verwesung)\n\n&3Gebr\u00E4u Tier 8 Zutaten:\n&eNormaler Goldener Apfel (Resistenz) Guides.Archery.Section.0 = &3\u00DCber Bogenschie\u00DFen:\n&eIn Bogenschie\u00DFen geht es um die Verwendung von Pfeil und\n&eBogen.\n\n&eEs gibt unterschiedliche Kampfboni, wie Zusatzschaden,\n&eder mit dem Level steigt und der F\u00E4higkeit Feinde im PVP\n&ezu bet\u00E4uben. Zus\u00E4tzlich kannst du einige verschossene\n&ePfeile aus den Leichen deiner Feinde wiedergewinnen. Guides.Archery.Section.1 = &3XP ZUWACHS:\n&eXP erh\u00E4ltst du durch das Abschie\u00DFen von Monstern und\n&eanderen Spielern. -Guides.Archery.Section.2 = &3Wie funktioniert der Kunstschuss?\n&eKunstschuss erh\u00F6ht den Schaden deines Schusses.\n&eDer Zusatzschaden steigt mit deinem Bogen Level.\n&eIn den Standardeinstellungen steigt der Schaden um 10%\n&ealle 50 Level, mit einem Maximum von 200% extra. +Guides.Archery.Section.2 = &3Wie funktioniert der Kunstschuss?\n&eKunstschuss erh\u00F6ht den Schaden deines Schusses.\n&eDer Zusatzschaden steigt mit deinem Bogen-Level.\n&eIn den Standardeinstellungen steigt der Schaden um 10%\n&ealle 50 Level, mit einem Maximum von 200% extra. Guides.Archery.Section.3 = &3Wie Funktioniert Bet\u00E4ubung?\n&eDu hast eine passive Chance andere Spieler\n&ezu bet\u00E4uben wenn du sie anschie\u00DFt. Der Spieler wird\n&egezwungen f\u00FCr eine kurze Weile senkrecht nach oben zu\n&eschauen.\n&eEin Bet\u00E4ubungsschuss f\u00FCgt au\u00DFerdem 4 Schadenspunkte \n&e(2 Herzen) extra zu. Guides.Available = &7Anleitung f\u00FCr {0} vorhanden - tippe /{1} ? [Seite] -Guides.Axes.Section.0 = &3\u00DCber Axt:\n&eMit dem Axt Skill kannst du die Axt f\u00FCr viel mehr als\n&enur abholzen verwenden! Du kannst Monster und Spieler\n&esprichw\u00F6rtlich weghacken und ihnen t\u00F6dliche\n&eSchl\u00E4ge verpassen oder sie zur\u00FCckweichen lassen\n&eDeine Axt zerst\u00F6rt au\u00DFerdem sehr gut R\u00FCstungen,\n&ewas mit h\u00F6herem Level noch mehr ansteigt. +Guides.Axes.Section.0 = &3\u00DCber Axt:\n&eMit dem Axt-Skill kannst du die Axt f\u00FCr viel mehr als\n&enur abholzen verwenden! Du kannst Monster und Spieler\n&esprichw\u00F6rtlich weghacken und ihnen t\u00F6dliche\n&eSchl\u00E4ge verpassen oder sie zur\u00FCckweichen lassen.\n&eDeine Axt zerst\u00F6rt au\u00DFerdem sehr gut R\u00FCstungen,\n&ewas mit h\u00F6herem Level noch mehr ansteigt. Guides.Axes.Section.1 = &3XP ZUWACHS:\n&eUm XP zu bekommen musst du Spieler oder Monster \n&emit einer Axt schlagen. Guides.Axes.Section.2 = &3Wie funktioniert der Sch\u00E4delspalter?\n&eDiese F\u00E4higkeit erlaubt dir einen Angriff mit Fl\u00E4chenschaden\n&eauszuf\u00FChren.\n&eDer Fl\u00E4chenschaden ist halb so gro\u00DF wie der \n&eHauptangriff, also perfekt f\u00FCr gro\u00DFe Ansammlungen von Mobs. Guides.Axes.Section.3 = &3Wie funktionieren kritische Treffer?\n&eKritische Treffer sind eine passive F\u00E4higkeit\n&edie ab und zu Zusatzschaden zuf\u00FCgen.\n&eIn den Standardeinstellungen wird alle 2 Level \n&edie Chance um 0.1% erh\u00F6ht. Das f\u00FCgt Mobs\n&edoppelten und anderen Spielern 1,5 fachen Schaden zu. -Guides.Axes.Section.4 = &3Wie funktioniert die Axt-Beherrschung?\n&eAxt Beherrschung ist eine passive F\u00E4higkeit die deinen\n&eAxt-Schl\u00E4gen Zusatzschaden hinzuf\u00FCgt.\n&eStandardm\u00E4\u00DFig steigt der Schaden um 1 alle 50 Level,\n&emaximal auf 4 Extraschaden bei Level 200. -Guides.Axes.Section.5 = &3Wie funktioniert Wucht?\n&eSchlage m\u00E4chtig zu und zerst\u00F6re R\u00FCstungen!\n&eWucht hat eine passive Chance gegnerische\n&eR\u00FCstung zu besch\u00E4digen. Dieser Schaden steigt mit deinem Axt\n&eLevel. -Guides.Excavation.Section.0 = &3\u00DCber Graben:\n&eGraben ist die F\u00E4higkeit Sch\u00E4tze im Dreck zu finden.\n&eDurch Aufgraben des Landes wirst du Sch\u00E4tze finden\n&eJe l\u00E4nger du das tust, desto mehr Sch\u00E4tze findest du.\n\n&3XP ZUWACHS:\n&eXP erh\u00E4ltst du durch Schaufeln.\n&eNur bestimmte Materialen geben XP und Sch\u00E4tze. +Guides.Axes.Section.4 = &3Wie funktioniert die Axt-Beherrschung?\n&eAxt-Beherrschung ist eine passive F\u00E4higkeit die deinen\n&eAxt-Schl\u00E4gen Zusatzschaden hinzuf\u00FCgt.\n&eStandardm\u00E4\u00DFig steigt der Schaden um 1 alle 50 Level,\n&emaximal auf 4 Extraschaden bei Level 200. +Guides.Axes.Section.5 = &3Wie funktioniert Wucht?\n&eSchlage m\u00E4chtig zu und zerst\u00F6re R\u00FCstungen!\n&eWucht hat eine passive Chance gegnerische\n&eR\u00FCstung zu besch\u00E4digen. Dieser Schaden steigt mit deinem Axt-\n&eLevel. +Guides.Excavation.Section.0 = &3\u00DCber Graben:\n&eGraben ist die F\u00E4higkeit Sch\u00E4tze im Dreck zu finden.\n&eDurch Aufgraben des Landes wirst du Sch\u00E4tze finden.\n&eJe l\u00E4nger du das tust, desto mehr Sch\u00E4tze findest du.\n\n&3XP ZUWACHS:\n&eXP erh\u00E4ltst du durch Schaufeln.\n&eNur bestimmte Materialen geben XP und Sch\u00E4tze. Guides.Excavation.Section.1 = &3Kompatible Materialien:\n&eGras, Erde, Sand, Lehm, Kies, Myzel, Seelensand, Schnee -Guides.Excavation.Section.2 = &3Wie funktioniert der Giga Bohrer?\n&eHalte eine Schaufel in der Hand und mach Rechtsklick.\n&eVon nun an hast du ca. 4 Sekunden um einen kompatiblem\n&eBlock abzubauen.\n&eDaraufhin wird der Giga Bohrer aktiviert. -Guides.Excavation.Section.3 = &3Was ist der Giga Bohrer?\n&eGiga Bohrer ist eine F\u00E4higkeit deren Dauer vom Graben Skill\n&eabh\u00E4ngt.\n&eEs verdreifacht die Chance Sch\u00E4tze zu finden\n&eund erm\u00F6glicht sofortiges Abbauen kompatibler Materialien. -Guides.Excavation.Section.4 = &3Wie funktioniert der Schatz J\u00E4ger?\n&eJeder m\u00F6gliche Schatz hat seine eigene Level Voraussetzung\n&eum zu erscheinen, folglich ist es schwer&ezu sagen inwiefern es \n&edir hilft ein h\u00F6heres Level zu haben.\n&eJe h\u00F6her das Level, desto mehr Sch\u00E4tze k\u00F6nnen gefunden\n&ewerden. +Guides.Excavation.Section.2 = &3Wie funktioniert der Giga-Bohrer?\n&eHalte eine Schaufel in der Hand und mach Rechtsklick.\n&eVon nun an hast du ca. 4 Sekunden um einen kompatiblem\n&eBlock abzubauen.\n&eDaraufhin wird der Giga-Bohrer aktiviert. +Guides.Excavation.Section.3 = &3Was ist der Giga-Bohrer?\n&eGiga-Bohrer ist eine F\u00E4higkeit deren Dauer vom Graben-Skill\n&eabh\u00E4ngt.\n&eEs verdreifacht die Chance Sch\u00E4tze zu finden\n&eund erm\u00F6glicht sofortiges Abbauen kompatibler Materialien. +Guides.Excavation.Section.4 = &3Wie funktioniert der Schatz-J\u00E4ger?\n&eJeder m\u00F6gliche Schatz hat seine eigene Level-Voraussetzung\n&eum zu erscheinen, folglich ist es schwer&ezu sagen inwiefern es \n&edir hilft ein h\u00F6heres Level zu haben.\n&eJe h\u00F6her das Level, desto mehr Sch\u00E4tze k\u00F6nnen gefunden\n&ewerden. Guides.Excavation.Section.5 = Beachte au\u00DFerdem, dass jedes kompatible Material seine\n&eeigenen einzigartigen Sch\u00E4tze hat.\n&eAnders ausgedr\u00FCckt: Sch\u00E4tze die du in Kies findest\n&egibt es nicht zwingend in Erde. -Guides.Fishing.Section.0 = &3\u00DCber Angeln:\n&eMit dem Angeln Skill ist Angeln wieder aufregend!\n&eFinde versteckte Sch\u00E4tze oder Rei\u00DFe Items von Monstern.\n\n&3XP ZUWACHS:\n&eFang Fische. -Guides.Fishing.Section.1 = &3Wie funktioniert der Schatz J\u00E4ger?\n&eMit dieser F\u00E4higkeit kannst du beim Angeln Sch\u00E4tze finden.\n&eDiese k\u00F6nnen sogar verzaubert sein!\n&eJeder m\u00F6gliche Schatz kann mit jedem Level gefunden\n&ewerden. Die H\u00E4ufigkeit h\u00E4ngt von dem Wert des Items ab.\n&eJe h\u00F6her der Angeln Skill ist, desto einfacher wird es\n&ewertvolle Sch\u00E4tze zu finden. +Guides.Fishing.Section.0 = &3\u00DCber Angeln:\n&eMit dem Angeln-Skill ist Angeln wieder aufregend!\n&eFinde versteckte Sch\u00E4tze oder rei\u00DFe Items von Monstern.\n\n&3XP ZUWACHS:\n&eFang Fische. +Guides.Fishing.Section.1 = &3Wie funktioniert der Schatz-J\u00E4ger?\n&eMit dieser F\u00E4higkeit kannst du beim Angeln Sch\u00E4tze finden.\n&eDiese k\u00F6nnen sogar verzaubert sein!\n&eJeder m\u00F6gliche Schatz kann mit jedem Level gefunden\n&ewerden. Die H\u00E4ufigkeit h\u00E4ngt von dem Wert des Items ab.\n&eJe h\u00F6her der Angeln-Skill ist, desto einfacher wird es\n&ewertvolle Sch\u00E4tze zu finden. Guides.Fishing.Section.2 = &3Wie funktioniert Eisangeln?\n&eMit dieser F\u00E4higkeit kannst du in Eisseen angeln!\n&eWirf deine Angeln in einem Eissee aus\n&eum ein kleines Loch zum Angeln zu erstellen. -Guides.Fishing.Section.3 = &3Wie funktioniert die Profiangel?\n&eMit dieser passiven F\u00E4higkeit bei\u00DFen mehr Fische an.\n&eSobald die F\u00E4higkeit freigeschaltet ist bringt das Angeln\n&ein einem Boot oder Ozean die doppelte \n&eAnbei\u00DFChance. -Guides.Fishing.Section.4 = &3Wie funktioniert Rei\u00DFen?\n&eDiese F\u00E4higkeit erm\u00F6glich es Monstern Items zu entrei\u00DFen,\n&eindem du sie an deine Angel h\u00E4ngst. \n&eDie Monster lassen das Item, das sie normalerweise beim Tod\n&efallen lassen fallen.\n&eAu\u00DFerdem gibt es eine kleine Chance Monstersch\u00E4del\n&ezu bekommen. +Guides.Fishing.Section.3 = &3Wie funktioniert die Profiangel?\n&eMit dieser passiven F\u00E4higkeit bei\u00DFen mehr Fische an.\n&eSobald die F\u00E4higkeit freigeschaltet ist bringt das Angeln\n&ein einem Boot oder Ozean die doppelte \n&eAnbei\u00DFchance. +Guides.Fishing.Section.4 = &3Wie funktioniert Rei\u00DFen?\n&eDiese F\u00E4higkeit erm\u00F6glich es Monstern Items zu entrei\u00DFen,\n&eindem du sie an deine Angel h\u00E4ngst. \n&eDie Monster lassen das Item, das sie normalerweise beim Tod\n&efallen lassen, fallen.\n&eAu\u00DFerdem gibt es eine kleine Chance Monstersch\u00E4del\n&ezu bekommen. Guides.Fishing.Section.5 = &3Wie funktioniert die Fischer-Mahlzeit?\n&eDu wirst beim Essen von Fisch besser satt. -Guides.Fishing.Section.6 = &3Bemerkung zum Angeln:\n&eAngeln Drops sind vollkommen anpassbar.\n&eErgebnisse unterscheiden sich deshalb von Server zu Server. +Guides.Fishing.Section.6 = &3Bemerkung zum Angeln:\n&eAngel-Drops sind vollkommen anpassbar.\n&eErgebnisse unterscheiden sich deshalb von Server zu Server. Guides.Header = &6-=&a{0} Anleitung&6=- Guides.Herbalism.Section.0 = &3\u00DCber Kr\u00E4uterkunde\n&eIn Kr\u00E4uterkunde geht es um das Ernten.\n\n&3XP ZUWACHS:\n&eErnte Pflanzen. -Guides.Herbalism.Section.1 = &3Kompatible Blocks\n&eWeizen, Kartoffeln, Karotten, Melonen, K\u00FCrbisse,\n&eZuckerrohr, Kakaobohnen, Blumen, Kakteen,\n&ePilze, Netherwarzen, Seerosen und Ranken. -Guides.Herbalism.Section.2 = &3Wie funktioniert Gr\u00FCnes Land?\n&eGr\u00FCnes Land ist eine aktive F\u00E4higkeit die du aktivierst indem du\n&emit einer Harke in der Hand rechtsklickst.\n&eGr\u00FCnes Land erm\u00F6glicht einen 3-fachen Ertrag beim Ernten.\n&eAu\u00DFerdem erm\u00F6glich es Leben in zu hauchen und sie\n&emithilfe von Samen aus dem Inventar zu verwandeln. +Guides.Herbalism.Section.1 = &3Kompatible Pflanzen:\n&eWeizen, Kartoffeln, Karotten, Melonen, K\u00FCrbisse,\n&eZuckerrohr, Kakaobohnen, Blumen, Kakteen,\n&ePilze, Netherwarzen, Seerosen und Ranken. +Guides.Herbalism.Section.2 = &3Wie funktioniert Gr\u00FCnes Land?\n&eGr\u00FCnes Land ist eine aktive F\u00E4higkeit die du aktivierst indem du\n&emit einer Harke in der Hand rechtsklickst.\n&eGr\u00FCnes Land erm\u00F6glicht einen 3-fachen Ertrag beim Ernten.\n&eAu\u00DFerdem erm\u00F6glich es Leben einzuhauchen und sie\n&emithilfe von Samen aus dem Inventar zu verwandeln. Guides.Herbalism.Section.3 = &3Wie funktioniert der Gr\u00FCne Daumen (Samen)?\n&eDiese passive F\u00E4higkeit pflanz automatisch beim Ernten nach.\n&eDer Erfolg h\u00E4ngt vom Kr\u00E4uterkunde Level ab. -Guides.Herbalism.Section.4 = &3Wie funktioniert der Gr\u00FCne Daumen(Blocks)?\n&eDiese aktive F\u00E4higkeit erm\u00F6glich es Bl\u00F6cke in ihre \n&e"Naturverwandte" Form zu verwandeln. Klicke dazu mit der\n&erechten Maustaste auf einen Block, w\u00E4hrend du Samen in\n&eder Hand h\u00E4ltst. \n&ePro Versuch kostet es dich einen Samen.\n&eDer Erfolg h\u00E4ngt vom Kräuterkunde Level ab. +Guides.Herbalism.Section.4 = &3Wie funktioniert der Gr\u00FCne Daumen(Blocks)?\n&eDiese aktive F\u00E4higkeit erm\u00F6glich es Bl\u00F6cke in ihre \n&e"naturverwandte" Form zu verwandeln. Klicke dazu mit der\n&erechten Maustaste auf einen Block, w\u00E4hrend du Samen in\n&eder Hand h\u00E4ltst. \n&ePro Versuch kostet es dich einen Samen.\n&eDer Erfolg h\u00E4ngt vom Kr\u00E4uterkunde-Level ab. Guides.Herbalism.Section.5 = &3Wie funktioniert das Bauernfr\u00FChst\u00FCck?\n&eDu wirst beim Essen von Brot, Keksen, Melonen, Pilzsuppe,\n&eKarotten und Kartoffeln satter. Guides.Herbalism.Section.6 = &3Wie funktioniert Hylians Gl\u00FCck?\n&eDiese passive F\u00E4higkeit gibt dir eine Chance Items zu finden\n&ewenn du bestimmte Bl\u00F6cke mit dem Schwert abbaust. Guides.Herbalism.Section.7 = &3Wie funktionieren Doppeldrops?\n&eDu erh\u00E4ltst beim Ernten mehr Ertrag. -Guides.Mining.Section.0 = &3\u00DCber Bergbau:\n&eIm Bergbau musst du Steine und Erze sammeln. Du erh\u00E4ltst\n&eab und zu zus\u00E4tzliche Drops.\n\n&3XP ZUWACHS:\n&eUm Erfahrung zu sammeln musst du mit der Spitzhacke abbauen.\n&eNur bestimmte Blocks geben XP. +Guides.Mining.Section.0 = &3\u00DCber Bergbau:\n&eIm Bergbau musst du Steine und Erze sammeln. Du erh\u00E4ltst\n&eab und zu zus\u00E4tzliche Drops.\n\n&3XP ZUWACHS:\n&eUm Erfahrung zu sammeln musst du mit der Spitzhacke abbauen.\n&eNur bestimmte Bl\u00F6cke geben XP. Guides.Mining.Section.1 = &3Kompatible Materialien:\n&eStein, Kohleerz, Eisenerz, Golderz, Diamanterz, Redstoneerz,\n&eLapiserz, Obsidian, Bemooster Bruchstein, Endstein,\n&eGlowstone, und Netherrack. -Guides.Mining.Section.2 = &3Wie funktioniert Super-Brecher?:\n&eMache einen Rechtsklick w\u00E4hrend du eine Spitzhacke in der\n&eHand h\u00E4ltst.\n&eVon nun an hast du ungef\u00E4hr 4 Sekunden um ein mit Bergbau\n&ekompatibles Material abzubauen, daraufhin wird Super-Brecher\n&eaktiviert. -Guides.Mining.Section.3 = &3Was ist Super-Brecher?\n&eSuper-Brecher ist eine F\u00E4higkeit deren Dauer\n&evom Bergbau Skill abh\u00E4ngt. Es verdreifacht die \n&eChance Sch\u00E4tze zu finden und erm\u00F6glicht\n&esofortiges Abbauen kompatibler Materialien. +Guides.Mining.Section.2 = &3Wie funktioniert der Super-Brecher?:\n&eMache einen Rechtsklick w\u00E4hrend du eine Spitzhacke in der\n&eHand h\u00E4ltst.\n&eVon nun an hast du ungef\u00E4hr 4 Sekunden um ein mit Bergbau\n&ekompatibles Material abzubauen, daraufhin wird der Super-Brecher\n&eaktiviert. +Guides.Mining.Section.3 = &3Was ist der Super-Brecher?\n&eSuper-Brecher ist eine F\u00E4higkeit deren Dauer\n&evom Bergbau-Skill abh\u00E4ngt. Es verdreifacht die \n&eChance Sch\u00E4tze zu finden und erm\u00F6glicht\n&esofortiges Abbauen kompatibler Materialien. Guides.Mining.Section.4 = &3Wie benutzt man Z\u00FCndstoff?:\n&eHalte eine Spitzhacke in der Hand, b\u00FCck dich und klicke aus\n&esicherer Entfernung mit der rechten Maustaste auf das TNT.\n&eDas TNT wird sofort explodieren. -Guides.Mining.Section.5 = &3Wie funktioniert Z\u00FCndstoff?\n&eZ\u00FCndstoff ist eine F\u00E4higkeit mit einer Abklingzeit, deren St\u00E4rke\n&evom Level abh\u00E4ngt. Sie erlaubt dir beim Abbauen mit TNT dieses\n&eaus der Ferne zu z\u00FCnden. Z\u00FCndstoff besteht aus 3 Teilen.\n&eErstens dem Sprengmeister mit gr\u00F6\u00DFeren Explosionen\n&eZweitens dem Explosions-Experten, der Schaden von TNT\n&ereduziert.\n&eDie dritte F\u00E4higkeit erh\u00F6ht einfach den Erzertrag und\n&eund reduziert den Schutt. +Guides.Mining.Section.5 = &3Wie funktioniert Z\u00FCndstoff?\n&eZ\u00FCndstoff ist eine F\u00E4higkeit mit einer Abklingzeit, deren St\u00E4rke\n&evom Level abh\u00E4ngt. Sie erlaubt dir beim Abbauen mit TNT dieses\n&eaus der Ferne zu z\u00FCnden. Z\u00FCndstoff besteht aus 3 Teilen.\n&eErstens dem Sprengmeister mit gr\u00F6\u00DFeren Explosionen.\n&eZweitens dem Explosions-Experten, der Schaden von TNT\n&ereduziert.\n&eDie dritte F\u00E4higkeit erh\u00F6ht einfach den Erzertrag\n&eund reduziert den Schutt. Guides.Page.Invalid = Keine g\u00FCltige Seitenzahl! Guides.Page.OutOfRange = Es gibt nur insgesamt {0} Seiten. -Guides.Repair.Section.0 = &3\u00DCber Reparatur:\n&eReparatur erlaub dir an einem Eisenblock Werkzeuge und\n&eWaffen zu reparieren.\n\n&3XP ZUWACHS:\n&eRepariere Werkzeuge am Eisenblockamboss\n&cAchtung: &eDas ist nicht der normale Minecraft Amboss! +Guides.Repair.Section.0 = &3\u00DCber Reparatur:\n&eReparatur erlaubt dir an einem Eisenblock Werkzeuge und\n&eWaffen zu reparieren.\n\n&3XP ZUWACHS:\n&eRepariere Werkzeuge am Eisenblock-Amboss\n&cAchtung: &eDas ist nicht der normale Minecraft Amboss! Guides.Repair.Section.1 = &3Wie kann ich Reparatur verwenden?\n&ePlatziere einen mcMMO Amboss, halte das zu reparierende Item\n&ein der Hand und klicke mit der rechten Maustaste auf ihn. Zum\n&eReparieren ben\u00F6tigst du die Ausgangsmaterialien im Inventar,\n&ediese werden dir im Zuge der Reparatur abgezogen. Guides.Repair.Section.2 = &3Wie funktioniert der Reparatur Meister?\n&eMit dem Reparatur Meister wird dein Werkzeug ein bisschen\n&ebesser als normalerweise repariert.\n&eDer Bonus ist abh\u00E4ngig vom Reparatur Level. -Guides.Repair.Section.3 = &3Wie funktioniert Super Reparatur?\n&eMit Super Reparatur werden ab und zu deine Items\n&edoppelt so gut repariert. -Guides.Repair.Section.4 = &3Wie funktioniert Arkanes Schmieden?\n&eDiese F\u00E4higkeit erm\u00F6glicht dir mit einer gewissen\n&eChance Verzauberungen auf Items zu erhalten.\n&eVerzauberungen k\u00F6nnen erhalten, vermindert werden oder\n&eganz verloren gehen. -Guides.Salvage.Section.0 = &3\u00DCber Verwerten:\n&eMit einem Goldamboss kannst du R\u00FCstungen und\n&eWerkzeuge verwerten.\n\n&3XP ZUWACHS:\n&eVerwerten ist ein vom Angeln und Reparieren abh\u00E4ngiger Skill\n&eSein Level ist die H\u00E4lfte von deren Summe. -Guides.Salvage.Section.1 = &3Wie funktioniert Verwerten?\n&ePlatziere einen Goldamboss und rechtsklicke mit dem Item in\n&eder Hand. Das item wird zerst\u00F6rt und in seine\n&eBestandteile zerlegt.\n\n&eBeispielsweise gibt eine Eisenaxt Eisenbarren. +Guides.Repair.Section.3 = &3Wie funktioniert Super-Reparatur?\n&eMit Super-Reparatur werden ab und zu deine Items\n&edoppelt so gut repariert. +Guides.Repair.Section.4 = &3Wie funktioniert Arkanes Schmieden?\n&eDiese F\u00E4higkeit erm\u00F6glicht dir mit einer gewissen\n&eChance Verzauberungen auf Items zu erhalten.\n&eVerzauberungen k\u00F6nnen erhalten werden, vermindert werden oder\n&eganz verloren gehen. +Guides.Salvage.Section.0 = &3\u00DCber Verwerten:\n&eMit einem Goldamboss kannst du R\u00FCstungen und\n&eWerkzeuge verwerten.\n\n&3XP ZUWACHS:\n&eVerwerten ist ein vom Angeln und Reparieren abh\u00E4ngiger Skill.\n&eSein Level ist die H\u00E4lfte von deren Summe. +Guides.Salvage.Section.1 = &3Wie funktioniert Verwerten?\n&ePlatziere einen Goldamboss und rechtsklicke mit dem Item in\n&eder Hand. Das Item wird zerst\u00F6rt und in seine\n&eBestandteile zerlegt.\n\n&eBeispielsweise gibt eine Eisenaxt Eisenbarren. Guides.Salvage.Section.2 = &3Wie funktioniert Fortgeschrittenes Verwerten?\n&eSobald freigeschaltet, kannst du besch\u00E4digte Items verwerten.\n&eDer Ertrag steigt mit dem Level.\n&eDer Mindestertrag ist immer 1 Item, ansonsten kannst du nicht\n&everwerten. -Guides.Salvage.Section.3 = &3Zur Verbildlichung ein Beispiel:\n&eSagen wir verwerten eine Goldene Spitzhacke mit 80%\n&eHaltbarkeit, bedeutet das, dass wir nur 2 Gold bekommen\n&ek\u00F6nnen (Spitzhacke=3 Goldbarren, also jeder 33,33%\n&eHaltbarkeit) was 66% entspricht. Wenn dein\n&eErtragsprozentsatz unter 66% liegt wirst du keine 2 Barren\n&ebekommen k\u00F6nnen. Wenn sie dar\u00FCber ist, kannst du den\n&e"gesamten Betrag" bekommen, der aus 2 Eisenbarren besteht. +Guides.Salvage.Section.3 = &3Zur Verbildlichung ein Beispiel:\n&eVerwerten wir eine Goldspitzhacke mit 80%\n&eHaltbarkeit, bedeutet das, dass wir nur 2 Gold bekommen\n&ek\u00F6nnen (Spitzhacke=3 Goldbarren, also jeder 33,33%\n&eHaltbarkeit) was 66% entspricht. Wenn dein\n&eErtragsprozentsatz unter 66% liegt wirst du keine 2 Barren\n&ebekommen k\u00F6nnen. Wenn sie dar\u00FCber ist, kannst du den\n&e"gesamten Betrag" bekommen, der aus 2 Eisenbarren besteht. Guides.Salvage.Section.4 = &3Wie funktioniert Arkanes Verwerten?\n&eDiese F\u00E4higkeit erm\u00F6glicht es verzauberte B\u00FCcher beim\n&eVerwerten von verzauberten Items zu bekommen.\n&eVerzauberungen k\u00F6nnen vollkommen oder teilweise extrahiert\n&ewerden.\n&eBei einer teilweisen Extraktion wird das Verzauberungslevel\n&ereduziert. Guides.Smelting.Section.0 = Kommt irgendwann mal... Guides.Swords.Section.0 = &3\u00DCber Schwerter:\n&eDiese F\u00E4higkeit gibt Kampfboni bei Benutzung\n&edes Schwertes.\n\n&3XP ZUWACHS:\n&eVerletze Monster und Spieler mit dem Schwert. -Guides.Swords.Section.1 = &3Wie funktioniert der S\u00E4gezahnschlag?\n&eS\u00E4gezahnschlag ist eine aktive F\u00E4higkeit die du mit Rechtsklick \n&eaktivierst.\n&eMit dieser F\u00E4higkeit kannst du Fl\u00E4chenschaden verteilen. \n&eAu\u00DFerdem blutet das Ziel f\u00FCr kurze Zeit. +Guides.Swords.Section.1 = &3Wie funktioniert der S\u00E4gezahnschlag?\n&eS\u00E4gezahnschlag ist eine aktive F\u00E4higkeit die du mit Rechtsklick \n&eaktivierst.\n&eMit dieser F\u00E4higkeit kannst du Fl\u00E4chenschaden verteilen.\n&eAu\u00DFerdem blutet das Ziel f\u00FCr kurze Zeit. Guides.Swords.Section.2 = &3Wie funktioniert der Gegenangriff?\n&eGegenangriff ist eine aktive F\u00E4higkeit,\n&ebei der Angriffe von Monstern beim Blocken um bis zu 50%\n&edes erhaltenen Schadens reflektiert werden k\u00F6nnen. -Guides.Swords.Section.3 = &3Wie funktioniert Blutung?\n&eBlutung f\u00FCgt den Gegnern alle 2 Sekunden Schaden zu. Das\n&eBluten geht solange bis die F\u00E4higkeit ausl\u00E4uft oder der\n&eGegner stirbt.\n&eDie Dauer der Blutung erh\u00F6ht sich mit dem Schwert Skill. +Guides.Swords.Section.3 = &3Wie funktioniert Blutung?\n&eBlutung f\u00FCgt den Gegnern alle 2 Sekunden Schaden zu. Das\n&eBluten geht solange bis die F\u00E4higkeit ausl\u00E4uft oder der\n&eGegner stirbt.\n&eDie Dauer der Blutung erh\u00F6ht sich mit dem Schwert-Skill. Guides.Taming.Section.0 = &3\u00DCber Z\u00E4hmen:\n&eZ\u00E4hmen gibt dem Spieler diverse Kampfboni beim Kampf mit\n&egez\u00E4hmten W\u00F6lfen.\n\n&3XP ZUWACHS:\n&eUm XP zu bekommen musst du Tiere z\u00E4hmen oder mit\n&edeinen W\u00F6lfen k\u00E4mpfen. -Guides.Taming.Section.1 = &3Wie funktioniert Ruf der Wildnis?\n&eRuf der Wildnis ist eine aktive F\u00E4higkeit die dir erlaubt\n&eeinen Wolf, einen Ozelot oder ein Pferd an deine Seite zu\n&erufen.\n&eDas tust du, indem du Linksklickst w\u00E4hrend du Knochen, Fisch\n&eoder \u00C4pfel in der Hand h\u00E4ltst. -Guides.Taming.Section.2 = &3Wie funktioniert Bestienkunde?\n&eBestienkunde erlaubt es die Haustiere zu inspizieren\n&eHalte einen Knochen in der Hand und klick mit linker Maustaste\n&eauf das Haustier um Bestienkunde zu aktivieren. -Guides.Taming.Section.3 = &3Wie funktioniert Aufschlitzen?\n&eAufschlitzen ist eine passive F\u00E4higkeit die beim Ziel\n&edes Wolfes Blutungen hervorrufen kann. Der Erfolg h\u00E4ngt\n&evom Z\u00E4hmen Level ab. +Guides.Taming.Section.1 = &3Wie funktioniert Ruf der Wildnis?\n&eRuf der Wildnis ist eine aktive F\u00E4higkeit die dir erlaubt\n&eeinen Wolf, einen Ozelot oder ein Pferd an deine Seite zu\n&erufen.\n&eDas tust du, indem du linksklickst w\u00E4hrend du Knochen, Fisch\n&eoder \u00C4pfel in der Hand h\u00E4ltst. +Guides.Taming.Section.2 = &3Wie funktioniert Bestienkunde?\n&eBestienkunde erlaubt es die Haustiere zu inspizieren.\n&eHalte einen Knochen in der Hand und klick mit linker Maustaste\n&eauf das Haustier um Bestienkunde zu aktivieren. +Guides.Taming.Section.3 = &3Wie funktioniert Aufschlitzen?\n&eAufschlitzen ist eine passive F\u00E4higkeit die beim Ziel\n&edes Wolfes Blutungen hervorrufen kann. Der Erfolg h\u00E4ngt\n&evom Z\u00E4hmen-Level ab. Guides.Taming.Section.4 = &3Wie funktionieren gesch\u00E4rfte Klauen?\n&eGesch\u00E4rfte Klauen geben Zusatzschaden in Abh\u00E4ngigkeit\n&evom Z\u00E4hmen Level. Guides.Taming.Section.5 = &3Wie funktioniert Umweltbewusst?\n&eDiese passive F\u00E4higkeit erm\u00F6glich W\u00F6lfen sich zu dir zu\n&eteleportieren wenn sie in die N\u00E4he von Gefahren wie\n&eKakteen/Lava kommen.\n&eZus\u00E4tzlich sind W\u00F6lfe immun gegen Fallschaden. Guides.Taming.Section.6 = &3Wie funktioniert Dicker Pelz?\n&eDiese passive F\u00E4higkeit reduziert Schaden und\n&emacht W\u00F6lfe feuerresistent. Guides.Taming.Section.7 = &3Wie funktioniert Schocksicher?\n&eDiese passive F\u00E4higkeit reduziert den Schaden\n&edurch Explosionen. Guides.Taming.Section.8 = &3Wie funktioniert Schnell-Imbiss?\n&eDiese passive F\u00E4higkeit gibt dem Wolf eine Chance sich zu\n&eerholen wann immer er einen Gegner verletzt. -Guides.Unarmed.Section.0 = &3\u00DCber Unbewaffnet:\n&eMit Unbewaffnet kann der echte Mann endlich mit seinen\n&eF\u00E4usten angemessen zuschlagen.\n\n&3XP ZUWACHS:\n&eK\u00E4mpfe unbewaffnet gegen Monster und andere Spieler -Guides.Unarmed.Section.1 = &3Wie funktioniert Berserker?\n&eBerserker ist eine aktive F\u00E4higkeit die mit Rechtsklick\n&eaktiviert wird.\n&eIm Berserker Modus f\u00FCgst du 50% mehr Schaden zu und\n&ekannst weiche Materiale wie Gras und Erde sofort abbauen. +Guides.Unarmed.Section.0 = &3\u00DCber Unbewaffnet:\n&eMit Unbewaffnet kann der echte Mann endlich mit seinen\n&eF\u00E4usten angemessen zuschlagen.\n\n&3XP ZUWACHS:\n&eK\u00E4mpfe unbewaffnet gegen Monster und andere Spieler. +Guides.Unarmed.Section.1 = &3Wie funktioniert Berserker?\n&eBerserker ist eine aktive F\u00E4higkeit die mit Rechtsklick\n&eaktiviert wird.\n&eIm Berserker-Modus f\u00FCgst du 50% mehr Schaden zu und\n&ekannst weiche Materialien wie Gras und Erde sofort abbauen. Guides.Unarmed.Section.2 = &3Wie funktioniert der Eiserne Arm?\n&eEiserner Arm erh\u00F6ht den Monstern und Spielern mit den\n&eF\u00E4usten zugef\u00FCgten Schaden. Guides.Unarmed.Section.3 = &3Wie funktioniert Pfeilablenkung?\n&ePfeilablenkung ist eine passive F\u00E4higkeit die ab und zu\n&ePfeile von Skeletten und angreifenden Spielern ablenkt.\n&eDiese Pfeile prallen einfach ab und fallen auf den Boden. Guides.Unarmed.Section.4 = &3Wie funktioniert der Eiserne Griff?\n&eEiserner Griff ist eine passive F\u00E4higkeit die Entwaffnung\n&everhindert. Mit h\u00F6herem Level ist es umso einfacher\n&eEntwaffnung zu verhindern. Guides.Unarmed.Section.5 = &3Wie funktioniert Entwaffnen?\n&eDiese passive F\u00E4higkeit erm\u00F6glich es den Gegner zu\n&eentwaffnen, sodass seine Waffe auf den Boden f\u00E4llt. Guides.Usage = Der Befehl ist /{0} ? [Seite] -Guides.Woodcutting.Section.0 = &3\u00DCber Holzf\u00E4ller:\n&eIm Holzf\u00E4llen geht es um das F\u00E4llen von B\u00E4umen.\n\n&3XP ZUWACHS:\n&eDu kriegst XP f\u00FCr das abholzen von Baumst\u00E4mmen. +Guides.Woodcutting.Section.0 = &3\u00DCber Holzf\u00E4ller:\n&eIm Holzf\u00E4llen geht es um das F\u00E4llen von B\u00E4umen.\n\n&3XP ZUWACHS:\n&eDu bekommst XP f\u00FCr das Abholzen von Baumst\u00E4mmen. Guides.Woodcutting.Section.1 = &3Wie funktioniert der Baumf\u00E4ller?\n&eBaumf\u00E4ller ist eine aktive F\u00E4higkeit. Mache mit der Axt in der\n&eHand einen Rechtsklick um sie zu aktivieren. Der Baum\n&ewird sofortig gef\u00E4llt und alle St\u00E4mme abgebaut. Guides.Woodcutting.Section.2 = &3Wie funktioniert Bl\u00E4ttersturm?\n&eBl\u00E4ttersturm ist eine passive F\u00E4higkeit die Bl\u00E4tter\n&ebei Ber\u00FChrung mit der Axt sofortig bricht. Standardm\u00E4\u00DFig\n&ewird diese F\u00E4higkeit bei Level 100 freigeschaltet. Guides.Woodcutting.Section.3 = &3Wie funktionieren Doppel-Drops?\n&eDiese passive F\u00E4higkeit gibt dir ab und zu doppelten\n&eErtrag f\u00FCr jeden Stamm den du f\u00E4llst. @@ -514,46 +514,46 @@ Hardcore.Vampirism.Victim.Failure = &6[mcMMO] &e{0}&7 hat es nicht geschafft Wis Hardcore.Vampirism.Victim.Success = &6[mcMMO] &e{0}&4 hat&9{1}&4 Level von dir gestohlen! Herbalism.Ability.GTe.NeedMore = Du brauchst mehr Samen um Gr\u00FCnes Land zu verbreiten. -Herbalism.Ability.GTh = &a**GR\u00DCNER DAUMEN** -Herbalism.Ability.GTh.Fail = **Gr\u00FCner Daumen GESCHEITERT** -Herbalism.Ability.Lower = &7**Du senkst deine HARKE** -Herbalism.Ability.Ready = &a**Deine HARKE ist bereit** -Herbalism.Ability.ShroomThumb.Fail = **GR\u00DCNE ZEHE GESCHEITERT** +Herbalism.Ability.GTh = &a**Gr\u00FCner Daumen** +Herbalism.Ability.GTh.Fail = **Gr\u00FCner Daumen gescheitert** +Herbalism.Ability.Lower = &7&o**Du senkst deine Harke.** +Herbalism.Ability.Ready = &a&o**Du hebst deine Harke...** +Herbalism.Ability.ShroomThumb.Fail = **Gr\u00FCne Zehe gescheitert** Herbalism.Effect.4 = Gr\u00FCner Daumen Herbalism.HylianLuck = &aHeute ist das Gl\u00FCck von Hyrule mit dir! Herbalism.Listener = Kr\u00E4uterkunde: Herbalism.SkillName = Kr\u00E4uterkunde -Herbalism.Skills.GTe.Off = **Gr\u00FCnes Land ist ausgelaufen** -Herbalism.Skills.GTe.On = &a**Gr\u00FCnes Land AKTIVIERT** +Herbalism.Skills.GTe.Off = &a&o**Gr\u00FCnes Land ist ausgelaufen** +Herbalism.Skills.GTe.On = &a&o**Gr\u00FCnes Land aktiviert** Herbalism.Skills.GTe.Other.Off = {0}s &cGr\u00FCnes Land&a ist &aausgelaufen. Herbalism.Skills.GTe.Other.On = &a{0}&2 benutzte &cGr\u00FCnes Land! Herbalism.Skills.GTe.Refresh = &aDeine &eGr\u00FCnes Land &aF\u00E4higkeit ist wieder bereit! -Herbalism.SubSkill.DoubleDrops.Description = Verdoppelt die normale Ausbeute (Loot) -Herbalism.SubSkill.DoubleDrops.Name = Doppel Drops (Alle Pflanzen) +Herbalism.SubSkill.DoubleDrops.Description = Verdoppelt die normale Ausbeute (Loot). +Herbalism.SubSkill.DoubleDrops.Name = Doppeldrops (Alle Pflanzen) Herbalism.SubSkill.DoubleDrops.Stat = Doppeldrop Chance -Herbalism.SubSkill.FarmersDiet.Description = Erh\u00F6ht Effektivit\u00E4t von geernteter Nahrung +Herbalism.SubSkill.FarmersDiet.Description = Erh\u00F6ht Effektivit\u00E4t von geernteter Nahrung. Herbalism.SubSkill.FarmersDiet.Name = Bauernfr\u00FChst\u00FCck Herbalism.SubSkill.FarmersDiet.Stat = Bauernfr\u00FChst\u00FCck &aRang {0} -Herbalism.SubSkill.GreenTerra.Description = Ernte das Land ab, 3x Drops +Herbalism.SubSkill.GreenTerra.Description = Ernte das Land ab, 3x Drops. Herbalism.SubSkill.GreenTerra.Name = Gr\u00FCnes Land Herbalism.SubSkill.GreenTerra.Stat = Dauer von Gr\u00FCnem Land -Herbalism.SubSkill.GreenThumb.Description = Auto-Saat, s\u00E4ht Weizen wenn abgeerntet -Herbalism.SubSkill.GreenThumb.Description.2 = Bemoost Steinziegel , l\u00E4sst Gras wachsen +Herbalism.SubSkill.GreenThumb.Description = Auto-Saat, s\u00E4ht Weizen wenn abgeerntet. +Herbalism.SubSkill.GreenThumb.Description.2 = Bemoost Steinziegel , l\u00E4sst Gras wachsen. Herbalism.SubSkill.GreenThumb.Name = Gr\u00FCner Daumen Herbalism.SubSkill.GreenThumb.Stat = Gr\u00FCner Daumen Chance Herbalism.SubSkill.GreenThumb.Stat.Extra = Gr\u00FCner Daumen Stufe: &aErnte w\u00E4chst in Stufe &2{0} -Herbalism.SubSkill.HylianLuck.Description = Gibt eine kleine M\u00F6glichkeit, seltene Gegenst\u00E4nde zu finden +Herbalism.SubSkill.HylianLuck.Description = Gibt eine kleine M\u00F6glichkeit, seltene Gegenst\u00E4nde zu finden. Herbalism.SubSkill.HylianLuck.Name = Hylian Gl\u00FCck Herbalism.SubSkill.HylianLuck.Stat = Hylian Gl\u00FCck Chance -Herbalism.SubSkill.ShroomThumb.Description = Verbreite Myzel auf Gras und Erde -Herbalism.SubSkill.ShroomThumb.Name = Pilz Zehe -Herbalism.SubSkill.ShroomThumb.Stat = Pilz Zehe Chance +Herbalism.SubSkill.ShroomThumb.Description = Verbreite Myzel auf Gras und Erde. +Herbalism.SubSkill.ShroomThumb.Name = Pilz-Zehe +Herbalism.SubSkill.ShroomThumb.Stat = Pilz-Zehe Chance Holiday.Anniversary = &9Alles gute zu mcMMO's {0} j\u00E4hrigen Geburtstag!\n&9In Ehren von nossr50 und all den anderen flei\u00DFigen Entwicklern, hier ist eine kleine Feuerwerk Show! Holiday.AprilFools.Levelup = &6{0} ist jetzt Level &a{1}&6! -Inspect.Offline = &cDu hast nicht die Rechte um offline Spieler zu inspizieren! -Inspect.OfflineStats = mcMMO Stats f\u00FCr Offline Spieler &e{0} +Inspect.Offline = &cDu hast nicht die Rechte um Offline-Spieler zu inspizieren! +Inspect.OfflineStats = mcMMO Stats f\u00FCr Offline-Spieler &e{0} Inspect.Stats = &amcMMO Stats f\u00FCr &e{0} Inspect.TooFar = Du bist zu weit entfernt um den Spieler zu inspizieren! @@ -563,7 +563,7 @@ Item.ChimaeraWing.Name = Chimaera Fl\u00FCgel Item.ChimaeraWing.NotEnough = Du ben\u00F6tigst &e{0}&c weitere &6{1}&c! Item.ChimaeraWing.Pass = **CHIMAERA FL\u00DCGEL* Item.FluxPickaxe.Lore.1 = &7Hat eine Chance Erze sofort zu schmelzen. -Item.FluxPickaxe.Lore.2 = &7Ben\u00F6tigt Schmelzen Level {0} oder mehr +Item.FluxPickaxe.Lore.2 = &7Ben\u00F6tigt Schmelzen-Level {0} oder mehr. Item.FluxPickaxe.Name = Schmelzhacke Item.Generic.Wait = &eDu musst noch &6{0}s &ewarten bis du das wieder verwenden kannst. Item.Injured.Wait = &eDu wurdest vor kurzem verletzt und musst noch &6{0}s &ewarten bis du das wieder verwenden kannst. @@ -631,34 +631,34 @@ MOTD.Version = &6[mcMMO] Verwende Version&3{0} MOTD.Version.Overhaul = &6[mcMMO] &3\u00DCberholungs Era&6 - &3{0} MOTD.Website = &6[mcMMO] &a{0}&e - mcMMO Website -Mining.Ability.Locked.0 = GESPERRT bis Skill {0}+ (Z\u00FCndstoff) -Mining.Ability.Locked.1 = GESPERRT bis Skill {0}+ (Sprengmeister) -Mining.Ability.Locked.2 = GESPERRT bis Skill {0}+ (Explosions-Experte) -Mining.Ability.Lower = &7**Du senkst deine SPITZHACKE** -Mining.Ability.Ready = &a**Deine SPITZHACKE ist bereit** +Mining.Ability.Locked.0 = Gesperrt bis Skill {0}+ (Z\u00FCndstoff) +Mining.Ability.Locked.1 = Gesperrt bis Skill {0}+ (Sprengmeister) +Mining.Ability.Locked.2 = Gesperrt bis Skill {0}+ (Explosions-Experte) +Mining.Ability.Lower = &7&o**Du senkst deine Spitzhacke.** +Mining.Ability.Ready = &a&o**Du hebst deine Spitzhacke...** Mining.Blast.Boom = &7**BOOM** Mining.Blast.Cooldown = Mining.Blast.Effect = +{0} Erze {1}x Drops Mining.Blast.Other.On = &a{0}&2 benutzte &cZ\u00FCndstoff! Mining.Blast.Refresh = &aDein &eZ\u00FCndstoff &aist wieder bereit! Mining.Listener = Bergbau: -Mining.SkillName = BERGBAU -Mining.Skills.SuperBreaker.Off = **Super-Brecher ist ausgelaufen** -Mining.Skills.SuperBreaker.On = &a**Super-Brecher AKTIVIERT** +Mining.SkillName = Bergbau +Mining.Skills.SuperBreaker.Off = &a&o**Super-Brecher ist ausgelaufen** +Mining.Skills.SuperBreaker.On = &a&o**Super-Brecher aktiviert** Mining.Skills.SuperBreaker.Other.Off = {0}s &cSuper-Brecher&a ist &aausgelaufen. Mining.Skills.SuperBreaker.Other.On = &a{0}&2 benutzte &cSuper-Brecher! Mining.Skills.SuperBreaker.Refresh = &aDein &eSuper-Brecher &aist wieder bereit! -Mining.SubSkill.BiggerBombs.Description = Erh\u00F6ht den Explosions-Radius +Mining.SubSkill.BiggerBombs.Description = Erh\u00F6ht den Explosions-Radius. Mining.SubSkill.BiggerBombs.Name = Sprengmeister -Mining.SubSkill.BlastMining.Description = Bonus beim Abbaue mit TNT +Mining.SubSkill.BlastMining.Description = Bonus beim Abbauen mit TNT. Mining.SubSkill.BlastMining.Name = Z\u00FCndstoff Mining.SubSkill.BlastMining.Stat = Z\u00FCndstoff:&a Rang {0}/{1} &7({2}) Mining.SubSkill.BlastMining.Stat.Extra = Explosionsradius Bonus: &a+{0} -Mining.SubSkill.DemolitionsExpertise.Description = Reduziert die Verletzung durch TNT Explosionen +Mining.SubSkill.DemolitionsExpertise.Description = Reduziert die Verletzung durch TNT-Explosionen. Mining.SubSkill.DemolitionsExpertise.Name = Explosions-Experte Mining.SubSkill.DemolitionsExpertise.Stat = Explosions-Experte Schadenserh\u00F6hung -Mining.SubSkill.DoubleDrops.Description = Verdoppelt die normale Ausbeute -Mining.SubSkill.DoubleDrops.Name = Doppel Drops +Mining.SubSkill.DoubleDrops.Description = Verdoppelt die normale Ausbeute. +Mining.SubSkill.DoubleDrops.Name = Doppeldrops Mining.SubSkill.DoubleDrops.Stat = Doppeldrop Chance Mining.SubSkill.SuperBreaker.Description = Abbaugeschwindigkeit+, Dreifach-Drop Chance Mining.SubSkill.SuperBreaker.Name = Superbrecher @@ -668,8 +668,8 @@ Notifications.Admin.Format.Others = &6(&amcMMO &3Admin&6) &7{0} Notifications.Admin.Format.Self = &6(&amcMMO&6) &7{0} Notifications.Admin.XPRate.End.Others = {0} &7hat das Bonuserfahrungs-Event beendet Notifications.Admin.XPRate.End.Self = &7Du hast das Bonuserfahrungs-Event beendet. -Notifications.Admin.XPRate.Start.Others = {0} &7hat ein Bonuserfahrungs-Event mit einem Faktor von {1}x gestartet -Notifications.Admin.XPRate.Start.Self = &7Du hast den globalen Erfahrungsraten-Multiplikator auf &6{0}x&7 gesetzt +Notifications.Admin.XPRate.Start.Others = {0} &7hat ein Bonuserfahrungs-Event mit einem Faktor von {1}x gestartet. +Notifications.Admin.XPRate.Start.Self = &7Du hast den globalen Erfahrungsraten-Multiplikator auf &6{0}x&7 gesetzt. Overhaul.Levelup = &l{0} erh\u00F6ht auf &r&a&l{2}&r&f. Overhaul.Name.Acrobatics = Akrobatik @@ -692,16 +692,16 @@ Overhaul.mcMMO.MmoInfo.Wiki = &e[&fLese \u00FCber diesen Skill im Wiki!&e] Overhaul.mcMMO.Url.Wrap.Prefix = &c[| Overhaul.mcMMO.Url.Wrap.Suffix = &c|] -Party.Alliance.Disband = &7Deine Gruppe ist nicht mehr verb\u00FCndet mit &c{0} -Party.Alliance.Formed = &7Deine Gruppe ist jetzt verb\u00FCndet mit &a{0} -Party.Disband = &7Die Gruppe wurde aufgel\u00F6st +Party.Alliance.Disband = &7Deine Gruppe ist nicht mehr verb\u00FCndet mit &c{0}. +Party.Alliance.Formed = &7Deine Gruppe ist jetzt verb\u00FCndet mit &a{0}. +Party.Disband = &7Die Gruppe wurde aufgel\u00F6st. Party.Feature.Alliance = B\u00FCndnisse Party.Feature.Chat = Gruppenchat Party.Feature.Disabled.1 = &cGruppenchat ist noch nicht freigeschaltet. Party.Feature.Disabled.2 = &cGruppenteleport ist noch nicht freigeschaltet. Party.Feature.Disabled.3 = &cGruppenb\u00FCndnisse sind noch nicht freigeschaltet. -Party.Feature.Disabled.4 = &cGruppen Itemteilung ist noch nicht freigeschaltet. -Party.Feature.Disabled.5 = &cGruppen Erfahrungsteilung ist noch nicht freigeschaltet. +Party.Feature.Disabled.4 = &cGruppen-Itemteilung ist noch nicht freigeschaltet. +Party.Feature.Disabled.5 = &cGruppen-Erfahrungsteilung ist noch nicht freigeschaltet. Party.Feature.ItemShare = Itemteilung Party.Feature.Locked.Alliance = Gesperrt bis Gruppenlevel {0} (B\u00FCndnisse) Party.Feature.Locked.Chat = Gesperrt bis Gruppenlevel {0} (Gruppenchat) @@ -713,19 +713,19 @@ Party.Feature.XpShare = Erfahrungsteilung Party.Forbidden = [mcMMO] Gruppen sind in dieser Welt nicht erlaubt! Party.Help.0 = &cDie korrekte Benutzung ist &3{0} [passwort]. Party.Help.1 = &cUm eine Gruppe zu erstellen, nutze &3{0} [gruppenpasswort]. -Party.Help.10 = &cNutze &3{0} &cum Erfahrungsteilung mit Mitgliedern zu aktivieren -Party.Help.2 = &cNutze &3{0} &cf\u00FCr mehr Informationen -Party.Help.3 = &cNutze &3{0} [passwort] &czum beitreten oder &3{1} &czum verlassen -Party.Help.4 = &cUm deine Gruppe zu sperren oder entsperren, nutze &3{0} -Party.Help.5 = &cUm deine Gruppe per Passwort zu sch\u00FCtzen, nutze &3{0} -Party.Help.6 = &cUm einen Spieler aus deiner Gruppe zu entfernen, nutze &3{0} -Party.Help.7 = &cUm die Gruppenleitung auf einen anderen Spieler zu \u00FCbertragen, nutze &3{0} -Party.Help.8 = &cUm deine Gruppe aufzul\u00F6sen, nutze &3{0} -Party.Help.9 = &cNutze &3{0} &cum Items mit deinen Mitgliedern zu teilen -Party.InformedOnJoin = {0} &aist deiner Gruppe beigetreten +Party.Help.10 = &cNutze &3{0} &cum Erfahrungsteilung mit Mitgliedern zu aktivieren. +Party.Help.2 = &cNutze &3{0} &cf\u00FCr mehr Informationen. +Party.Help.3 = &cNutze &3{0} [passwort] &czum beitreten oder &3{1} &czum verlassen. +Party.Help.4 = &cUm deine Gruppe zu sperren oder entsperren, nutze &3{0}. +Party.Help.5 = &cUm deine Gruppe per Passwort zu sch\u00FCtzen, nutze &3{0} . +Party.Help.6 = &cUm einen Spieler aus deiner Gruppe zu entfernen, nutze &3{0} . +Party.Help.7 = &cUm die Gruppenleitung auf einen anderen Spieler zu \u00FCbertragen, nutze &3{0} . +Party.Help.8 = &cUm deine Gruppe aufzul\u00F6sen, nutze &3{0}. +Party.Help.9 = &cNutze &3{0} &cum Items mit deinen Mitgliedern zu teilen. +Party.InformedOnJoin = {0} &aist deiner Gruppe beigetreten. Party.InformedOnNameChange = &6{0} &ahat den Gruppennamen ver\u00E4ndert zu: &f{1} -Party.InformedOnQuit = {0} &ahat deine Gruppe verlassen -Party.InvalidName = &4Das ist kein m\u00F6glicher Gruppenname +Party.InformedOnQuit = {0} &ahat deine Gruppe verlassen. +Party.InvalidName = &4Das ist kein m\u00F6glicher Gruppenname. Party.Invite.Self = &cDu kannst dich nicht selbst einladen! Party.IsLocked = &cDiese Gruppe ist bereits gesperrt! Party.IsntLocked = &cDiese Gruppe ist nicht gesperrt! @@ -734,22 +734,22 @@ Party.ItemShare.Category.Loot = Loot Party.ItemShare.Category.Mining = Bergbau Party.ItemShare.Category.Misc = Verschiedenes Party.ItemShare.Category.Woodcutting = Holzf\u00E4llen -Party.Join.Self = &cDu kannst dich nicht selbst betreten! -Party.LevelUp = Gruppen Level aufgestiegen auf {1}! -Party.Locked = Gruppe ist gesperrt, nur Gruppenleiter darf Spieler einladen. -Party.NotInYourParty = &4{0} ist nicht in deiner Gruppe +Party.Join.Self = &cDu kannst deine eigene Party nicht selbst betreten! +Party.LevelUp = Gruppenlevel aufgestiegen auf {1}! +Party.Locked = Gruppe ist gesperrt, nur der Gruppenleiter darf Spieler einladen. +Party.NotInYourParty = &4{0} ist nicht in deiner Gruppe. Party.NotOnline = &4{0} ist nicht online! Party.NotOwner = &4Du bist nicht der Gruppenleiter. Party.Owner.New = &a{0} ist jetzt der neue Gruppenleiter! Party.Owner.NotLeader = &4Du bist jetzt nicht mehr der Gruppenleiter. Party.Owner.Player = &aDu bist jetzt der Gruppenleiter! Party.Password.Incorrect = &cDieses Passwort ist nicht korrekt. -Party.Password.None = Diese Gruppe ist Passwortgesch\u00FCtzt. +Party.Password.None = Diese Gruppe ist passwortgesch\u00FCtzt. Party.Password.Removed = &aGruppenpasswort wurde entfernt. Party.Password.Set = &aGruppenpasswort ist jetzt: {0} Party.Player.InSameParty = {0} ist bereits in deiner Gruppe! Party.Player.Invalid = Das ist kein m\u00F6glicher Spieler. -Party.PlayerNotInParty = &4{0} ist in keiner Gruppe +Party.PlayerNotInParty = &4{0} ist in keiner Gruppe. Party.Rename.Same = &cDas ist bereits der Name der Gruppe! Party.ShareMode.Equal = Gleiche Teilung Party.ShareMode.None = Keine Teilung @@ -762,7 +762,7 @@ Party.Status.Unlocked = &2(Offen) Party.Target.NotOwner = &4{0} ist nicht der Gruppenleiter. Party.Teleport.Dead = &cDu kannst dich nicht zu einem toten Spieler teleportieren. Party.Teleport.Disabled = &c{0} erlaubt keine Teleportation. -Party.Teleport.Hurt = &cDu wurdest in den letzten {0} Sekunden verletzt und kannst dich daher nciht teleportieren. +Party.Teleport.Hurt = &cDu wurdest in den letzten {0} Sekunden verletzt und kannst dich daher nicht teleportieren. Party.Teleport.Player = &aDu wurdest zu {0} teleportiert. Party.Teleport.Self = &cDu kannst dich nicht zu dir selbst teleportieren! Party.Teleport.Target = &a{0} hat sich zu dir teleportiert. @@ -777,15 +777,15 @@ Perks.Lucky.Bonus = &6 ({0} mit Gl\u00FCcksbonus) Perks.Lucky.Desc = {0} Skills und F\u00E4higkeiten werden um 33.3% \u00F6fter aktiviert. Perks.Lucky.Desc.Login = Bestimmte Skills und F\u00E4higkeiten werden um 33.3% \u00F6fter aktiviert. Perks.Lucky.Name = Gl\u00FCck -Perks.XP.Desc = Erhalte mehr Erfahrung in bestimmen Skills. +Perks.XP.Desc = Erhalte mehr Erfahrung in bestimmten Skills. Perks.XP.Name = Erfahrung -Profile.Loading.FailureNotice = &4[A] &cmcMMO konnte die Spielerdaten von &e{0}&c leider nicht laden. Bitte überprüfe deine Datenbankeinstellungen. &dVersuche: {1}. -Profile.Loading.FailurePlayer = &cmcMMO hat Probleme beim Laden deiner Daten nach &a{0}&c Versuchen. &8Kontaktiere den Serveradmin bezüglich diesem Problem. mcMMO wird weiterhin versuchen, deine Daten zu laden, bis du den Server verlässt. So lange kannst du keine Skillerfahrung sammeln und diese auch nicht nutzen. +Profile.Loading.FailureNotice = &4[A] &cmcMMO konnte die Spielerdaten von &e{0}&c leider nicht laden. Bitte \u00DCberpr\u00FCfe deine Datenbankeinstellungen. &dVersuche: {1}. +Profile.Loading.FailurePlayer = &cmcMMO hat Probleme beim Laden deiner Daten nach &a{0}&c Versuchen. &8Kontaktiere den Serveradmin bez\u00FCglich dieses Problems. mcMMO wird weiterhin versuchen, deine Daten zu laden, bis du den Server verl\u00E4sst. So lange kannst du keine Skillerfahrung sammeln und diese auch nicht nutzen. Profile.Loading.Success = &aDein Profil wurde geladen. Profile.PendingLoad = &cDeine mcMMO Daten wurden noch nicht geladen. -Reminder.Squelched = &7Erinnerung: Du erhälst aktuell keinerlei Benachrichtigungen von mcMMO, um dies zu ändern, nutze den /mcnotify Befehl. Dies ist eine stündliche, automatische Erinnerung. +Reminder.Squelched = &7Erinnerung: Du erh\u00E4lst aktuell keinerlei Benachrichtigungen von mcMMO, um dies zu \u00E4ndern, nutze den /mcnotify Befehl. Dies ist eine st\u00FCndliche, automatische Erinnerung. Repair.Arcane.Downgrade = Zauber-Wert des Gegenstands vermindert. Repair.Arcane.Fail = Der Gegenstands wurde entzaubert. @@ -795,33 +795,33 @@ Repair.Error = &4mcMMO ist beim Versuch dieses Item zu reparieren auf einen Fehl Repair.Listener = Reparatur: Repair.Listener.Anvil = &4Du hast einen Amboss platziert, Ambosse k\u00F6nnen Waffen und R\u00FCstung reparieren. Repair.Pretty.Name = Reparatur -Repair.SkillName = REPARATUR +Repair.SkillName = Reparatur Repair.Skills.Adept = Du ben\u00F6tigst Level &e{0}&c um &e{1} zu reparieren. Repair.Skills.AdeptDiamond = &4Du hast nicht gen\u00FCgend Level um Diamant zu reparieren. Repair.Skills.AdeptGold = &4Du hast nicht gen\u00FCgend Level um Gold zu reparieren. -Repair.Skills.AdeptIron = &4Du hast nicht gen\u00FCgend Level um Eisen zu reparieren -Repair.Skills.AdeptStone = &4Du hast nicht gen\u00FCgend Level um Stein zu reparieren +Repair.Skills.AdeptIron = &4Du hast nicht gen\u00FCgend Level um Eisen zu reparieren. +Repair.Skills.AdeptStone = &4Du hast nicht gen\u00FCgend Level um Stein zu reparieren. Repair.Skills.FeltEasy = &7Das f\u00FChlte sich einfach an. Repair.Skills.FullDurability = &7Dieser Gegenstand hat volle Haltbarkeit. Repair.Skills.StackedItems = &4Du kannst keine gestapelten Gegenst\u00E4nde reparieren. -Repair.SubSkill.ArcaneForging.Description = Repariere magische Gegenst\u00E4nde +Repair.SubSkill.ArcaneForging.Description = Repariere magische Gegenst\u00E4nde. Repair.SubSkill.ArcaneForging.Name = Arkanes Schmieden Repair.SubSkill.ArcaneForging.Stat = Arkanes Schmieden: &eRang {0}/{1} Repair.SubSkill.ArcaneForging.Stat.Extra = &3Arkanes Schmieden Chancen:&7 Erfolg &a{0}&7%, Verlust &c{1}&7% -Repair.SubSkill.DiamondRepair.Description = Repariere Diamant-Werkzeuge & R\u00FCstung -Repair.SubSkill.DiamondRepair.Name = Diamant Reparatur ({0}+ SKILL) -Repair.SubSkill.GoldRepair.Description = Repariere Gold-Werkzeuge & R\u00FCstung -Repair.SubSkill.GoldRepair.Name = Gold Reparatur ({0}+ SKILL) -Repair.SubSkill.IronRepair.Description = Repariere Eisen-Werkzeuge & R\u00FCstung -Repair.SubSkill.IronRepair.Name = Eisen Reparatur ({0}+ SKILL) -Repair.SubSkill.Repair.Description = Repariere Werkzeuge & R\u00FCstung +Repair.SubSkill.DiamondRepair.Description = Repariere Diamant-Werkzeuge & -R\u00FCstung. +Repair.SubSkill.DiamondRepair.Name = Diamant-Reparatur ({0}+ SKILL) +Repair.SubSkill.GoldRepair.Description = Repariere Gold-Werkzeuge & -R\u00FCstung. +Repair.SubSkill.GoldRepair.Name = Gold-Reparatur ({0}+ SKILL) +Repair.SubSkill.IronRepair.Description = Repariere Eisen-Werkzeuge & -R\u00FCstung. +Repair.SubSkill.IronRepair.Name = Eisen-Reparatur ({0}+ SKILL) +Repair.SubSkill.Repair.Description = Repariere Werkzeuge & R\u00FCstung. Repair.SubSkill.Repair.Name = Reparatur -Repair.SubSkill.RepairMastery.Description = Erh\u00F6ht den Reparatur-Wert -Repair.SubSkill.RepairMastery.Name = Reparatur Meister +Repair.SubSkill.RepairMastery.Description = Erh\u00F6ht den Reparatur-Wert. +Repair.SubSkill.RepairMastery.Name = Reparaturmeister Repair.SubSkill.RepairMastery.Stat = Reparaturmeister: &aF\u00FCgt {0} extra Haltbarkeit beim Reparieren hinzu. -Repair.SubSkill.StoneRepair.Description = Repariere Stein-Werkzeuge -Repair.SubSkill.StoneRepair.Name = Stein Reparatur ({0}+ SKILL) -Repair.SubSkill.SuperRepair.Description = Doppelte Effektivit\u00E4t +Repair.SubSkill.StoneRepair.Description = Repariere Stein-Werkzeuge. +Repair.SubSkill.StoneRepair.Name = Stein-Reparatur ({0}+ SKILL) +Repair.SubSkill.SuperRepair.Description = Doppelte Effektivit\u00E4t. Repair.SubSkill.SuperRepair.Name = Super-Reparatur Repair.SubSkill.SuperRepair.Stat = Chance auf Superreparatur @@ -846,7 +846,7 @@ Salvage.Skills.TooDamaged = &4Das Item ist zu besch\u00E4digt um verwertet zu we Salvage.SubSkill.ArcaneSalvage.Description = Extrahiere Verzauberungen aus Items. Salvage.SubSkill.ArcaneSalvage.Name = Magische Bergung Salvage.SubSkill.ArcaneSalvage.Stat = Magische Bergung: &eRank {0}/{1} -Salvage.SubSkill.ScrapCollector.Description = Verschrotte einen Gegenstand, um Materialien zur\u00FCckzugewinnen, eine perfekte Verschrottung erfordert Gl\u00FCck und Geschick. +Salvage.SubSkill.ScrapCollector.Description = Verschrotte einen Gegenstand, um Materialien zur\u00FCckzugewinnen; eine perfekte Verschrottung erfordert Gl\u00FCck und Geschick. Salvage.SubSkill.ScrapCollector.Name = Schrottsammler Salvage.SubSkill.ScrapCollector.Stat = Schrottsammler: &aVerschrotte bis zu &e{0}&a Gegenst\u00E4nde. Hierbei spielt Gl\u00FCck eine gewisse Rolle. Salvage.SubSkill.UnderstandingTheArt.Description = Du w\u00FChlst nicht einfach nur durch den M\u00FCll deines Nachbarn, du k\u00FCmmerst dich auch um die Umwelt! Gibt Boni zu verschiedenen Aspekten der Bergung. @@ -871,11 +871,11 @@ Skills.AbilityGateRequirementFail = &7Du ben\u00F6tigst &e{0}&7 weitere Level in Skills.Cancelled = {0} abgebrochen! Skills.Child = &6(VERWANDTER SKILL) Skills.ChildStats = {0}&a{1} -Skills.ConfirmOrCancel = &aErneuter Rechtsklick zur Best\u00E4tigung &6{0}&a. Linksklick zum abbrechen. +Skills.ConfirmOrCancel = &aErneuter Rechtsklick zur Best\u00E4tigung &6{0}&a. Linksklick zum Abbrechen. Skills.Disarmed = &4Du wurdest entwaffnet! Skills.Header = -----[]&a{0}&c[]----- Skills.MaxXP = Max -Skills.NeedMore = &4Du brauchst mehr &7{0} +Skills.NeedMore = &4Du brauchst mehr &7{0}. Skills.NeedMore.Extra = &4Du ben\u00F6tigst mehr &7{0}{1}! Skills.Overhaul.Header = &c[]=====[]&a {0} &c[]=====[] Skills.Parents = ELTERN @@ -884,22 +884,22 @@ Skills.TooTired = Du bist zu m\u00FCde um diese F\u00E4higkeit zu verwenden. &e( Skills.TooTired.Extra = &6{0} &eSuperf\u00E4higkeit CDs - {1} Skills.TooTired.Named = &7(&6{0}&e {1}s&7) -Smelting.Ability.Locked.0 = GESPERRT bis {0}+ Skill (XP BOOST) -Smelting.Ability.Locked.1 = GESPERRT bis {0}+ Skill (SCHMELZTIEGEL) +Smelting.Ability.Locked.0 = Gesperrt bis {0}+ Skill (XP BOOST) +Smelting.Ability.Locked.1 = Gesperrt bis {0}+ Skill (SCHMELZTIEGEL) Smelting.Effect.4 = Vanilla XP Boost -Smelting.Effect.5 = Erh\u00F6ht die erhaltene Erfahrung beim Schmelzen +Smelting.Effect.5 = Erh\u00F6ht die erhaltene Erfahrung beim Schmelzen. Smelting.Listener = Schmelzen: -Smelting.SkillName = SCHMELZEN -Smelting.SubSkill.FluxMining.Description = M\u00F6glichkeit, Erze direkt beim Abbauen zu Schmelzen +Smelting.SkillName = Schmelzen +Smelting.SubSkill.FluxMining.Description = M\u00F6glichkeit, Erze direkt beim Abbauen zu schmelzen. Smelting.SubSkill.FluxMining.Name = Schmelztiegel Smelting.SubSkill.FluxMining.Stat = Schmelztiegel Chance -Smelting.SubSkill.FuelEfficiency.Description = Erh\u00F6he die Brenndauer des Brennstoffes in Öfen +Smelting.SubSkill.FuelEfficiency.Description = Erh\u00F6he die Brenndauer des Brennstoffes in \u00D6fen. Smelting.SubSkill.FuelEfficiency.Name = Brennstoff Effizienz Smelting.SubSkill.FuelEfficiency.Stat = Brennstoff Effizienz Multiplikator: &e{0}x -Smelting.SubSkill.SecondSmelt.Description = Verdoppelt den Ertrag beim Schmelzen +Smelting.SubSkill.SecondSmelt.Description = Verdoppelt den Ertrag beim Schmelzen. Smelting.SubSkill.SecondSmelt.Name = Extra Schmelzung Smelting.SubSkill.SecondSmelt.Stat = Extra Schmelzung Chance -Smelting.SubSkill.UnderstandingTheArt.Description = M\u00F6glicherweise verbringst du etwas zu viel zeit damit, Erze in H\u00F6hlen zu schmelzen. Gibt Boni zu verschiedenen Aspekten des Bergbaus. +Smelting.SubSkill.UnderstandingTheArt.Description = M\u00F6glicherweise verbringst du etwas zu viel Zeit damit, Erze in H\u00F6hlen zu schmelzen. Gibt Boni zu verschiedenen Aspekten des Bergbaus. Smelting.SubSkill.UnderstandingTheArt.Name = Die Kunst des Bergbaus Smelting.SubSkill.UnderstandingTheArt.Stat = Vanilla Erfahrungsmultiplikator: &e{0}x @@ -908,28 +908,28 @@ Stats.Header.Gathering = &6-=Sammelskills=- Stats.Header.Misc = &6-=Weitere Skills=- Stats.Own.Stats = &aSkill Statistik -Swords.Ability.Lower = &7**Du senkst dein SCHWERT** -Swords.Ability.Ready = &a**Dein SCHWERT ist bereit** -Swords.Combat.Bleeding = &a**GEGNER BLUTET** +Swords.Ability.Lower = &7&o**Du senkst dein Sschwert.** +Swords.Ability.Ready = &a&o**Du hebst dein Schwert...** +Swords.Combat.Bleeding = &a**Gegner blutet** Swords.Combat.Bleeding.Started = &4 Du blutest! Swords.Combat.Bleeding.Stopped = &7Das Bluten hat &aaufgeh\u00F6rt&7! Swords.Combat.Counter.Hit = &4Treffer durch Gegenangriff! -Swords.Combat.Countered = &a**GEGENANGRIFF** +Swords.Combat.Countered = &a**Gegenangriff** Swords.Combat.Rupture.Note = &7INFO: &eEin Tick passiert jede halbe Sekunde! -Swords.Combat.SS.Struck = &4Getroffen von S\u00C4GEZAHNSCHLAG! +Swords.Combat.SS.Struck = &4Getroffen von S\u00E4gezahnschlag! Swords.Effect.4 = S\u00E4gezahnschlag, Blutung+ Swords.Effect.5 = {0} Ticks Blutung Swords.Listener = Schwert: -Swords.SkillName = SCHWERT -Swords.Skills.SS.Off = **S\u00E4gezahnschlag abgenutzt** -Swords.Skills.SS.On = &a**S\u00E4gezahnschlag AKTIVIERT** +Swords.SkillName = Sschwert +Swords.Skills.SS.Off = &a&o**S\u00E4gezahnschlag abgenutzt** +Swords.Skills.SS.On = &a&o**S\u00E4gezahnschlag aktiviert** Swords.Skills.SS.Other.Off = {0}s &cS\u00E4gezahnschlag&a ist &aabgenutzt. Swords.Skills.SS.Other.On = &a{0}&2 benutzte &cS\u00E4gezahnschlag! Swords.Skills.SS.Refresh = &aDein &eS\u00E4gezahnschlag &aist wieder bereit! -Swords.SubSkill.CounterAttack.Description = Reflektiere {0} des Schadens w\u00E4hrend du blockierst +Swords.SubSkill.CounterAttack.Description = Reflektiere {0} des Schadens w\u00E4hrend du blockierst. Swords.SubSkill.CounterAttack.Name = Gegenangriff Swords.SubSkill.CounterAttack.Stat = Gegenangriff Chance -Swords.SubSkill.Rupture.Description = Erteilt einen kr\u00E4ftigen Zeitbasierten Schaden. +Swords.SubSkill.Rupture.Description = Erteilt einen kr\u00E4ftigen zeitbasierten Schaden. Swords.SubSkill.Rupture.Name = Entzweiung Swords.SubSkill.Rupture.Stat = Entzweiungschance Swords.SubSkill.Rupture.Stat.Extra = Entzweiung: &a{0} ticks [{1} Schaden gegen Spieler] [{2} Schaden gegen Tiere und Monster] @@ -941,55 +941,55 @@ Swords.SubSkill.Stab.Name = Erstechen Swords.SubSkill.Stab.Stat = Schaden durch Erstechen Swords.SubSkill.SwordsLimitBreak.Description = \u00DCberschreite deine Grenzen. Swords.SubSkill.SwordsLimitBreak.Name = \u00DCberwindung -Swords.SubSkill.SwordsLimitBreak.Stat = Bonus Schaden durch \u00DCberwindung +Swords.SubSkill.SwordsLimitBreak.Stat = Bonus-Schaden durch \u00DCberwindung Taming.Ability.Bonus.0 = Umweltbewusst -Taming.Ability.Bonus.1 = W\u00F6lfe weichen Gefahren aus +Taming.Ability.Bonus.1 = W\u00F6lfe weichen Gefahren aus. Taming.Ability.Bonus.10 = Heiliger Hund -Taming.Ability.Bonus.11 = Regenerierung auch mit Tr\u00E4nken und Zaubern m\u00F6glich +Taming.Ability.Bonus.11 = Regenerierung auch mit Tr\u00E4nken und Zaubern m\u00F6glich. Taming.Ability.Bonus.2 = Dicker Pelz Taming.Ability.Bonus.3 = 1/{0} Schaden, Feuer-Resistent Taming.Ability.Bonus.4 = Schock-Sicher -Taming.Ability.Bonus.5 = Explosionen f\u00FCgen 1/{0} des normalen Schadens zu +Taming.Ability.Bonus.5 = Explosionen f\u00FCgen 1/{0} des normalen Schadens zu. Taming.Ability.Bonus.6 = Gesch\u00E4rfte Krallen Taming.Ability.Bonus.7 = +{0} Schaden Taming.Ability.Bonus.8 = Schnell-Imbiss -Taming.Ability.Bonus.9 = {0} Chance auf Heilung bei einer Attacke -Taming.Ability.Locked.0 = GESPERRT bis Skill {0}+ (Umweltbewusst) -Taming.Ability.Locked.1 = GESPERRT bis Skill {0}+ (Dicker Pelz) -Taming.Ability.Locked.2 = GESPERRT bis Skill {0}+ (Schock-Sicher) -Taming.Ability.Locked.3 = GESPERRT bis Skill {0}+ (Gesch\u00E4rfte Krallen) -Taming.Ability.Locked.4 = GESPERRT bis Skill {0}+ (Schnell-Imbiss) -Taming.Ability.Locked.5 = GESPERRT bis Skill {0}+ (Heiliger Hund) +Taming.Ability.Bonus.9 = {0} Chance auf Heilung bei einer Attacke. +Taming.Ability.Locked.0 = Gesperrt bis Skill {0}+ (Umweltbewusst) +Taming.Ability.Locked.1 = Gesperrt bis Skill {0}+ (Dicker Pelz) +Taming.Ability.Locked.2 = Gesperrt bis Skill {0}+ (Schock-Sicher) +Taming.Ability.Locked.3 = Gesperrt bis Skill {0}+ (Gesch\u00E4rfte Krallen) +Taming.Ability.Locked.4 = Gesperrt bis Skill {0}+ (Schnell-Imbiss) +Taming.Ability.Locked.5 = Gesperrt bis Skill {0}+ (Heiliger Hund) Taming.Combat.Chance.Gore = Aufschlitzen Chance: &e{0} Taming.Listener = Z\u00E4hmen: -Taming.Listener.Wolf = &8Dein Wolf hastet zu dir zur\u00FCck... +Taming.Listener.Wolf = &8Dein Wolf l\u00E4uft zu dir zur\u00FCck... Taming.SkillName = Z\u00C4HMEN -Taming.SubSkill.BeastLore.Description = Knochenschlag inspiziert W\u00F6lfe und Ozelots +Taming.SubSkill.BeastLore.Description = Knochenschlag inspiziert W\u00F6lfe und Ozelots. Taming.SubSkill.BeastLore.Name = Bestienkunde -Taming.SubSkill.CallOfTheWild.Description = Beschw\u00F6re ein Tier an deine Seite +Taming.SubSkill.CallOfTheWild.Description = Beschw\u00F6re ein Tier an deine Seite. Taming.SubSkill.CallOfTheWild.Description.2 = &7RdW: B\u00FCcken und Linksklick mit {0} {1} (Ozelot), {2} {3} (Wolf), {4} {5} (Pferd) Taming.SubSkill.CallOfTheWild.Name = Ruf der Wildnis -Taming.SubSkill.EnvironmentallyAware.Description = Kaktus/Lava-Furcht, Immun gegen Fall-Schaden +Taming.SubSkill.EnvironmentallyAware.Description = Kaktus/Lava-Furcht, Immun gegen Fallschaden Taming.SubSkill.EnvironmentallyAware.Name = Umweltbewusst -Taming.SubSkill.FastFoodService.Description = Chance auf Heilung bei Attacke (Wolf) +Taming.SubSkill.FastFoodService.Description = Chance auf Heilung bei Attacke (Wolf). Taming.SubSkill.FastFoodService.Name = Schnell-Imbiss -Taming.SubSkill.Gore.Description = Kritische Treffer verursachen Blutung +Taming.SubSkill.Gore.Description = Kritische Treffer verursachen Blutung. Taming.SubSkill.Gore.Name = Aufschlitzen -Taming.SubSkill.HolyHound.Description = Heilung durch Magie und Tr\u00E4nke +Taming.SubSkill.HolyHound.Description = Heilung durch Magie und Tr\u00E4nke. Taming.SubSkill.HolyHound.Name = Heiliger Hund Taming.SubSkill.Pummel.Description = Deine W\u00F6lfe haben eine Chance, Gegner zur\u00FCck zu schlagen. Taming.SubSkill.Pummel.Name = Pummel Taming.SubSkill.Pummel.TargetMessage = Du wurdest von einem Wolf zur\u00FCckgeschlagen! Taming.SubSkill.SharpenedClaws.Description = Schadens-Bonus Taming.SubSkill.SharpenedClaws.Name = Gesch\u00E4rfte Krallen -Taming.SubSkill.ShockProof.Description = Reduktion von Explosions-Schaden +Taming.SubSkill.ShockProof.Description = Reduktion von Explosions-Schaden. Taming.SubSkill.ShockProof.Name = Schock-Sicher -Taming.SubSkill.ThickFur.Description = Verminderter Schaden, Feuer-Resistent +Taming.SubSkill.ThickFur.Description = Verminderter Schaden, Feuer-Resistenz Taming.SubSkill.ThickFur.Name = Dicker Pelz -Taming.Summon.COTW.BreedingDisallowed = &a(Ruf der Wildnis) &cBeschworene Tiere k\u00F6nnen nicht gez\u00FCchtet werden. +Taming.Summon.COTW.BreedingDisallowed = &a(Ruf der Wildnis) &cBeschworene Tiere k\u00F6nnen nicht gez\u00FCchtet werden. Taming.Summon.COTW.Limit = &a(Ruf der Wildnis) &7Du kannst immer nur jeweils &c{0} &7beschworene &7{1} Tiere zugleich besitzen. -Taming.Summon.COTW.NeedMoreItems = &a(Ruf der Wildnis) &7Du ben\u00F6tigst &e{0}&7 mehr von &3{1} +Taming.Summon.COTW.NeedMoreItems = &a(Ruf der Wildnis) &7Du ben\u00F6tigst &e{0}&7 mehr von &3{1}. Taming.Summon.COTW.Removed = &a(Ruf der Wildnis) &7Dein beschworenes &6{0}&7 Tier hat sich aus dem Staub gemacht. Taming.Summon.COTW.Success.WithLifespan = &a(Ruf der Wildnis) &7Du hast erfolgreich ein &6{0}&7 beschworen und es wird &6{1}&7 Sekunden lang bleiben. Taming.Summon.COTW.Success.WithoutLifespan = &a(Ruf der Wildnis) &7Du hast ein &6{0}&7 beschworen. @@ -1003,30 +1003,30 @@ Unarmed.Ability.Bonus.0 = Eiserner Arm Unarmed.Ability.Bonus.1 = +{0} Schadens-Bonus Unarmed.Ability.IronGrip.Attacker = Dein Gegner hat einen eisernen Griff! Unarmed.Ability.IronGrip.Defender = &aDein eiserner Griff hat dich vor Entwaffnung gesch\u00FCtzt! -Unarmed.Ability.Lower = &7**Du senkst deine F\u00C4USTE** -Unarmed.Ability.Ready = &a**Deine F\u00C4USTE sind bereit** +Unarmed.Ability.Lower = &7&o**Du senkst deine F\u00E4uste.** +Unarmed.Ability.Ready = &a&o**Du hebste deine F\u00E4uste...** Unarmed.Listener = Faustkampf: Unarmed.SkillName = Faustkampf Unarmed.Skills.Berserk.Off = **Berserker ausgelaufen** -Unarmed.Skills.Berserk.On = &a**Berserker AKTIVIERT** -Unarmed.Skills.Berserk.Other.Off = {0}s &cBerserker&a ist &aausgelaufen +Unarmed.Skills.Berserk.On = &a**Berserker aktiviertT** +Unarmed.Skills.Berserk.Other.Off = {0}s &cBerserker&a ist &aausgelaufen. Unarmed.Skills.Berserk.Other.On = &a{0}&2 benutzte &cBerserker! Unarmed.Skills.Berserk.Refresh = &aDein &eBerserker &aist wieder bereit! -Unarmed.SubSkill.ArrowDeflect.Description = Lenkt Pfeile ab +Unarmed.SubSkill.ArrowDeflect.Description = Lenkt Pfeile ab. Unarmed.SubSkill.ArrowDeflect.Name = Pfeil-Ablenkung Unarmed.SubSkill.ArrowDeflect.Stat = Pfeil-Ablenkung Chance -Unarmed.SubSkill.Berserk.Description = +50% Schaden, Zerbricht weiche Materialien +Unarmed.SubSkill.Berserk.Description = +50% Schaden, zerbricht weiche Materialien. Unarmed.SubSkill.Berserk.Name = Berserker Unarmed.SubSkill.Berserk.Stat = Berserker L\u00E4nge -Unarmed.SubSkill.BlockCracker.Description = Durchbreche Stein mit deinen F\u00E4usten +Unarmed.SubSkill.BlockCracker.Description = Durchbreche Stein mit deinen F\u00E4usten. Unarmed.SubSkill.BlockCracker.Name = Schwarzgurt -Unarmed.SubSkill.Disarm.Description = L\u00E4sst Gegenstand aus der Hand des Feindes fallen +Unarmed.SubSkill.Disarm.Description = L\u00E4sst Gegenstand aus der Hand des Feindes fallen. Unarmed.SubSkill.Disarm.Name = Entwaffnen Unarmed.SubSkill.Disarm.Stat = Entwaffnen Chance -Unarmed.SubSkill.IronGrip.Description = Sch\u00FCtzt dich davor, entwaffnet zu werden -Unarmed.SubSkill.IronGrip.Name = Eisen Griff -Unarmed.SubSkill.IronGrip.Stat = Eisen Griff Chance -Unarmed.SubSkill.SteelArmStyle.Description = Verst\u00E4rkt deinen Arm mit der Zeit +Unarmed.SubSkill.IronGrip.Description = Sch\u00FCtzt dich davor, entwaffnet zu werden. +Unarmed.SubSkill.IronGrip.Name = Eiserner Griff +Unarmed.SubSkill.IronGrip.Stat = Eiserner Griff Chance +Unarmed.SubSkill.SteelArmStyle.Description = Verst\u00E4rkt deinen Arm mit der Zeit. Unarmed.SubSkill.SteelArmStyle.Name = St\u00E4hlerner Arm Unarmed.SubSkill.UnarmedLimitBreak.Description = Durchbreche deine Grenzen! Unarmed.SubSkill.UnarmedLimitBreak.Name = \u00DCberwindung @@ -1036,34 +1036,34 @@ UpdateChecker.NewAvailable = Eine neue Version von mcMMO ist auf Spigot erh\u00E UpdateChecker.Outdated = Du verwendest eine veraltete mcMMO Version! Woodcutting.Ability.0 = Bl\u00E4ttersturm -Woodcutting.Ability.1 = Bl\u00E4st Bl\u00E4tter davon -Woodcutting.Ability.Locked.0 = GESPERRT bis Skill {0}+ (Bl\u00E4ttersturm) +Woodcutting.Ability.1 = Bl\u00E4st Bl\u00E4tter davon. +Woodcutting.Ability.Locked.0 = Gesperrt bis Skill {0}+ (Bl\u00E4ttersturm) Woodcutting.Listener = Holzf\u00E4llen: Woodcutting.SkillName = Holzf\u00E4llen -Woodcutting.Skills.TreeFeller.Off = **Baumf\u00E4ller abgelaufen** -Woodcutting.Skills.TreeFeller.On = &a**Baumf\u00E4ller AKTIVIERT** -Woodcutting.Skills.TreeFeller.Other.Off = {0}s &cBaumf\u00E4ller&a ist &aabgelaufen +Woodcutting.Skills.TreeFeller.Off = &a&o**Baumf\u00E4ller abgelaufen** +Woodcutting.Skills.TreeFeller.On = &a&o**Baumf\u00E4ller aktiviert** +Woodcutting.Skills.TreeFeller.Other.Off = {0}s &cBaumf\u00E4ller&a ist &aabgelaufen. Woodcutting.Skills.TreeFeller.Other.On = &a{0}&2 benutzte &cBaumf\u00E4ller! Woodcutting.Skills.TreeFeller.Refresh = &aDein &eBaumf\u00E4ller &aist wieder bereit! Woodcutting.Skills.TreeFeller.Splinter = Deine Axt zersplittert in tausend kleine Teile! Woodcutting.Skills.TreeFeller.Threshold = Dieser Baum ist zu gro\u00DF! -Woodcutting.SubSkill.BarkSurgeon.Description = Erhalte n\u00FCtzliche Ressourcen beim Entrinden von B\u00E4umen +Woodcutting.SubSkill.BarkSurgeon.Description = Erhalte n\u00FCtzliche Ressourcen beim Entrinden von B\u00E4umen. Woodcutting.SubSkill.BarkSurgeon.Name = Rindenchirurg -Woodcutting.SubSkill.HarvestLumber.Description = Verdoppelt die Ausbeute -Woodcutting.SubSkill.HarvestLumber.Name = Doppel Drops +Woodcutting.SubSkill.HarvestLumber.Description = Verdoppelt die Ausbeute. +Woodcutting.SubSkill.HarvestLumber.Name = Doppeldrops Woodcutting.SubSkill.HarvestLumber.Stat = Doppeldrop Chance -Woodcutting.SubSkill.KnockOnWood.Description = Zus\u00E4tliche Drops durch Baumf\u00E4ller +Woodcutting.SubSkill.KnockOnWood.Description = Zus\u00E4tliche Drops durch Baumf\u00E4ller. Woodcutting.SubSkill.KnockOnWood.Loot.Normal = Standard-Loot von B\u00E4umen Woodcutting.SubSkill.KnockOnWood.Loot.Rank2 = Standard-Loot von B\u00E4umen und Erfahrungspunkte Woodcutting.SubSkill.KnockOnWood.Name = Auf Holz geklopft Woodcutting.SubSkill.KnockOnWood.Stat = Auf Holz geklopft -Woodcutting.SubSkill.LeafBlower.Description = Bl\u00E4st Bl\u00E4tter davon +Woodcutting.SubSkill.LeafBlower.Description = Bl\u00E4st Bl\u00E4tter davon. Woodcutting.SubSkill.LeafBlower.Name = Bl\u00E4ttersturm -Woodcutting.SubSkill.NaturesBounty.Description = Erhalte Erfahrung von der Natur +Woodcutting.SubSkill.NaturesBounty.Description = Erhalte Erfahrung von der Natur. Woodcutting.SubSkill.NaturesBounty.Name = Naturwunder Woodcutting.SubSkill.Splinter.Description = F\u00E4lle B\u00E4ume effizienter. Woodcutting.SubSkill.Splinter.Name = Splitter -Woodcutting.SubSkill.TreeFeller.Description = L\u00E4sst B\u00E4ume explodieren +Woodcutting.SubSkill.TreeFeller.Description = L\u00E4sst B\u00E4ume explodieren. Woodcutting.SubSkill.TreeFeller.Name = Baumf\u00E4ller Woodcutting.SubSkill.TreeFeller.Stat = Baumf\u00E4ller L\u00E4nge diff --git a/src/test/java/com/gmail/nossr50/util/blockmeta/ChunkStoreTest.java b/src/test/java/com/gmail/nossr50/util/blockmeta/ChunkStoreTest.java index 450cd7222..99e61dbe5 100644 --- a/src/test/java/com/gmail/nossr50/util/blockmeta/ChunkStoreTest.java +++ b/src/test/java/com/gmail/nossr50/util/blockmeta/ChunkStoreTest.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.util.blockmeta; import com.gmail.nossr50.TestUtil; +import com.gmail.nossr50.util.Misc; import com.google.common.io.Files; import org.bukkit.Bukkit; import org.bukkit.World; @@ -22,7 +23,7 @@ import static org.mockito.Mockito.mock; * Could be a lot better. But some tests are better than none! Tests the major things, still kinda unit-testy. Verifies that the serialization isn't completely broken. */ @RunWith(PowerMockRunner.class) -@PrepareForTest(Bukkit.class) +@PrepareForTest({ Bukkit.class, Misc.class }) public class ChunkStoreTest { private static File tempDir; @BeforeClass @@ -76,6 +77,34 @@ public class ChunkStoreTest { assertEqual(original, deserialized); } + @Test + public void testNegativeWorldMin() throws IOException { + PowerMockito.mockStatic(Misc.class); + Mockito.when(Misc.getWorldMinCompat(mockWorld)).thenReturn(-64); + + BitSetChunkStore original = new BitSetChunkStore(mockWorld, 1, 2); + original.setTrue(14, -32, 12); + original.setTrue(14, -64, 12); + original.setTrue(13, -63, 12); + byte[] serializedBytes = serializeChunkstore(original); + ChunkStore deserialized = BitSetChunkStore.Serialization.readChunkStore(new DataInputStream(new ByteArrayInputStream(serializedBytes))); + assertEqual(original, deserialized); + } + + @Test + public void testNegativeWorldMinUpgrade() throws IOException { + BitSetChunkStore original = new BitSetChunkStore(mockWorld, 1, 2); + original.setTrue(14, 1, 12); + original.setTrue(14, 2, 12); + original.setTrue(13, 3, 12); + byte[] serializedBytes = serializeChunkstore(original); + + PowerMockito.mockStatic(Misc.class); + Mockito.when(Misc.getWorldMinCompat(mockWorld)).thenReturn(-64); + ChunkStore deserialized = BitSetChunkStore.Serialization.readChunkStore(new DataInputStream(new ByteArrayInputStream(serializedBytes))); + assertEqualIgnoreMinMax(original, deserialized); + } + @Test public void testChunkCoords() throws IOException { for (int x = -96; x < 0; x++) { @@ -175,14 +204,25 @@ public class ChunkStoreTest { } private void assertEqual(ChunkStore expected, ChunkStore actual) + { + Assert.assertEquals(expected.getChunkMin(), actual.getChunkMin()); + Assert.assertEquals(expected.getChunkMax(), actual.getChunkMax()); + assertEqualIgnoreMinMax(expected, actual); + } + + private void assertEqualIgnoreMinMax(ChunkStore expected, ChunkStore actual) { Assert.assertEquals(expected.getChunkX(), actual.getChunkX()); Assert.assertEquals(expected.getChunkZ(), actual.getChunkZ()); Assert.assertEquals(expected.getWorldId(), actual.getWorldId()); - for (int y = 0; y < 256; y++) + for (int y = Math.min(actual.getChunkMin(), expected.getChunkMin()); y < Math.max(actual.getChunkMax(), expected.getChunkMax()); y++) + { + if (expected.getChunkMin() > y || actual.getChunkMin() > y || expected.getChunkMax() <= y || actual.getChunkMax() <= y) + continue; // Ignore for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) Assert.assertTrue(expected.isTrue(x, y, z) == actual.isTrue(x, y, z)); + } } private static byte[] serializeChunkstore(@NotNull ChunkStore chunkStore) throws IOException { @@ -231,6 +271,16 @@ public class ChunkStoreTest { return cz; } + @Override + public int getChunkMin() { + return 0; + } + + @Override + public int getChunkMax() { + return store[0][0].length; + } + @Override public @NotNull UUID getWorldId() { return worldUid;