Clean up some of our messes.

This commit is contained in:
GJ 2014-01-20 13:58:40 -08:00
parent c6ea32f0b0
commit 43e2c813d1
47 changed files with 133 additions and 225 deletions

View File

@ -112,11 +112,7 @@ public abstract class ExperienceCommand implements TabExecutor {
protected abstract void handlePlayerMessageSkill(Player player, int value, SkillType skill); protected abstract void handlePlayerMessageSkill(Player player, int value, SkillType skill);
private boolean validateArguments(CommandSender sender, String skillName, String value) { private boolean validateArguments(CommandSender sender, String skillName, String value) {
if (CommandUtils.isInvalidInteger(sender, value) || (!skillName.equalsIgnoreCase("all") && CommandUtils.isInvalidSkill(sender, skillName))) { return !(CommandUtils.isInvalidInteger(sender, value) || (!skillName.equalsIgnoreCase("all") && CommandUtils.isInvalidSkill(sender, skillName)));
return false;
}
return true;
} }
protected static void handleSenderMessage(CommandSender sender, String playerName, SkillType skill) { protected static void handleSenderMessage(CommandSender sender, String playerName, SkillType skill) {

View File

@ -134,11 +134,7 @@ public class SkillresetCommand implements TabExecutor {
} }
private boolean validateArguments(CommandSender sender, String skillName) { private boolean validateArguments(CommandSender sender, String skillName) {
if (CommandUtils.isInvalidSkill(sender, skillName) && !skillName.equalsIgnoreCase("all")) { return !(CommandUtils.isInvalidSkill(sender, skillName) && !skillName.equalsIgnoreCase("all"));
return false;
}
return true;
} }
protected static void handleSenderMessage(CommandSender sender, String playerName, SkillType skill) { protected static void handleSenderMessage(CommandSender sender, String playerName, SkillType skill) {

View File

@ -1,9 +1,6 @@
package com.gmail.nossr50.commands.party; package com.gmail.nossr50.commands.party;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -220,13 +217,7 @@ public class PartyCommand implements TabExecutor {
} }
private String[] extractArgs(String[] args) { private String[] extractArgs(String[] args) {
String[] newArgs = new String[args.length - 1]; return Arrays.copyOfRange(args, 1, args.length - 1);
for (int i = 1; i < args.length; i++) {
newArgs[i - 1] = args[i];
}
return newArgs;
} }
private boolean isItemShareCategory(String category) { private boolean isItemShareCategory(String category) {

View File

@ -47,7 +47,7 @@ public class PartyInfoCommand implements CommandExecutor {
status.append(LocaleLoader.getString("Commands.Party.Status", party.getName(), LocaleLoader.getString("Party.Status." + (party.isLocked() ? "Locked" : "Unlocked")), party.getLevel())); status.append(LocaleLoader.getString("Commands.Party.Status", party.getName(), LocaleLoader.getString("Party.Status." + (party.isLocked() ? "Locked" : "Unlocked")), party.getLevel()));
if (!party.hasReachedLevelCap()) { if (!party.hasReachedLevelCap()) {
status.append(" (" + party.getXpToLevelPercentage() + ")"); status.append(" (").append(party.getXpToLevelPercentage()).append(")");
} }
player.sendMessage(status.toString()); player.sendMessage(status.toString());
@ -80,11 +80,7 @@ public class PartyInfoCommand implements CommandExecutor {
} }
private boolean isUnlockedFeature(Party party, PartyFeature partyFeature) { private boolean isUnlockedFeature(Party party, PartyFeature partyFeature) {
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(partyFeature)) { return party.getLevel() >= Config.getInstance().getPartyFeatureUnlockLevel(partyFeature);
return false;
}
return true;
} }
private void displayShareModeInfo(Player player, Party party) { private void displayShareModeInfo(Player player, Party party) {

View File

@ -38,7 +38,7 @@ public class PartyItemShareCommand implements CommandExecutor {
return true; return true;
case 3: case 3:
boolean toggle = false; boolean toggle;
if (CommandUtils.shouldEnableToggle(args[2])) { if (CommandUtils.shouldEnableToggle(args[2])) {
toggle = true; toggle = true;

View File

@ -93,7 +93,7 @@ public class McrankCommand implements TabExecutor {
} }
boolean useBoard = (sender instanceof Player) && (Config.getInstance().getRankUseBoard()); boolean useBoard = (sender instanceof Player) && (Config.getInstance().getRankUseBoard());
boolean useChat = useBoard ? Config.getInstance().getRankUseChat() : true; boolean useChat = !useBoard || Config.getInstance().getRankUseChat();
new McrankCommandAsyncTask(playerName, sender, useBoard, useChat).runTaskAsynchronously(mcMMO.p); new McrankCommandAsyncTask(playerName, sender, useBoard, useChat).runTaskAsynchronously(mcMMO.p);
} }

View File

@ -99,7 +99,7 @@ public class MctopCommand implements TabExecutor {
private void display(int page, SkillType skill, CommandSender sender) { private void display(int page, SkillType skill, CommandSender sender) {
boolean useBoard = (sender instanceof Player) && (Config.getInstance().getTopUseBoard()); boolean useBoard = (sender instanceof Player) && (Config.getInstance().getTopUseBoard());
boolean useChat = useBoard ? Config.getInstance().getTopUseChat() : true; boolean useChat = !useBoard || Config.getInstance().getTopUseChat();
new MctopCommandAsyncTask(page, skill, sender, useBoard, useChat).runTaskAsynchronously(mcMMO.p); new MctopCommandAsyncTask(page, skill, sender, useBoard, useChat).runTaskAsynchronously(mcMMO.p);
} }

View File

@ -4,6 +4,7 @@ import java.text.DecimalFormat;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import com.gmail.nossr50.util.Motd;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -87,8 +88,7 @@ public abstract class SkillCommand implements TabExecutor {
player.sendMessage(LocaleLoader.getString("Skills.Header", LocaleLoader.getString("Effects.Effects"))); player.sendMessage(LocaleLoader.getString("Skills.Header", LocaleLoader.getString("Effects.Effects")));
if (isLucky) { if (isLucky) {
String perkPrefix = LocaleLoader.getString("MOTD.PerksPrefix"); player.sendMessage(Motd.PERK_PREFIX + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.Lucky.Name"), LocaleLoader.getString("Perks.Lucky.Desc", skillName)));
player.sendMessage(perkPrefix + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.Lucky.Name"), LocaleLoader.getString("Perks.Lucky.Desc", skillName)));
} }
for (String message : effectMessages) { for (String message : effectMessages) {

View File

@ -56,7 +56,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
try { try {
in = new BufferedReader(new FileReader(usersFilePath)); in = new BufferedReader(new FileReader(usersFilePath));
StringBuilder writer = new StringBuilder(); StringBuilder writer = new StringBuilder();
String line = ""; String line;
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {
String[] character = line.split(":"); String[] character = line.split(":");
@ -111,7 +111,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
try { try {
in = new BufferedReader(new FileReader(usersFilePath)); in = new BufferedReader(new FileReader(usersFilePath));
StringBuilder writer = new StringBuilder(); StringBuilder writer = new StringBuilder();
String line = ""; String line;
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {
String[] character = line.split(":"); String[] character = line.split(":");
@ -173,7 +173,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
try { try {
in = new BufferedReader(new FileReader(usersFilePath)); in = new BufferedReader(new FileReader(usersFilePath));
StringBuilder writer = new StringBuilder(); StringBuilder writer = new StringBuilder();
String line = ""; String line;
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {
// Write out the same file but when we get to the player we want to remove, we skip his line. // Write out the same file but when we get to the player we want to remove, we skip his line.
@ -390,8 +390,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
continue; continue;
} }
PlayerProfile p = loadFromLine(character); return loadFromLine(character);
return p;
} }
// Didn't find the player, create a new one // Didn't find the player, create a new one
@ -515,7 +514,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
synchronized (fileWritingLock) { synchronized (fileWritingLock) {
try { try {
in = new BufferedReader(new FileReader(usersFilePath)); in = new BufferedReader(new FileReader(usersFilePath));
String line = ""; String line;
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {
String[] data = line.split(":"); String[] data = line.split(":");
@ -594,7 +593,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
try { try {
in = new BufferedReader(new FileReader(usersFilePath)); in = new BufferedReader(new FileReader(usersFilePath));
StringBuilder writer = new StringBuilder(); StringBuilder writer = new StringBuilder();
String line = ""; String line;
HashSet<String> players = new HashSet<String>(); HashSet<String> players = new HashSet<String>();
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {

View File

@ -195,7 +195,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
if (checkConnected()) { if (checkConnected()) {
String query = skill == null ? "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing+alchemy" : skill.name().toLowerCase(); String query = skill == null ? "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing+alchemy" : skill.name().toLowerCase();
ResultSet resultSet = null; ResultSet resultSet;
PreparedStatement statement = null; PreparedStatement statement = null;
try { try {
@ -448,16 +448,16 @@ public final class SQLDatabaseManager implements DatabaseManager {
+ "JOIN " + tablePrefix + "huds h ON (u.id = h.user_id) " + "JOIN " + tablePrefix + "huds h ON (u.id = h.user_id) "
+ "WHERE u.user = ?"); + "WHERE u.user = ?");
List<String> usernames = getStoredUsers(); List<String> usernames = getStoredUsers();
ResultSet result = null; ResultSet resultSet;
int convertedUsers = 0; int convertedUsers = 0;
long startMillis = System.currentTimeMillis(); long startMillis = System.currentTimeMillis();
for (String playerName : usernames) { for (String playerName : usernames) {
statement.setString(1, playerName); statement.setString(1, playerName);
try { try {
result = statement.executeQuery(); resultSet = statement.executeQuery();
result.next(); resultSet.next();
destination.saveUser(loadFromResult(playerName, result)); destination.saveUser(loadFromResult(playerName, resultSet));
result.close(); resultSet.close();
} }
catch (SQLException e) { catch (SQLException e) {
// Ignore // Ignore
@ -798,7 +798,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
break; break;
} }
ResultSet resultSet = null; ResultSet resultSet;
HashMap<Integer, ArrayList<String>> rows = new HashMap<Integer, ArrayList<String>>(); HashMap<Integer, ArrayList<String>> rows = new HashMap<Integer, ArrayList<String>>();
PreparedStatement statement = null; PreparedStatement statement = null;
@ -984,7 +984,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
int result = -1; int result = -1;
if (checkConnected()) { if (checkConnected()) {
ResultSet resultSet = null; ResultSet resultSet;
try { try {
resultSet = statement.executeQuery(); resultSet = statement.executeQuery();

View File

@ -13,4 +13,4 @@ public enum FormulaType {
return UNKNOWN; return UNKNOWN;
} }
} }
}; }

View File

@ -310,7 +310,7 @@ public class Party {
} }
if (!nearMembers.contains(member) && !playerName.equalsIgnoreCase(memberName)) { if (!nearMembers.contains(member) && !playerName.equalsIgnoreCase(memberName)) {
memberList.append(ChatColor.ITALIC + ""); memberList.append(ChatColor.ITALIC).append("");
} }
memberList.append(memberName).append(ChatColor.RESET).append(" "); memberList.append(memberName).append(ChatColor.RESET).append(" ");

View File

@ -45,10 +45,7 @@ public enum PartyFeature {
return false; return false;
} }
if (Permissions.partySubcommand(player, partySubCommandType)) {
return true;
}
return false; return Permissions.partySubcommand(player, partySubCommandType);
} }
} }

View File

@ -22,4 +22,4 @@ public enum ShareMode {
return null; return null;
} }
} }
}; }

View File

@ -725,12 +725,12 @@ public class McMMOPlayer {
switch (mode) { switch (mode) {
case ADMIN: case ADMIN:
adminChatMode = !adminChatMode; adminChatMode = !adminChatMode;
partyChatMode = adminChatMode ? false : partyChatMode; partyChatMode = !adminChatMode && partyChatMode;
return; return;
case PARTY: case PARTY:
partyChatMode = !partyChatMode; partyChatMode = !partyChatMode;
adminChatMode = partyChatMode ? false : adminChatMode; adminChatMode = !partyChatMode && adminChatMode;
return; return;
default: default:

View File

@ -17,4 +17,4 @@ public enum Rarity {
return COMMON; return COMMON;
} }
} }
}; }

View File

@ -79,7 +79,8 @@ public class MetricsManager {
if (version.contains("-")) { if (version.contains("-")) {
String majorVersion = version.substring(0, version.indexOf("-")); String majorVersion = version.substring(0, version.indexOf("-"));
String subVersion = ""; String subVersion;
if (isOfficialBuild) { if (isOfficialBuild) {
int startIndex = version.indexOf("-"); int startIndex = version.indexOf("-");
if (version.substring(startIndex + 1).contains("-")) { if (version.substring(startIndex + 1).contains("-")) {
@ -96,9 +97,6 @@ public class MetricsManager {
version = majorVersion + "~=~" + subVersion; version = majorVersion + "~=~" + subVersion;
haveVersionInformation = true; haveVersionInformation = true;
} }
else {
haveVersionInformation = false;
}
if (haveVersionInformation) { if (haveVersionInformation) {
versionDonutGraph.addPlotter(new Metrics.Plotter(version) { versionDonutGraph.addPlotter(new Metrics.Plotter(version) {

View File

@ -13,9 +13,7 @@ import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.skills.SkillUtils; import com.gmail.nossr50.util.skills.SkillUtils;
public class TeleportationWarmup extends BukkitRunnable { public class TeleportationWarmup extends BukkitRunnable {
private static Player teleportingPlayer;
private McMMOPlayer mcMMOPlayer; private McMMOPlayer mcMMOPlayer;
private static Player targetPlayer;
private McMMOPlayer mcMMOTarget; private McMMOPlayer mcMMOTarget;
public TeleportationWarmup(McMMOPlayer mcMMOPlayer, McMMOPlayer mcMMOTarget) { public TeleportationWarmup(McMMOPlayer mcMMOPlayer, McMMOPlayer mcMMOTarget) {
@ -25,12 +23,8 @@ public class TeleportationWarmup extends BukkitRunnable {
@Override @Override
public void run() { public void run() {
checkPartyTeleport(); Player teleportingPlayer = mcMMOPlayer.getPlayer();
} Player targetPlayer = mcMMOTarget.getPlayer();
private void checkPartyTeleport() {
teleportingPlayer = mcMMOPlayer.getPlayer();
targetPlayer = mcMMOTarget.getPlayer();
Location previousLocation = mcMMOPlayer.getTeleportCommenceLocation(); Location previousLocation = mcMMOPlayer.getTeleportCommenceLocation();
Location newLocation = mcMMOPlayer.getPlayer().getLocation(); Location newLocation = mcMMOPlayer.getPlayer().getLocation();
long recentlyHurt = mcMMOPlayer.getRecentlyHurt(); long recentlyHurt = mcMMOPlayer.getRecentlyHurt();

View File

@ -17,7 +17,6 @@ public class AlchemyBrewCheckTask extends BukkitRunnable {
private Player player; private Player player;
private Block brewingStand; private Block brewingStand;
private ItemStack[] oldInventory; private ItemStack[] oldInventory;
private ItemStack[] newInventory;
public AlchemyBrewCheckTask(Player player, BrewingStand brewingStand) { public AlchemyBrewCheckTask(Player player, BrewingStand brewingStand) {
this.player = player; this.player = player;
@ -27,7 +26,7 @@ public class AlchemyBrewCheckTask extends BukkitRunnable {
@Override @Override
public void run() { public void run() {
this.newInventory = Arrays.copyOfRange(((BrewingStand) brewingStand.getState()).getInventory().getContents(), 0, 4); ItemStack[] newInventory = Arrays.copyOfRange(((BrewingStand) brewingStand.getState()).getInventory().getContents(), 0, 4);
if (Alchemy.brewingStandMap.containsKey(brewingStand)) { if (Alchemy.brewingStandMap.containsKey(brewingStand)) {
if (oldInventory[INGREDIENT_SLOT] == null || newInventory[INGREDIENT_SLOT] == null || !oldInventory[INGREDIENT_SLOT].isSimilar(newInventory[INGREDIENT_SLOT]) || !AlchemyPotionBrewer.isValidBrew(player, newInventory)) { if (oldInventory[INGREDIENT_SLOT] == null || newInventory[INGREDIENT_SLOT] == null || !oldInventory[INGREDIENT_SLOT].isSimilar(newInventory[INGREDIENT_SLOT]) || !AlchemyPotionBrewer.isValidBrew(player, newInventory)) {

View File

@ -28,7 +28,7 @@ public class BleedTimerTask extends BukkitRunnable {
continue; continue;
} }
int damage = 0; int damage;
if (entity instanceof Player) { if (entity instanceof Player) {
damage = 1; damage = 1;

View File

@ -1,6 +1,5 @@
package com.gmail.nossr50.skills.herbalism; package com.gmail.nossr50.skills.herbalism;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -134,7 +133,7 @@ public class HerbalismManager extends SkillManager {
Collection<ItemStack> drops = null; Collection<ItemStack> drops = null;
int amount = 1; int amount = 1;
int xp = 0; int xp;
boolean greenTerra = mcMMOPlayer.getAbilityMode(skill.getAbility()); boolean greenTerra = mcMMOPlayer.getAbilityMode(skill.getAbility());
if (ModUtils.isCustomHerbalismBlock(blockState)) { if (ModUtils.isCustomHerbalismBlock(blockState)) {
@ -203,7 +202,7 @@ public class HerbalismManager extends SkillManager {
return false; return false;
} }
List<HylianTreasure> treasures = new ArrayList<HylianTreasure>(); List<HylianTreasure> treasures;
switch (blockState.getType()) { switch (blockState.getType()) {
case DEAD_BUSH: case DEAD_BUSH:

View File

@ -33,15 +33,7 @@ public class Repair {
* @return true if the item is salvageable, false otherwise * @return true if the item is salvageable, false otherwise
*/ */
public static boolean isSalvageable(ItemStack item) { public static boolean isSalvageable(ItemStack item) {
if (Config.getInstance().getSalvageTools() && ItemUtils.isMinecraftTool(item)) { return (Config.getInstance().getSalvageTools() && ItemUtils.isMinecraftTool(item)) || (Config.getInstance().getSalvageArmor() && !ItemUtils.isChainmailArmor(item) && ItemUtils.isMinecraftArmor(item));
return true;
}
if (Config.getInstance().getSalvageArmor() && !ItemUtils.isChainmailArmor(item) && ItemUtils.isMinecraftArmor(item)) {
return true;
}
return false;
} }
public static String getAnvilMessage(Material type) { public static String getAnvilMessage(Material type) {

View File

@ -26,9 +26,7 @@ public class Unarmed {
if (inventory.containsAtLeast(dropStack, 1)) { if (inventory.containsAtLeast(dropStack, 1)) {
int nextSlot = 0; int nextSlot = 0;
for (Iterator<ItemStack> iterator = inventory.iterator(); iterator.hasNext();) { for (ItemStack itemstack: inventory) {
ItemStack itemstack = iterator.next();
if (dropStack.isSimilar(itemstack)) { if (dropStack.isSimilar(itemstack)) {
int itemAmount = itemstack.getAmount(); int itemAmount = itemstack.getAmount();
int itemMax = itemstack.getMaxStackSize(); int itemMax = itemstack.getMaxStackSize();
@ -71,7 +69,8 @@ public class Unarmed {
nextSlot++; nextSlot++;
} }
} else if (firstEmpty != -1) { }
else if (firstEmpty != -1) {
drop.remove(); drop.remove();
dropStack.setAmount(dropAmount); dropStack.setAmount(dropAmount);
inventory.setItem(firstEmpty, dropStack); inventory.setItem(firstEmpty, dropStack);

View File

@ -15,10 +15,6 @@ public class LogFilter implements Filter {
@Override @Override
public boolean isLoggable(LogRecord record) { public boolean isLoggable(LogRecord record) {
if (record.getMessage().contains("[Debug]") && !debug) { return !(record.getMessage().contains("[Debug]") && !debug);
return false;
}
return true;
} }
} }

View File

@ -96,9 +96,9 @@ public final class MobHealthbarUtils {
double currentHealth = Math.max(entity.getHealth() - damage, 0); double currentHealth = Math.max(entity.getHealth() - damage, 0);
double healthPercentage = (currentHealth / maxHealth) * 100.0D; double healthPercentage = (currentHealth / maxHealth) * 100.0D;
int fullDisplay = 0; int fullDisplay;
ChatColor color = ChatColor.BLACK; ChatColor color = ChatColor.BLACK;
String symbol = ""; String symbol;
switch (profile.getMobHealthbarType()) { switch (profile.getMobHealthbarType()) {
case HEARTS: case HEARTS:

View File

@ -12,7 +12,7 @@ import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.skills.PerksUtils; import com.gmail.nossr50.util.skills.PerksUtils;
public final class Motd { public final class Motd {
private static final String perkPrefix = LocaleLoader.getString("MOTD.PerksPrefix"); public static final String PERK_PREFIX = LocaleLoader.getString("MOTD.PerksPrefix") + " ";
private static final PluginDescriptionFile pluginDescription = mcMMO.p.getDescription(); private static final PluginDescriptionFile pluginDescription = mcMMO.p.getDescription();
private Motd() {} private Motd() {}
@ -101,7 +101,7 @@ public final class Motd {
if (cooldownReduction > 0.0) { if (cooldownReduction > 0.0) {
DecimalFormat percent = new DecimalFormat("##0.00%"); DecimalFormat percent = new DecimalFormat("##0.00%");
player.sendMessage(perkPrefix + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.Cooldowns.Name"), LocaleLoader.getString("Perks.Cooldowns.Desc", percent.format(cooldownReduction)))); player.sendMessage(PERK_PREFIX + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.Cooldowns.Name"), LocaleLoader.getString("Perks.Cooldowns.Desc", percent.format(cooldownReduction))));
} }
} }
@ -114,7 +114,7 @@ public final class Motd {
int perkAmount = PerksUtils.handleActivationPerks(player, 0, 0); int perkAmount = PerksUtils.handleActivationPerks(player, 0, 0);
if (perkAmount > 0) { if (perkAmount > 0) {
player.sendMessage(perkPrefix + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.ActivationTime.Name"), LocaleLoader.getString("Perks.ActivationTime.Desc", perkAmount))); player.sendMessage(PERK_PREFIX + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.ActivationTime.Name"), LocaleLoader.getString("Perks.ActivationTime.Desc", perkAmount)));
} }
} }
@ -126,7 +126,7 @@ public final class Motd {
public static void displayLuckyPerks(Player player) { public static void displayLuckyPerks(Player player) {
for (SkillType skill : SkillType.values()) { for (SkillType skill : SkillType.values()) {
if (Permissions.lucky(player, skill)) { if (Permissions.lucky(player, skill)) {
player.sendMessage(perkPrefix + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.Lucky.Name"), LocaleLoader.getString("Perks.Lucky.Desc.Login"))); player.sendMessage(PERK_PREFIX + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.Lucky.Name"), LocaleLoader.getString("Perks.Lucky.Desc.Login")));
return; return;
} }
} }

View File

@ -69,36 +69,6 @@ public class StringUtils {
return prettyString; return prettyString;
} }
/**
* Gets the int represented by this string.
*
* @param string The string to parse
* @return the int represented by this string
*/
public static int getInt(String string) {
try {
return Integer.parseInt(string);
}
catch (NumberFormatException nFE) {
return 0;
}
}
/**
* Gets the long represented by this string.
*
* @param string The string to parse
* @return the long represented by this string
*/
public static long getLong(String string) {
try {
return Long.parseLong(string);
}
catch (NumberFormatException nFE) {
return 0;
}
}
/** /**
* Determine if a string represents an Integer * Determine if a string represents an Integer
* *

View File

@ -233,17 +233,12 @@ public class HashChunkManager implements ChunkManager {
for (String key : keys) { for (String key : keys) {
String[] info = key.split(","); String[] info = key.split(",");
if (worldName.equals(info[0])) { if (worldName.equals(info[0])) {
int cx = 0;
int cz = 0;
try { try {
cx = Integer.parseInt(info[1]); saveChunk(Integer.parseInt(info[1]), Integer.parseInt(info[2]), world);
cz = Integer.parseInt(info[2]);
} }
catch (Exception e) { catch (Exception e) {
continue; // Ignore
} }
saveChunk(cx, cz, world);
} }
} }
} }
@ -261,17 +256,12 @@ public class HashChunkManager implements ChunkManager {
for (String key : keys) { for (String key : keys) {
String[] info = key.split(","); String[] info = key.split(",");
if (worldName.equals(info[0])) { if (worldName.equals(info[0])) {
int cx = 0;
int cz = 0;
try { try {
cx = Integer.parseInt(info[1]); unloadChunk(Integer.parseInt(info[1]), Integer.parseInt(info[2]), world);
cz = Integer.parseInt(info[2]);
} }
catch (Exception e) { catch (Exception e) {
continue; // Ignore
} }
unloadChunk(cx, cz, world);
} }
} }
} }

View File

@ -58,11 +58,7 @@ public final class CommandUtils {
} }
public static boolean hidden(CommandSender sender, Player target, boolean hasPermission) { public static boolean hidden(CommandSender sender, Player target, boolean hasPermission) {
if (sender instanceof Player && !((Player)sender).canSee(target) && !hasPermission) { return sender instanceof Player && !((Player) sender).canSee(target) && !hasPermission;
return true;
}
return false;
} }
public static boolean noConsoleUsage(CommandSender sender) { public static boolean noConsoleUsage(CommandSender sender) {
@ -195,10 +191,10 @@ public final class CommandUtils {
public static String displaySkill(PlayerProfile profile, SkillType skill) { public static String displaySkill(PlayerProfile profile, SkillType skill) {
if (skill.isChildSkill()) { if (skill.isChildSkill()) {
return LocaleLoader.getString("Skills.ChildStats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener"), profile.getSkillLevel(skill)); return LocaleLoader.getString("Skills.ChildStats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener"), " ", profile.getSkillLevel(skill));
} }
return LocaleLoader.getString("Skills.Stats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener"), profile.getSkillLevel(skill), profile.getSkillXpLevel(skill), profile.getXpToLevel(skill)); return LocaleLoader.getString("Skills.Stats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener"), " ", profile.getSkillLevel(skill), profile.getSkillXpLevel(skill), profile.getXpToLevel(skill));
} }
private static void printGroupedSkillData(Player inspect, CommandSender display, String header, List<SkillType> skillGroup) { private static void printGroupedSkillData(Player inspect, CommandSender display, String header, List<SkillType> skillGroup) {

View File

@ -402,6 +402,6 @@ public class ScoreboardManager {
} }
public static void setRevertTimer(String playerName, int seconds) { public static void setRevertTimer(String playerName, int seconds) {
PLAYER_SCOREBOARDS.get(playerName).showBoardAndScheduleRevert(seconds * Misc.TICK_CONVERSION_FACTOR);; PLAYER_SCOREBOARDS.get(playerName).showBoardAndScheduleRevert(seconds * Misc.TICK_CONVERSION_FACTOR);
} }
} }

View File

@ -204,7 +204,7 @@ public class SkillUtils {
return (event.getChance() * activationChance) > Misc.getRandom().nextInt(activationChance); return (event.getChance() * activationChance) > Misc.getRandom().nextInt(activationChance);
} }
public static boolean treasureDropSuccessful(Player player, double dropChance, int activationChance) {; public static boolean treasureDropSuccessful(Player player, double dropChance, int activationChance) {
SecondaryAbilityWeightedActivationCheckEvent event = new SecondaryAbilityWeightedActivationCheckEvent(player, SecondaryAbility.EXCAVATION_TREASURE_HUNTER, dropChance / activationChance); SecondaryAbilityWeightedActivationCheckEvent event = new SecondaryAbilityWeightedActivationCheckEvent(player, SecondaryAbility.EXCAVATION_TREASURE_HUNTER, dropChance / activationChance);
mcMMO.p.getServer().getPluginManager().callEvent(event); mcMMO.p.getServer().getPluginManager().callEvent(event);
return (event.getChance() * activationChance) > (Misc.getRandom().nextDouble() * activationChance); return (event.getChance() * activationChance) > (Misc.getRandom().nextDouble() * activationChance);

View File

@ -39,7 +39,7 @@ Axes.Combat.CriticalHit=[[RED]]KRITICK\u00dd Z\u00c1SAH!
Axes.Combat.GI.Proc=[[GREEN]]**\u00daDER VELKOU SILOU** Axes.Combat.GI.Proc=[[GREEN]]**\u00daDER VELKOU SILOU**
Axes.Combat.GI.Struck=[[RED]]**ZASAZENI S VYSSIM UCINKEM** Axes.Combat.GI.Struck=[[RED]]**ZASAZENI S VYSSIM UCINKEM**
Axes.Combat.SS.Length=[[RED]]Delka trvani Drtice lebek: [[YELLOW]]{0}s Axes.Combat.SS.Length=[[RED]]Delka trvani Drtice lebek: [[YELLOW]]{0}s
Axes.Effect.0=[[GREEN]]**Drtic lebek byl AKTIVOVAN**\n Axes.Effect.0=[[GREEN]]**Drtic lebek byl AKTIVOVAN**
Axes.Effect.1=Ud\u011bl AoE zran\u011bn\u00ed Axes.Effect.1=Ud\u011bl AoE zran\u011bn\u00ed
Axes.Effect.2=Kriticky zasah Axes.Effect.2=Kriticky zasah
Axes.Effect.3=Dvojite zraneni Axes.Effect.3=Dvojite zraneni

View File

@ -10,7 +10,7 @@ Repair.Effect.4=Super Poravka
Repair.SkillName=POPRAVI Repair.SkillName=POPRAVI
Repair.Arcane.Fail=[[RED]]Arcane Snage Su Napustile Item. Repair.Arcane.Fail=[[RED]]Arcane Snage Su Napustile Item.
Swords.Combat.Bleeding.Stopped=[[GRAY]]Krvarenje je [[GREEN]]prestalo[[GRAY]]! Swords.Combat.Bleeding.Stopped=[[GRAY]]Krvarenje je [[GREEN]]prestalo[[GRAY]]!
Ability.Generic.Template=[[RED]]{0}: [[YELLOW]]{1}\n Ability.Generic.Template=[[RED]]{0}: [[YELLOW]]{1}
Combat.TouchedFuzzy=[[DARK_RED]]Dodirnuo Fuzzy.Osjetio Fuzzy. Combat.TouchedFuzzy=[[DARK_RED]]Dodirnuo Fuzzy.Osjetio Fuzzy.
Commands.Party.Kick=[[RED]]Ti Si Bio Izbacen Iz Partyja{0}! Commands.Party.Kick=[[RED]]Ti Si Bio Izbacen Iz Partyja{0}!
Party.Unlocked=[[GRAY]]Party je otkljucan Party.Unlocked=[[GRAY]]Party je otkljucan

View File

@ -8,7 +8,7 @@ Mining.Skillup=[[YELLOW]]Habilidade de minera\u00e7\u00e3o aumentada em {0}. Tot
Repair.Arcane.Fail=[[RED]]O objecto perdeu permanentemente os poderes Arcanos. Repair.Arcane.Fail=[[RED]]O objecto perdeu permanentemente os poderes Arcanos.
Swords.Combat.Bleeding.Stopped=[[GRAY]]A hemorragia [[GREEN]]parou[[GRAY]]! Swords.Combat.Bleeding.Stopped=[[GRAY]]A hemorragia [[GREEN]]parou[[GRAY]]!
Swords.Skills.SS.On=[[GREEN]]**ATAQUES SERRILHADOS ACTIVADO** Swords.Skills.SS.On=[[GREEN]]**ATAQUES SERRILHADOS ACTIVADO**
Woodcutting.SkillName=LENHADOR\n Woodcutting.SkillName=LENHADOR
Ability.Generic.Template=[[RED]]{0}: [[YELLOW]]{1} Ability.Generic.Template=[[RED]]{0}: [[YELLOW]]{1}
Commands.Invite.Accepted=[[GREEN]]Convite aceite. Tu entraste numa festa {0} Commands.Invite.Accepted=[[GREEN]]Convite aceite. Tu entraste numa festa {0}
Commands.Party.Kick=[[RED]]Foste expulso da festa {0}! Commands.Party.Kick=[[RED]]Foste expulso da festa {0}!

View File

@ -593,7 +593,7 @@ Guides.Acrobatics.Section.2=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u8ff4\u907f?\n[YELLO
Guides.Archery.Section.0=[[DARK_AQUA]]\u7bad\u8853:\n[[YELLOW]]\u7bad\u8853\u662f\u7528\u5f13\u5c04\u7bad\u7684\u6280\u80fd.\n[[YELLOW]]\u7bad\u8853\u6709\u5404\u7a2e\u52a0\u4e58\u6548\u679c,\u5982\u52a0\u4e58\u653b\u64ca\n[[YELLOW]]\u6688\u7729\u5c0d\u624b\u7b49\u6548\u679c.\n[[YELLOW]]\u6b64\u5916\u4f60\u4e5f\u6709\u6a5f\u7387\u56de\u6536\u5df2\u7d93\u5c04\u4e2d\u6575\u4eba\u7684\u7bad\n[[YELLOW]] \u4ee5\u4e0a\u6a5f\u7387\u95dc\u4fc2\u5230\u7b49\u7d1a.\n\n[[DARK_AQUA]]\u7372\u53d6\u7d93\u9a57:\n[[YELLOW]]\u8981\u7372\u5f97\u7d93\u9a57\u5fc5\u9808\u7528\u5f13\u5c04\u4e2d\u602a\u7269\u6216\u73a9\u5bb6. Guides.Archery.Section.0=[[DARK_AQUA]]\u7bad\u8853:\n[[YELLOW]]\u7bad\u8853\u662f\u7528\u5f13\u5c04\u7bad\u7684\u6280\u80fd.\n[[YELLOW]]\u7bad\u8853\u6709\u5404\u7a2e\u52a0\u4e58\u6548\u679c,\u5982\u52a0\u4e58\u653b\u64ca\n[[YELLOW]]\u6688\u7729\u5c0d\u624b\u7b49\u6548\u679c.\n[[YELLOW]]\u6b64\u5916\u4f60\u4e5f\u6709\u6a5f\u7387\u56de\u6536\u5df2\u7d93\u5c04\u4e2d\u6575\u4eba\u7684\u7bad\n[[YELLOW]] \u4ee5\u4e0a\u6a5f\u7387\u95dc\u4fc2\u5230\u7b49\u7d1a.\n\n[[DARK_AQUA]]\u7372\u53d6\u7d93\u9a57:\n[[YELLOW]]\u8981\u7372\u5f97\u7d93\u9a57\u5fc5\u9808\u7528\u5f13\u5c04\u4e2d\u602a\u7269\u6216\u73a9\u5bb6.
Guides.Archery.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u6280\u8853\u5c04\u64ca?\n[[YELLOW]]\u6280\u8853\u5c04\u64ca\u5c07\u52a0\u4e58\u4f60\u7684\u5c04\u7bad\u57fa\u672c\u653b\u64ca\u529b.\n[[YELLOW]]\u52a0\u4e58\u7684\u7a0b\u5ea6\u95dc\u4fc2\u5230\u4f60\u7684\u7bad\u8853\u7b49\u7d1a.\n[[YELLOW]]\u9810\u8a2d\u72c0\u614b\u4e0b, \u6bcf\u534750\u7d1a\u52a0\u4e5810%\u653b\u64ca\u529b, \n[[YELLOW]]\u6700\u9ad8\u5230200%\u52a0\u4e58. Guides.Archery.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u6280\u8853\u5c04\u64ca?\n[[YELLOW]]\u6280\u8853\u5c04\u64ca\u5c07\u52a0\u4e58\u4f60\u7684\u5c04\u7bad\u57fa\u672c\u653b\u64ca\u529b.\n[[YELLOW]]\u52a0\u4e58\u7684\u7a0b\u5ea6\u95dc\u4fc2\u5230\u4f60\u7684\u7bad\u8853\u7b49\u7d1a.\n[[YELLOW]]\u9810\u8a2d\u72c0\u614b\u4e0b, \u6bcf\u534750\u7d1a\u52a0\u4e5810%\u653b\u64ca\u529b, \n[[YELLOW]]\u6700\u9ad8\u5230200%\u52a0\u4e58.
Guides.Archery.Section.2=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u6688\u7729\u6548\u679c?\n[[YELLOW]]\u7576\u4f60\u64ca\u4e2d\u76ee\u6a19\u6642\u6709\u88ab\u52d5\u6a5f\u7387\u4f7f\u76ee\u6a19\u6688\u7729.\n[[YELLOW]]\u6688\u7dda\u89f8\u767c\u6642\u5c07\u5f37\u5236\u4f60\u7684\u76ee\u6a19\u5446\u6eef\u4e00\u5c0f\u6bb5\u6642\u9593.\n[[YELLOW]]\u6688\u7729\u6548\u679c\u6709\u52a0\u4e584\u9ede\u50b7\u5bb3(2\u5fc3). Guides.Archery.Section.2=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u6688\u7729\u6548\u679c?\n[[YELLOW]]\u7576\u4f60\u64ca\u4e2d\u76ee\u6a19\u6642\u6709\u88ab\u52d5\u6a5f\u7387\u4f7f\u76ee\u6a19\u6688\u7729.\n[[YELLOW]]\u6688\u7dda\u89f8\u767c\u6642\u5c07\u5f37\u5236\u4f60\u7684\u76ee\u6a19\u5446\u6eef\u4e00\u5c0f\u6bb5\u6642\u9593.\n[[YELLOW]]\u6688\u7729\u6548\u679c\u6709\u52a0\u4e584\u9ede\u50b7\u5bb3(2\u5fc3).
Guides.Archery.Section.3=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u56de\u6536\u5f13\u7bad?\n[[YELLOW]]\u4f60\u6709\u6a5f\u7387\u5728\u6bba\u6b7b\u602a\u7269\u5f8c\u56de\u6536\u5c04\u51fa\u53bb\u7684\u7bad.\n[[YELLOW]]\u6a5f\u7387\u95dc\u4fc2\u5230\u4f60\u7684\u7bad\u8853\u7b49\u7d1a.\n[[YELLOW]]\u9810\u8a2d\u72c0\u614b\u4e0b,\u6bcf\u5347\u4e00\u7b49\u589e\u52a00.1%\u6a5f\u7387,\n[[YELLOW]]\u7b49\u7d1a\u5230\u90541000\u6642\u5c07\u6709100%\u56de\u6536\u7387.\n Guides.Archery.Section.3=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u56de\u6536\u5f13\u7bad?\n[[YELLOW]]\u4f60\u6709\u6a5f\u7387\u5728\u6bba\u6b7b\u602a\u7269\u5f8c\u56de\u6536\u5c04\u51fa\u53bb\u7684\u7bad.\n[[YELLOW]]\u6a5f\u7387\u95dc\u4fc2\u5230\u4f60\u7684\u7bad\u8853\u7b49\u7d1a.\n[[YELLOW]]\u9810\u8a2d\u72c0\u614b\u4e0b,\u6bcf\u5347\u4e00\u7b49\u589e\u52a00.1%\u6a5f\u7387,\n[[YELLOW]]\u7b49\u7d1a\u5230\u90541000\u6642\u5c07\u6709100%\u56de\u6536\u7387.
Guides.Axes.Section.0=[[DARK_AQUA]]\u95dc\u65bc\u65a7\u6280:\n[[YELLOW]]\u6709\u4e86\u65a7\u6280, \u4f60\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u53ea\u662f\u4e82\u63ee\u4e82\u780d\n[[YELLOW]]\u4f60\u53ef\u4ee5\u66f4\u6709\u6548\u5730\u64ca\u6bba\u53ef\u60e1\u7684\u602a\u7269\u5011!\n[[YELLOW]]\u800c\u4e14\u53ef\u4ee5\u5728\u63ee\u64ca\u6642\u70b8\u98db\u6216\u767c\u51fa\u81f4\u547d\u7684\u66b4\u64ca\n[[YELLOW]]\u4ee5\u91cd\u5275 \u5c0d\u624b.\n[[YELLOW]]\u4f60\u7684\u65a7\u982d\u4e5f\u53ef\u4ee5\u6210\u70ba\u4e00\u53f0\u524a\u6728\u6a5f,\n[[YELLOW]]\u91cd\u5275\u5c0d\u624b\u7684\u88dd\u7532,\u96a8\u8457\u64cd\u65a7\u6280\u80fd\u5347\u9ad8\u800c\n[[YELLOW]]\u63d0\u5347\u6548\u679c.\n[[DARK_AQUA]]\u5982\u4f55\u7372\u53d6\u7d93\u9a57:\n[[YELLOW]]\u8981\u7372\u53d6\u7d93\u9a57\u4f60\u5fc5\u9808\u7528\u65a7\u982d\u653b\u64ca\u73a9\u5bb6\u6216\u602a\u7269 Guides.Axes.Section.0=[[DARK_AQUA]]\u95dc\u65bc\u65a7\u6280:\n[[YELLOW]]\u6709\u4e86\u65a7\u6280, \u4f60\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u53ea\u662f\u4e82\u63ee\u4e82\u780d\n[[YELLOW]]\u4f60\u53ef\u4ee5\u66f4\u6709\u6548\u5730\u64ca\u6bba\u53ef\u60e1\u7684\u602a\u7269\u5011!\n[[YELLOW]]\u800c\u4e14\u53ef\u4ee5\u5728\u63ee\u64ca\u6642\u70b8\u98db\u6216\u767c\u51fa\u81f4\u547d\u7684\u66b4\u64ca\n[[YELLOW]]\u4ee5\u91cd\u5275 \u5c0d\u624b.\n[[YELLOW]]\u4f60\u7684\u65a7\u982d\u4e5f\u53ef\u4ee5\u6210\u70ba\u4e00\u53f0\u524a\u6728\u6a5f,\n[[YELLOW]]\u91cd\u5275\u5c0d\u624b\u7684\u88dd\u7532,\u96a8\u8457\u64cd\u65a7\u6280\u80fd\u5347\u9ad8\u800c\n[[YELLOW]]\u63d0\u5347\u6548\u679c.\n[[DARK_AQUA]]\u5982\u4f55\u7372\u53d6\u7d93\u9a57:\n[[YELLOW]]\u8981\u7372\u53d6\u7d93\u9a57\u4f60\u5fc5\u9808\u7528\u65a7\u982d\u653b\u64ca\u73a9\u5bb6\u6216\u602a\u7269
Guides.Axes.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u5288\u9871\u65ac?\n[[YELLOW]]\u9019\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd(\u7bc4\u570d\u6280).\n[[YELLOW]]\u9031\u906d\u88ab\u6ce2\u53ca\u7684\u50b7\u5bb3\u70ba\u4e3b\u8981\u76ee\u6a19\u7684\u4e00\u534a\n[[YELLOW]]\u662f\u7528\u4f86\u6e05\u9664\u4e00\u5768\u602a\u7269\u7684\u5fc5\u5099\u7d55\u62db. Guides.Axes.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u5288\u9871\u65ac?\n[[YELLOW]]\u9019\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd(\u7bc4\u570d\u6280).\n[[YELLOW]]\u9031\u906d\u88ab\u6ce2\u53ca\u7684\u50b7\u5bb3\u70ba\u4e3b\u8981\u76ee\u6a19\u7684\u4e00\u534a\n[[YELLOW]]\u662f\u7528\u4f86\u6e05\u9664\u4e00\u5768\u602a\u7269\u7684\u5fc5\u5099\u7d55\u62db.
Guides.Axes.Section.2=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u6703\u5fc3\u4e00\u64ca?\n[[YELLOW]]\u6703\u5fc3\u4e00\u64ca\u662f\u4e00\u500b\u53ef\u4ee5\u9020\u6210\u52a0\u4e58\u50b7\u5bb3\u7684\u88ab\u52d5\u6280\u80fd.\n[[YELLOW]]\u9810\u8a2d\u65a7\u6280\u6bcf\u5347\u5169\u7b49,\u53ef\u589e\u52a00.1%\u66b4\u64ca\u7387\n[[YELLOW]]\u5c0d\u602a\u7269\u67092\u500d\u653b\u64ca\u529b\u5c0d\u73a9\u5bb6\u67091.5\u500d. Guides.Axes.Section.2=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u6703\u5fc3\u4e00\u64ca?\n[[YELLOW]]\u6703\u5fc3\u4e00\u64ca\u662f\u4e00\u500b\u53ef\u4ee5\u9020\u6210\u52a0\u4e58\u50b7\u5bb3\u7684\u88ab\u52d5\u6280\u80fd.\n[[YELLOW]]\u9810\u8a2d\u65a7\u6280\u6bcf\u5347\u5169\u7b49,\u53ef\u589e\u52a00.1%\u66b4\u64ca\u7387\n[[YELLOW]]\u5c0d\u602a\u7269\u67092\u500d\u653b\u64ca\u529b\u5c0d\u73a9\u5bb6\u67091.5\u500d.
@ -636,7 +636,7 @@ Guides.Repair.Section.5=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u56de\u6536?\n[[YELLOW]]
Guides.Swords.Section.0=[[DARK_AQUA]]\u528d\u8853:\n[[YELLOW]]\u528d\u8853\u8b93\u73a9\u5bb6\u5728\u4f7f\u7528\u528d\u6230\u9b25\u6642\u7372\u5f97\u5404\u7a2e\u52a0\u4e58\u6548\u679c.\n\n[[DARK_AQUA]]\u5982\u4f55\u7372\u53d6\u7d93\u9a57:\n[[YELLOW]]\u8981\u7372\u53d6\u7d93\u9a57\u4f60\u5fc5\u9808\u7528\u528d\u653b\u64ca\u73a9\u5bb6\u6216\u602a\u7269. Guides.Swords.Section.0=[[DARK_AQUA]]\u528d\u8853:\n[[YELLOW]]\u528d\u8853\u8b93\u73a9\u5bb6\u5728\u4f7f\u7528\u528d\u6230\u9b25\u6642\u7372\u5f97\u5404\u7a2e\u52a0\u4e58\u6548\u679c.\n\n[[DARK_AQUA]]\u5982\u4f55\u7372\u53d6\u7d93\u9a57:\n[[YELLOW]]\u8981\u7372\u53d6\u7d93\u9a57\u4f60\u5fc5\u9808\u7528\u528d\u653b\u64ca\u73a9\u5bb6\u6216\u602a\u7269.
Guides.Swords.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u5272\u88c2\u65ac?\n[[YELLOW]]\u5272\u88c2\u65ac\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd, \u4f60\u53ef\u4ee5\u5c07\u528d\u62ff\u518d\u624b\u4e0a\u4e26\u6309\u4e0b\u53f3\u9375\u555f\u52d5\u5b83.\n[[YELLOW]]\u9019\u500b\u6280\u80fd\u8b93\u4f60\u767c\u52d5\u7bc4\u570d\u653b\u64ca. \u9019\u500b\u7bc4\u570d\u6280\u80fd\u5c07\u9020\u621025%\u7684\u984d\u5916\u50b7\u5bb3,\n[[YELLOW]]\u4e26\u4e14\u9644\u5e36\u81f3\u5c115\u500bticks\u7684\u653e\u8840\u6548\u679c. Guides.Swords.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u5272\u88c2\u65ac?\n[[YELLOW]]\u5272\u88c2\u65ac\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd, \u4f60\u53ef\u4ee5\u5c07\u528d\u62ff\u518d\u624b\u4e0a\u4e26\u6309\u4e0b\u53f3\u9375\u555f\u52d5\u5b83.\n[[YELLOW]]\u9019\u500b\u6280\u80fd\u8b93\u4f60\u767c\u52d5\u7bc4\u570d\u653b\u64ca. \u9019\u500b\u7bc4\u570d\u6280\u80fd\u5c07\u9020\u621025%\u7684\u984d\u5916\u50b7\u5bb3,\n[[YELLOW]]\u4e26\u4e14\u9644\u5e36\u81f3\u5c115\u500bticks\u7684\u653e\u8840\u6548\u679c.
Guides.Swords.Section.2=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u53cd\u64ca?\n[[YELLOW]]\u53cd\u64ca\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd. \u7576\u683c\u6a94\u602a\u7269\u6240\u9020\u6210\u7684\u50b7\u5bb3\u6642, \u4f60\u6709\u6a5f\u6703\u53cd\u5c04\n[[YELLOW]]50%\u6240\u53d7\u5230\u7684\u50b7\u5bb3. Guides.Swords.Section.2=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u53cd\u64ca?\n[[YELLOW]]\u53cd\u64ca\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd. \u7576\u683c\u6a94\u602a\u7269\u6240\u9020\u6210\u7684\u50b7\u5bb3\u6642, \u4f60\u6709\u6a5f\u6703\u53cd\u5c04\n[[YELLOW]]50%\u6240\u53d7\u5230\u7684\u50b7\u5bb3.
Guides.Swords.Section.3=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u653e\u8840?\n[[YELLOW]]\u653e\u8840\u5c07\u9020\u6210\u6575\u4eba\u6bcf\u5169\u79d2\u9418\u53d7\u5230\u50b7\u5bb3. \u76ee\u6a19\u5c07\u6703\u4e0d \u505c\u7684\u6d41\u8840\u76f4\u5230\u6548\u679c\n[[YELLOW]]\u7d50\u675f, \u6216\u662f\u6b7b\u4ea1. \u653e\u8840\u7684\u6642\u9593\u96a8\u8457\u4f60\u7684\u528d\u8853\u7684\u63d0\u6607\u800c\u589e\u52a0.\n Guides.Swords.Section.3=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u653e\u8840?\n[[YELLOW]]\u653e\u8840\u5c07\u9020\u6210\u6575\u4eba\u6bcf\u5169\u79d2\u9418\u53d7\u5230\u50b7\u5bb3. \u76ee\u6a19\u5c07\u6703\u4e0d \u505c\u7684\u6d41\u8840\u76f4\u5230\u6548\u679c\n[[YELLOW]]\u7d50\u675f, \u6216\u662f\u6b7b\u4ea1. \u653e\u8840\u7684\u6642\u9593\u96a8\u8457\u4f60\u7684\u528d\u8853\u7684\u63d0\u6607\u800c\u589e\u52a0.
Guides.Smelting.Section.0=\u4e0b\u6b21\u9084\u6709... Guides.Smelting.Section.0=\u4e0b\u6b21\u9084\u6709...
Guides.Taming.Section.0=[[DARK_AQUA]]\u99b4\u7378\n[[YELLOW]]\u99b4\u7378\u6280\u80fd\u8b93\u73a9\u5bb6\u80fd\u5728\u7528\u72fc\u6230\u9b25\u6642\n[[YELLOW]]\u6642\u6709\u52a0\u4e58\u6548\u679c.\n\n[[DARK_AQUA]]\u7d93\u9a57\u7372\u53d6:\n[[YELLOW]]\u8981\u7372\u53d6\u7d93\u9a57,\u9808\u8a13\u670d\u72fc\u6216\u8c79\u8c93,\n[[YELLOW]]\u6216\u8207\u4f60\u7684\u72fc\u4e00\u540c\u6230\u9b25. Guides.Taming.Section.0=[[DARK_AQUA]]\u99b4\u7378\n[[YELLOW]]\u99b4\u7378\u6280\u80fd\u8b93\u73a9\u5bb6\u80fd\u5728\u7528\u72fc\u6230\u9b25\u6642\n[[YELLOW]]\u6642\u6709\u52a0\u4e58\u6548\u679c.\n\n[[DARK_AQUA]]\u7d93\u9a57\u7372\u53d6:\n[[YELLOW]]\u8981\u7372\u53d6\u7d93\u9a57,\u9808\u8a13\u670d\u72fc\u6216\u8c79\u8c93,\n[[YELLOW]]\u6216\u8207\u4f60\u7684\u72fc\u4e00\u540c\u6230\u9b25.
Guides.Taming.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u91ce\u6027\u547c\u558a?\n[[YELLOW]]\u91ce\u6027\u547c\u558a\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd\u8b93\u4f60\n[[YELLOW]]\u53ef\u4ee5\u53ec\u559a\u4e00\u96bb\u72fc\u6216\u8c79\u8c93,\n[[YELLOW]]\u53ea\u8981\u624b\u630110\u8ddf\u9aa8\u982d\u6216\u751f\u9b5a,\u9ede\u5de6\u9375. Guides.Taming.Section.1=[[DARK_AQUA]]\u4ec0\u9ebc\u662f\u91ce\u6027\u547c\u558a?\n[[YELLOW]]\u91ce\u6027\u547c\u558a\u662f\u4e00\u500b\u4e3b\u52d5\u6280\u80fd\u8b93\u4f60\n[[YELLOW]]\u53ef\u4ee5\u53ec\u559a\u4e00\u96bb\u72fc\u6216\u8c79\u8c93,\n[[YELLOW]]\u53ea\u8981\u624b\u630110\u8ddf\u9aa8\u982d\u6216\u751f\u9b5a,\u9ede\u5de6\u9375.