mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-18 09:43:00 +01:00
Compare commits
85 Commits
1.4.04
...
1.4.06-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c87ce06eb | ||
|
|
875091a1ce | ||
|
|
5ad7716137 | ||
|
|
8c97399cec | ||
|
|
27e0a9d3b6 | ||
|
|
07f9b287e7 | ||
|
|
fbee4f1b37 | ||
|
|
26542f3d6e | ||
|
|
14630fe956 | ||
|
|
30f5c761d9 | ||
|
|
365abaaa8f | ||
|
|
f4681a282c | ||
|
|
8a14d9ac26 | ||
|
|
0ab1986202 | ||
|
|
e11dc680de | ||
|
|
71249334c3 | ||
|
|
fa41dbce16 | ||
|
|
4246e6c900 | ||
|
|
1b421a24b0 | ||
|
|
9cc9eead52 | ||
|
|
8b21aea9c7 | ||
|
|
4f87cb6446 | ||
|
|
7525de1a72 | ||
|
|
78d2fa7520 | ||
|
|
7fe8122499 | ||
|
|
532c2e7450 | ||
|
|
b391a53c6b | ||
|
|
f3c6346b95 | ||
|
|
dd8984314f | ||
|
|
b82c3f41d3 | ||
|
|
7d6eb65776 | ||
|
|
dc0800e7e1 | ||
|
|
c151366952 | ||
|
|
212137ec3e | ||
|
|
31f36935d3 | ||
|
|
a14fc3e3c9 | ||
|
|
158b3c43f8 | ||
|
|
e31c1e33d9 | ||
|
|
25dfa6d34d | ||
|
|
431429a29c | ||
|
|
d4c8cc28a1 | ||
|
|
ce08405c00 | ||
|
|
da29185b7d | ||
|
|
87feb8c250 | ||
|
|
12797893df | ||
|
|
6d47e43ba9 | ||
|
|
f6b1643378 | ||
|
|
f1c16df63b | ||
|
|
c16e5231f4 | ||
|
|
2365c253dd | ||
|
|
c4e7f2597e | ||
|
|
13fd522bd4 | ||
|
|
b74f6e92dc | ||
|
|
630c3e81e6 | ||
|
|
0f77cf8066 | ||
|
|
52746fca76 | ||
|
|
dae25c2f2d | ||
|
|
a272316301 | ||
|
|
6772f4f169 | ||
|
|
9463e210b8 | ||
|
|
4c44b72f78 | ||
|
|
c849f751bb | ||
|
|
1cde45599e | ||
|
|
f1a22f5f6b | ||
|
|
90d6fbde48 | ||
|
|
802ad84613 | ||
|
|
c4aa9396fd | ||
|
|
f0c937ad47 | ||
|
|
fcc36ee5d7 | ||
|
|
0f023f627c | ||
|
|
fa645b5e00 | ||
|
|
1fb28eeee0 | ||
|
|
d7f67d43b3 | ||
|
|
5a1ec745ce | ||
|
|
6fd599bd31 | ||
|
|
afd706bed8 | ||
|
|
6c3820c747 | ||
|
|
0ebc555136 | ||
|
|
4992c50098 | ||
|
|
4e9322485a | ||
|
|
fc8ad40b00 | ||
|
|
f62e053a84 | ||
|
|
0af3c7ab7d | ||
|
|
7f4efe1775 | ||
|
|
80a5c2f9c4 |
@@ -6,6 +6,41 @@ Key:
|
||||
= Fix
|
||||
! Change
|
||||
- Removal
|
||||
|
||||
Version 1.4.06-dev
|
||||
+ Added ability to configure drops from Shake in treasures.yml
|
||||
+ Added "Master Angler" ability to Fishing.
|
||||
+ Added health display for mobs during combat.
|
||||
+ Added new API method to McMMOPlayerLevelUpEvent to set levels gained
|
||||
+ Added new permission node for /ptp; mcmmo.commands.ptp.send (enabled by default)
|
||||
+ Added configurable cooldown and warmup times when using /ptp
|
||||
= Fixed displaying partial names when trying to use /ptp
|
||||
= Fixed wolves from Call of the Wild only having 8 health
|
||||
= Fixed bug where /party chat was not working
|
||||
= Fixed bug where experience commands were adding levels to all skills when they shouldn't
|
||||
! Changed Chimaera Wing's recipe result to use the ingredient Material
|
||||
! Players will no longer pickup items to their hotbar while using Unarmed
|
||||
! ExperienceAPI methods will now throw InvalidSkillException if the skill name passed in is invalid.
|
||||
! Changed default value for recently-hurt cooldown between teleports, this is also fully configurable now
|
||||
|
||||
Version 1.4.05
|
||||
+ Added option to allow refreshing of chunks after block-breaking abilities. (Disabled by default)
|
||||
+ Added fireworks effects when a player levels-up, for every 100 levels (configurable)
|
||||
= Fixed bug where /addxp was setting instead of adding experience
|
||||
= Fixed bug where /addxp was not processessing level-ups for online players
|
||||
= Fixed bug which allowed players to share experience with nearby dead players
|
||||
= Fixed bug with ChimaeraWings not taking Wings from a players inventory properly
|
||||
= Fixed bug which caused a NPE when trying to use /mctop smelting
|
||||
= Fixed Berserk misbehaving when /reload was used
|
||||
= Fixed parties misbehaving when /reload was used
|
||||
= Fixed Berserk getting "stuck" when /mcrefresh was used
|
||||
= Fixed ClassCastException with Taming
|
||||
= Fixed huge mushroom blocks not being properly tracked
|
||||
= Fixed potion buff option not using the appropriate # of ticks
|
||||
= Fixed Chimera Wing spamming console if Metrics was disabled
|
||||
= Fixed Chimera Wing displaying warmup message if warmup was set to 0
|
||||
= Fixed party & admin chat errors when not aysnc
|
||||
! Updated localization files
|
||||
|
||||
Version 1.4.04
|
||||
+ Added functions to ExperienceAPI for use with offline players
|
||||
|
||||
6
pom.xml
6
pom.xml
@@ -2,7 +2,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||
<artifactId>mcMMO</artifactId>
|
||||
<version>1.4.04</version>
|
||||
<version>1.4.06-beta1</version>
|
||||
<name>mcMMO</name>
|
||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||
<issueManagement>
|
||||
@@ -177,4 +177,8 @@
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<ciManagement>
|
||||
<system>Jenkins</system>
|
||||
<url>ci.mcmmo.org</url>
|
||||
</ciManagement>
|
||||
</project>
|
||||
|
||||
@@ -4,6 +4,8 @@ import java.util.Set;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.api.exceptions.InvalidPlayerException;
|
||||
import com.gmail.nossr50.api.exceptions.InvalidSkillException;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
@@ -21,9 +23,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to add XP to
|
||||
* @param skillType The skill to add XP to
|
||||
* @param XP The amount of XP to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void addRawXP(Player player, String skillType, int XP) {
|
||||
UserManager.getPlayer(player).applyXpGain(SkillType.getSkill(skillType), XP);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).applyXpGain(skill, XP);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35,10 +45,17 @@ public final class ExperienceAPI {
|
||||
* @param skillType The skill to add XP to
|
||||
* @param XP The amount of XP to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static void addRawXPOffline(String playerName, String skillType, int XP) {
|
||||
addOfflineXP(playerName, skillType, XP);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
addOfflineXP(playerName, skill, XP);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,9 +66,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to add XP to
|
||||
* @param skillType The skill to add XP to
|
||||
* @param XP The amount of XP to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void addMultipliedXP(Player player, String skillType, int XP) {
|
||||
UserManager.getPlayer(player).applyXpGain(SkillType.getSkill(skillType), (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -63,10 +88,17 @@ public final class ExperienceAPI {
|
||||
* @param skillType The skill to add XP to
|
||||
* @param XP The amount of XP to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static void addMultipliedXPOffline(String playerName, String skillType, int XP) {
|
||||
addOfflineXP(playerName, skillType, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
addOfflineXP(playerName, skill, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,10 +109,16 @@ public final class ExperienceAPI {
|
||||
* @param player The player to add XP to
|
||||
* @param skillType The skill to add XP to
|
||||
* @param XP The amount of XP to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void addModifiedXP(Player player, String skillType, int XP) {
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||
}
|
||||
|
||||
@@ -93,10 +131,17 @@ public final class ExperienceAPI {
|
||||
* @param skillType The skill to add XP to
|
||||
* @param XP The amount of XP to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static void addModifiedXPOffline(String playerName, String skillType, int XP) {
|
||||
addOfflineXP(playerName, skillType, (int) (XP / SkillType.getSkill(skillType).getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
addOfflineXP(playerName, skill, (int) (XP / skill.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,9 +152,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to add XP to
|
||||
* @param skillType The skill to add XP to
|
||||
* @param XP The amount of XP to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void addXP(Player player, String skillType, int XP) {
|
||||
UserManager.getPlayer(player).beginXpGain(SkillType.getSkill(skillType), XP);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).beginXpGain(skill, XP);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,9 +173,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to get XP for
|
||||
* @param skillType The skill to get XP for
|
||||
* @return the amount of XP in a given skill
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getXP(Player player, String skillType) {
|
||||
return UserManager.getPlayer(player).getProfile().getSkillXpLevel(SkillType.getSkill(skillType));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
return UserManager.getPlayer(player).getProfile().getSkillXpLevel(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -133,10 +194,18 @@ public final class ExperienceAPI {
|
||||
* @param playerName The player to get XP for
|
||||
* @param skillType The skill to get XP for
|
||||
* @return the amount of XP in a given skill
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static int getOfflineXP(String playerName, String skillType) {
|
||||
return getOfflineProfile(playerName).getSkillXpLevel(SkillType.getSkill(skillType));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
return getOfflineProfile(playerName).getSkillXpLevel(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,9 +216,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to get the XP amount for
|
||||
* @param skillType The skill to get the XP amount for
|
||||
* @return the amount of XP left before leveling up a specifc skill
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getXPToNextLevel(Player player, String skillType) {
|
||||
return UserManager.getPlayer(player).getProfile().getXpToLevel(SkillType.getSkill(skillType));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
return UserManager.getPlayer(player).getProfile().getXpToLevel(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -160,10 +237,18 @@ public final class ExperienceAPI {
|
||||
* @param playerName The player to get XP for
|
||||
* @param skillType The skill to get XP for
|
||||
* @return the amount of XP in a given skill
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static int getOfflineXPToNextLevel(String playerName, String skillType) {
|
||||
return getOfflineProfile(playerName).getXpToLevel(SkillType.getSkill(skillType));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
return getOfflineProfile(playerName).getXpToLevel(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -174,9 +259,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to add levels to
|
||||
* @param skillType Type of skill to add levels to
|
||||
* @param levels Number of levels to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void addLevel(Player player, String skillType, int levels) {
|
||||
UserManager.getPlayer(player).getProfile().addLevels(SkillType.getSkill(skillType), levels);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).getProfile().addLevels(skill, levels);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -188,13 +281,17 @@ public final class ExperienceAPI {
|
||||
* @param skillType Type of skill to add levels to
|
||||
* @param levels Number of levels to add
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static void addLevelOffline(String playerName, String skillType, int levels) {
|
||||
PlayerProfile profile = getOfflineProfile(playerName);
|
||||
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
if (skill.isChildSkill()) {
|
||||
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
||||
|
||||
@@ -218,9 +315,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to get the level for
|
||||
* @param skillType The skill to get the level for
|
||||
* @return the level of a given skill
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getLevel(Player player, String skillType) {
|
||||
return UserManager.getPlayer(player).getProfile().getSkillLevel(SkillType.getSkill(skillType));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
return UserManager.getPlayer(player).getProfile().getSkillLevel(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -231,10 +336,18 @@ public final class ExperienceAPI {
|
||||
* @param playerName The player to get the level for
|
||||
* @param skillType The skill to get the level for
|
||||
* @return the level of a given skill
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static int getLevelOffline(String playerName, String skillType) {
|
||||
return getOfflineProfile(playerName).getSkillLevel(SkillType.getSkill(skillType));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
return getOfflineProfile(playerName).getSkillLevel(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -256,6 +369,7 @@ public final class ExperienceAPI {
|
||||
*
|
||||
* @param playerName The player to get the power level for
|
||||
* @return the power level of the player
|
||||
*
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static int getPowerLevelOffline(String playerName) {
|
||||
@@ -280,9 +394,17 @@ public final class ExperienceAPI {
|
||||
*
|
||||
* @param skillType The skill to get the level cap for
|
||||
* @return the level cap of a given skill
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getLevelCap(String skillType) {
|
||||
return Config.getInstance().getLevelCap(SkillType.getSkill(skillType));
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
return Config.getInstance().getLevelCap(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -290,7 +412,7 @@ public final class ExperienceAPI {
|
||||
* </br>
|
||||
* This function is designed for API usage.
|
||||
*
|
||||
* @return the power level cap of a given skill
|
||||
* @return the overall power level cap
|
||||
*/
|
||||
public static int getPowerLevelCap() {
|
||||
return Config.getInstance().getPowerLevelCap();
|
||||
@@ -304,9 +426,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to set the level of
|
||||
* @param skillType The skill to set the level for
|
||||
* @param skillLevel The value to set the level to
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void setLevel(Player player, String skillType, int skillLevel) {
|
||||
UserManager.getPlayer(player).getProfile().modifySkill(SkillType.getSkill(skillType), skillLevel);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).getProfile().modifySkill(skill, skillLevel);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -318,10 +448,17 @@ public final class ExperienceAPI {
|
||||
* @param skillType The skill to set the level for
|
||||
* @param skillLevel The value to set the level to
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static void setLevelOffline(String playerName, String skillType, int skillLevel) {
|
||||
getOfflineProfile(playerName).modifySkill(SkillType.getSkill(skillType), skillLevel);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
getOfflineProfile(playerName).modifySkill(skill, skillLevel);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -332,9 +469,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to set the XP of
|
||||
* @param skillType The skill to set the XP for
|
||||
* @param newValue The value to set the XP to
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void setXP(Player player, String skillType, int newValue) {
|
||||
UserManager.getPlayer(player).getProfile().setSkillXpLevel(SkillType.getSkill(skillType), newValue);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).getProfile().setSkillXpLevel(skill, newValue);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -346,10 +491,17 @@ public final class ExperienceAPI {
|
||||
* @param skillType The skill to set the XP for
|
||||
* @param newValue The value to set the XP to
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static void setXPOffline(String playerName, String skillType, int newValue) {
|
||||
getOfflineProfile(playerName).setSkillXpLevel(SkillType.getSkill(skillType), newValue);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
getOfflineProfile(playerName).setSkillXpLevel(skill, newValue);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -360,9 +512,17 @@ public final class ExperienceAPI {
|
||||
* @param player The player to change the XP of
|
||||
* @param skillType The skill to change the XP for
|
||||
* @param xp The amount of XP to remove
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static void removeXP(Player player, String skillType, int xp) {
|
||||
UserManager.getPlayer(player).getProfile().removeXp(SkillType.getSkill(skillType), xp);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
UserManager.getPlayer(player).getProfile().removeXp(skill, xp);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -374,10 +534,17 @@ public final class ExperienceAPI {
|
||||
* @param skillType The skill to change the XP for
|
||||
* @param xp The amount of XP to remove
|
||||
*
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||
*/
|
||||
public static void removeXPOffline(String playerName, String skillType, int xp) {
|
||||
getOfflineProfile(playerName).removeXp(SkillType.getSkill(skillType), xp);
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill == null) {
|
||||
throw new InvalidSkillException();
|
||||
}
|
||||
|
||||
getOfflineProfile(playerName).removeXp(skill, xp);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -387,11 +554,9 @@ public final class ExperienceAPI {
|
||||
* @param skillType The skill to check
|
||||
* @param XP The amount of XP to award.
|
||||
*/
|
||||
private static void addOfflineXP(String playerName, String skillType, int XP) {
|
||||
private static void addOfflineXP(String playerName, SkillType skill, int XP) {
|
||||
PlayerProfile profile = getOfflineProfile(playerName);
|
||||
|
||||
SkillType skill = SkillType.getSkill(skillType);
|
||||
|
||||
if (skill.isChildSkill()) {
|
||||
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.gmail.nossr50.api;
|
||||
package com.gmail.nossr50.api.exceptions;
|
||||
|
||||
public class InvalidPlayerException extends RuntimeException {
|
||||
private static final long serialVersionUID = 907213002618581385L;
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.gmail.nossr50.api.exceptions;
|
||||
|
||||
public class InvalidSkillException extends RuntimeException {
|
||||
private static final long serialVersionUID = 942705284195791157L;
|
||||
|
||||
public InvalidSkillException() {
|
||||
super("That is not a valid skill.");
|
||||
}
|
||||
}
|
||||
@@ -1,74 +1,29 @@
|
||||
package com.gmail.nossr50.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class McabilityCommand implements CommandExecutor {
|
||||
private McMMOPlayer mcMMOPlayer;
|
||||
private Player player;
|
||||
public class McabilityCommand extends ToggleCommand {
|
||||
@Override
|
||||
protected boolean hasOtherPermission(CommandSender sender) {
|
||||
return Permissions.mcabilityOthers(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
switch (args.length) {
|
||||
case 0:
|
||||
if (CommandUtils.noConsoleUsage(sender)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Permissions.mcability(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
|
||||
toggleAbilityUse();
|
||||
return true;
|
||||
|
||||
case 1:
|
||||
if (!Permissions.mcabilityOthers(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||
|
||||
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
|
||||
if (CommandUtils.isOffline(sender, player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
toggleAbilityUse();
|
||||
sender.sendMessage("Ability use has been toggled for " + player.getName()); // TODO: Localize
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
protected boolean hasSelfPermission(CommandSender sender) {
|
||||
return Permissions.mcability(sender);
|
||||
}
|
||||
|
||||
private void toggleAbilityUse() {
|
||||
if (mcMMOPlayer.getAbilityUse()) {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.Ability.Off"));
|
||||
}
|
||||
else {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.Ability.On"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyCommandAction() {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.Ability." + (mcMMOPlayer.getAbilityUse() ? "Off" : "On")));
|
||||
mcMMOPlayer.toggleAbilityUse();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void sendSuccessMessage(CommandSender sender) {
|
||||
sender.sendMessage("Ability use has been toggled for " + player.getName()); // TODO: Localize
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,74 +1,29 @@
|
||||
package com.gmail.nossr50.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class McgodCommand implements CommandExecutor {
|
||||
private McMMOPlayer mcMMOPlayer;
|
||||
private Player player;
|
||||
public class McgodCommand extends ToggleCommand {
|
||||
@Override
|
||||
protected boolean hasOtherPermission(CommandSender sender) {
|
||||
return Permissions.mcgodOthers(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
switch (args.length) {
|
||||
case 0:
|
||||
if (CommandUtils.noConsoleUsage(sender)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Permissions.mcgod(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
|
||||
toggleGodMode();
|
||||
return true;
|
||||
|
||||
case 1:
|
||||
if (!Permissions.mcgodOthers(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||
|
||||
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
|
||||
if (CommandUtils.isOffline(sender, player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
toggleGodMode();
|
||||
sender.sendMessage("God mode has been toggled for " + player.getName()); // TODO: Localize
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
protected boolean hasSelfPermission(CommandSender sender) {
|
||||
return Permissions.mcgod(sender);
|
||||
}
|
||||
|
||||
private void toggleGodMode() {
|
||||
if (mcMMOPlayer.getGodMode()) {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.GodMode.Disabled"));
|
||||
}
|
||||
else {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.GodMode.Enabled"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyCommandAction() {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.GodMode." + (mcMMOPlayer.getGodMode() ? "Disabled" : "Enabled")));
|
||||
mcMMOPlayer.toggleGodMode();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void sendSuccessMessage(CommandSender sender) {
|
||||
sender.sendMessage("God mode has been toggled for " + player.getName()); // TODO: Localize
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,25 @@
|
||||
package com.gmail.nossr50.commands;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class McnotifyCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class McnotifyCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
switch (args.length) {
|
||||
case 0:
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
|
||||
if (mcMMOPlayer.useChatNotifications()) {
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.Notifications.Off"));
|
||||
}
|
||||
else {
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.Notifications.On"));
|
||||
}
|
||||
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.Notifications." + (mcMMOPlayer.useChatNotifications() ? "Off" : "On")));
|
||||
mcMMOPlayer.toggleChatNotifications();
|
||||
return true;
|
||||
|
||||
@@ -29,4 +27,9 @@ public class McnotifyCommand implements CommandExecutor {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,73 +1,34 @@
|
||||
package com.gmail.nossr50.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class McrefreshCommand implements CommandExecutor {
|
||||
private McMMOPlayer mcMMOPlayer;
|
||||
private Player player;
|
||||
|
||||
public class McrefreshCommand extends ToggleCommand {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
switch (args.length) {
|
||||
case 0:
|
||||
if (CommandUtils.noConsoleUsage(sender)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Permissions.mcrefresh(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
|
||||
refreshPlayer();
|
||||
return true;
|
||||
|
||||
case 1:
|
||||
if (!Permissions.mcrefreshOthers(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||
|
||||
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = mcMMOPlayer.getPlayer();
|
||||
|
||||
if (CommandUtils.isOffline(sender, player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
refreshPlayer();
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrefresh.Success", player.getName()));
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
protected boolean hasOtherPermission(CommandSender sender) {
|
||||
return Permissions.mcrefreshOthers(sender);
|
||||
}
|
||||
|
||||
private void refreshPlayer() {
|
||||
@Override
|
||||
protected boolean hasSelfPermission(CommandSender sender) {
|
||||
return Permissions.mcrefresh(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyCommandAction() {
|
||||
mcMMOPlayer.setRecentlyHurt(0);
|
||||
mcMMOPlayer.getProfile().resetCooldowns();
|
||||
mcMMOPlayer.resetToolPrepMode();
|
||||
mcMMOPlayer.resetAbilityMode();
|
||||
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
player.setCanPickupItems(true);
|
||||
player.sendMessage(LocaleLoader.getString("Ability.Generic.Refresh"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void sendSuccessMessage(CommandSender sender) {
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.mcrefresh.Success", player.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.gmail.nossr50.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class MobhealthCommand implements TabExecutor {
|
||||
private static final List<String> MOB_HEALTHBAR_TYPES;
|
||||
|
||||
static {
|
||||
ArrayList<String> types = new ArrayList<String>();
|
||||
|
||||
for (MobHealthbarType type : MobHealthbarType.values()) {
|
||||
types.add(type.toString());
|
||||
}
|
||||
|
||||
Collections.sort(types);
|
||||
MOB_HEALTHBAR_TYPES = ImmutableList.copyOf(types);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (CommandUtils.noConsoleUsage(sender)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
PlayerProfile playerProfile = UserManager.getPlayer(sender.getName()).getProfile();
|
||||
|
||||
try {
|
||||
MobHealthbarType type = MobHealthbarType.valueOf(args[0].toUpperCase().trim());
|
||||
playerProfile.setMobHealthbarType(type);
|
||||
sender.sendMessage("Display type changed to: " + type); //TODO: Localize
|
||||
return true;
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
sender.sendMessage("Invalid type!"); //TODO: Localize
|
||||
return true;
|
||||
}
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
return StringUtil.copyPartialMatches(args[0], MOB_HEALTHBAR_TYPES, new ArrayList<String>(MOB_HEALTHBAR_TYPES.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
}
|
||||
84
src/main/java/com/gmail/nossr50/commands/ToggleCommand.java
Normal file
84
src/main/java/com/gmail/nossr50/commands/ToggleCommand.java
Normal file
@@ -0,0 +1,84 @@
|
||||
package com.gmail.nossr50.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public abstract class ToggleCommand implements TabExecutor {
|
||||
protected McMMOPlayer mcMMOPlayer;
|
||||
protected Player player;
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
switch (args.length) {
|
||||
case 0:
|
||||
if (CommandUtils.noConsoleUsage(sender)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!hasSelfPermission(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
|
||||
applyCommandAction();
|
||||
return true;
|
||||
|
||||
case 1:
|
||||
if (!hasOtherPermission(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||
|
||||
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
|
||||
if (CommandUtils.isOffline(sender, player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
applyCommandAction();
|
||||
sendSuccessMessage(sender);
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract boolean hasOtherPermission(CommandSender sender);
|
||||
protected abstract boolean hasSelfPermission(CommandSender sender);
|
||||
protected abstract void applyCommandAction();
|
||||
protected abstract void sendSuccessMessage(CommandSender sender);
|
||||
}
|
||||
@@ -1,16 +1,23 @@
|
||||
package com.gmail.nossr50.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
|
||||
public class XprateCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class XprateCommand implements TabExecutor {
|
||||
private double originalRate;
|
||||
|
||||
public XprateCommand() {
|
||||
@@ -75,4 +82,20 @@ public class XprateCommand implements CommandExecutor {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
if (StringUtils.isInt(args[0])) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
|
||||
return StringUtil.copyPartialMatches(args[0], CommandUtils.RESET_OPTIONS, new ArrayList<String>(CommandUtils.RESET_OPTIONS.size()));
|
||||
case 2:
|
||||
return StringUtil.copyPartialMatches(args[1], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package com.gmail.nossr50.commands.chat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.chat.ChatMode;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
@@ -10,7 +14,9 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public abstract class ChatCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public abstract class ChatCommand implements TabExecutor {
|
||||
protected ChatMode chatMode;
|
||||
private McMMOPlayer mcMMOPlayer;
|
||||
|
||||
@@ -68,6 +74,16 @@ public abstract class ChatCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
return StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
protected String buildChatMessage(String[] args, int index) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append(args[index]);
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.gmail.nossr50.commands.database;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.database.DatabaseManager;
|
||||
@@ -10,7 +12,9 @@ import com.gmail.nossr50.database.LeaderboardManager;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
|
||||
public class McpurgeCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class McpurgeCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!Permissions.mcpurge(sender)) {
|
||||
@@ -42,4 +46,9 @@ public class McpurgeCommand implements CommandExecutor {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,27 @@
|
||||
package com.gmail.nossr50.commands.database;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.database.DatabaseManager;
|
||||
import com.gmail.nossr50.database.LeaderboardManager;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class McremoveCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class McremoveCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!Permissions.mcremove(sender)) {
|
||||
@@ -21,6 +31,10 @@ public class McremoveCommand implements CommandExecutor {
|
||||
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
if (UserManager.getPlayer(args[0]) == null && CommandUtils.unloadedProfile(sender, new PlayerProfile(args[0], false))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* MySQL */
|
||||
if (Config.getInstance().getUseMySQL()) {
|
||||
String tablePrefix = Config.getInstance().getMySQLTablePrefix();
|
||||
@@ -29,18 +43,12 @@ public class McremoveCommand implements CommandExecutor {
|
||||
Misc.profileCleanup(args[0]);
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.mcremove.Success", args[0]));
|
||||
}
|
||||
else {
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist"));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (LeaderboardManager.removeFlatFileUser(args[0])) {
|
||||
Misc.profileCleanup(args[0]);
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.mcremove.Success", args[0]));
|
||||
}
|
||||
else {
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist"));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -49,4 +57,15 @@ public class McremoveCommand implements CommandExecutor {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.gmail.nossr50.commands.database;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
@@ -12,7 +14,9 @@ import com.gmail.nossr50.runnables.database.SQLConversionTask;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class MmoupdateCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class MmoupdateCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!Permissions.mmoupdate(sender)) {
|
||||
@@ -20,11 +24,17 @@ public class MmoupdateCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Config.getInstance().getUseMySQL()) {
|
||||
sender.sendMessage("SQL Mode is not enabled."); // TODO: Localize
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (args.length) {
|
||||
case 0:
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.mmoupdate.Start"));
|
||||
UserManager.saveAll();
|
||||
UserManager.clearAll();
|
||||
convertToMySQL();
|
||||
new SQLConversionTask().runTaskLaterAsynchronously(mcMMO.p, 1);
|
||||
|
||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||
UserManager.addUser(player);
|
||||
@@ -38,14 +48,8 @@ public class MmoupdateCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert FlatFile data to MySQL data.
|
||||
*/
|
||||
private void convertToMySQL() {
|
||||
if (!Config.getInstance().getUseMySQL()) {
|
||||
return;
|
||||
}
|
||||
|
||||
new SQLConversionTask().runTaskLaterAsynchronously(mcMMO.p, 1);
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,5 @@ public class AddlevelsCommand extends ExperienceCommand {
|
||||
@Override
|
||||
protected void handlePlayerMessageSkill() {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.1", value, SkillUtils.getSkillName(skill)));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public class AddxpCommand extends ExperienceCommand {
|
||||
mcMMOPlayer.applyXpGain(skill, value);
|
||||
}
|
||||
else {
|
||||
profile.setSkillXpLevel(skill, value);
|
||||
profile.addExperience(skill, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
package com.gmail.nossr50.commands.experience;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
@@ -13,8 +18,9 @@ import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public abstract class ExperienceCommand implements CommandExecutor {
|
||||
public abstract class ExperienceCommand implements TabExecutor {
|
||||
protected McMMOPlayer mcMMOPlayer;
|
||||
protected Player player;
|
||||
protected PlayerProfile profile;
|
||||
@@ -45,6 +51,7 @@ public abstract class ExperienceCommand implements CommandExecutor {
|
||||
profile = mcMMOPlayer.getProfile();
|
||||
|
||||
editValues();
|
||||
allSkills = false;
|
||||
return true;
|
||||
|
||||
case 3:
|
||||
@@ -72,10 +79,12 @@ public abstract class ExperienceCommand implements CommandExecutor {
|
||||
}
|
||||
else {
|
||||
profile = mcMMOPlayer.getProfile();
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
editValues();
|
||||
}
|
||||
|
||||
handleSenderMessage(sender, args[0]);
|
||||
allSkills = false;
|
||||
return true;
|
||||
|
||||
default:
|
||||
@@ -83,6 +92,19 @@ public abstract class ExperienceCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
case 2:
|
||||
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract boolean permissionsCheckSelf(CommandSender sender);
|
||||
protected abstract boolean permissionsCheckOthers(CommandSender sender);
|
||||
protected abstract void handleCommand(SkillType skill);
|
||||
|
||||
@@ -1,15 +1,21 @@
|
||||
package com.gmail.nossr50.commands.hardcore;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
|
||||
public abstract class HardcoreModeCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public abstract class HardcoreModeCommand implements TabExecutor {
|
||||
protected CommandSender sender;
|
||||
protected double newPercent;
|
||||
protected DecimalFormat percent;
|
||||
@@ -76,6 +82,20 @@ public abstract class HardcoreModeCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
if (StringUtils.isDouble(args[0])) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
|
||||
return StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract boolean checkTogglePermissions();
|
||||
protected abstract boolean checkModifyPermissions();
|
||||
protected abstract boolean checkEnabled();
|
||||
|
||||
@@ -1,21 +1,46 @@
|
||||
package com.gmail.nossr50.commands.party;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.commands.chat.PartyChatCommand;
|
||||
import com.gmail.nossr50.commands.party.teleport.PtpCommand;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class PartyCommand implements CommandExecutor {
|
||||
public class PartyCommand implements TabExecutor {
|
||||
private McMMOPlayer mcMMOPlayer;
|
||||
private Player player;
|
||||
|
||||
private static final List<String> PARTY_SUBCOMMANDS;
|
||||
private static final List<String> EXPSHARE_COMPLETIONS = ImmutableList.of("none", "equal");
|
||||
private static final List<String> ITEMSHARE_COMPLETIONS = ImmutableList.of("none", "equal", "random", "loot", "mining", "herbalism", "woodcutting");
|
||||
|
||||
static {
|
||||
ArrayList<String> subcommands = new ArrayList<String>();
|
||||
|
||||
for (PartySubcommandType subcommand : PartySubcommandType.values()) {
|
||||
subcommands.add(subcommand.toString());
|
||||
}
|
||||
|
||||
Collections.sort(subcommands);
|
||||
PARTY_SUBCOMMANDS = ImmutableList.copyOf(subcommands);
|
||||
}
|
||||
|
||||
private CommandExecutor partyJoinCommand = new PartyJoinCommand();
|
||||
private CommandExecutor partyAcceptCommand = new PartyAcceptCommand();
|
||||
private CommandExecutor partyCreateCommand = new PartyCreateCommand();
|
||||
@@ -32,7 +57,7 @@ public class PartyCommand implements CommandExecutor {
|
||||
private CommandExecutor partyInfoCommand = new PartyInfoCommand();
|
||||
private CommandExecutor partyHelpCommand = new PartyHelpCommand();
|
||||
private CommandExecutor partyTeleportCommand = mcMMO.p.getCommand("ptp").getExecutor();
|
||||
private CommandExecutor partyChatCommand = mcMMO.p.getCommand("partychat").getExecutor();
|
||||
private CommandExecutor partyChatCommand = new PartyChatCommand();
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
@@ -134,6 +159,57 @@ public class PartyCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
return StringUtil.copyPartialMatches(args[0], PARTY_SUBCOMMANDS, new ArrayList<String>(PARTY_SUBCOMMANDS.size()));
|
||||
case 2:
|
||||
PartySubcommandType subcommand = PartySubcommandType.getSubcommand(args[0]);
|
||||
|
||||
if (subcommand == null) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
|
||||
switch (PartySubcommandType.valueOf(args[0].toUpperCase())) {
|
||||
case JOIN:
|
||||
case INVITE:
|
||||
case KICK:
|
||||
case OWNER:
|
||||
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
case EXPSHARE:
|
||||
return StringUtil.copyPartialMatches(args[1], EXPSHARE_COMPLETIONS, new ArrayList<String>(EXPSHARE_COMPLETIONS.size()));
|
||||
case ITEMSHARE:
|
||||
return StringUtil.copyPartialMatches(args[1], ITEMSHARE_COMPLETIONS, new ArrayList<String>(ITEMSHARE_COMPLETIONS.size()));
|
||||
case LOCK:
|
||||
case CHAT:
|
||||
return StringUtil.copyPartialMatches(args[1], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||
case PASSWORD:
|
||||
return StringUtil.copyPartialMatches(args[1], CommandUtils.RESET_OPTIONS, new ArrayList<String>(CommandUtils.RESET_OPTIONS.size()));
|
||||
case TELEPORT:
|
||||
List<String> matches = StringUtil.copyPartialMatches(args[1], PtpCommand.TELEPORT_SUBCOMMANDS, new ArrayList<String>(PtpCommand.TELEPORT_SUBCOMMANDS.size()));
|
||||
|
||||
if (matches.size() == 0) {
|
||||
playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
}
|
||||
|
||||
return matches;
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
case 3:
|
||||
if (PartySubcommandType.getSubcommand(args[0]) == PartySubcommandType.ITEMSHARE && isItemShareCategory(args[1])) {
|
||||
return StringUtil.copyPartialMatches(args[2], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||
}
|
||||
|
||||
return ImmutableList.of();
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean printUsage() {
|
||||
player.sendMessage(LocaleLoader.getString("Party.Help.0", "/party join"));
|
||||
player.sendMessage(LocaleLoader.getString("Party.Help.1", "/party create"));
|
||||
@@ -150,4 +226,9 @@ public class PartyCommand implements CommandExecutor {
|
||||
|
||||
return newArgs;
|
||||
}
|
||||
|
||||
private boolean isItemShareCategory(String category) {
|
||||
return category.equalsIgnoreCase("loot") || category.equalsIgnoreCase("mining") || category.equalsIgnoreCase("herbalism") || category.equalsIgnoreCase("woodcutting");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public class PartyExpShareCommand implements CommandExecutor {
|
||||
handleChangingShareMode(ShareMode.EQUAL);
|
||||
}
|
||||
else {
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "[NONE | EQUAL]"));
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>"));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -21,14 +21,21 @@ public class PartyInfoCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
playerParty = mcMMOPlayer.getParty();
|
||||
switch (args.length) {
|
||||
case 0:
|
||||
case 1:
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
player = mcMMOPlayer.getPlayer();
|
||||
playerParty = mcMMOPlayer.getParty();
|
||||
|
||||
displayPartyHeader();
|
||||
displayShareModeInfo();
|
||||
displayMemberInfo();
|
||||
return true;
|
||||
displayPartyHeader();
|
||||
displayShareModeInfo();
|
||||
displayMemberInfo();
|
||||
return true;
|
||||
default:
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "info"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private String createMembersList() {
|
||||
|
||||
@@ -58,7 +58,7 @@ public class PtpAcceptCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
PtpCommand.handlePartyTeleportEvent(target, player);
|
||||
PtpCommand.handleTeleportWarmup(target, player);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
package com.gmail.nossr50.commands.party.teleport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -11,14 +18,20 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.party.PartyManager;
|
||||
import com.gmail.nossr50.runnables.items.TeleportationWarmup;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class PtpCommand implements CommandExecutor {
|
||||
public class PtpCommand implements TabExecutor {
|
||||
private static Player target;
|
||||
private static McMMOPlayer mcMMOTarget;
|
||||
|
||||
public static final List<String> TELEPORT_SUBCOMMANDS = ImmutableList.of("toggle", "accept", "acceptany", "acceptall");
|
||||
|
||||
private CommandExecutor ptpToggleCommand = new PtpToggleCommand();
|
||||
private CommandExecutor ptpAcceptAnyCommand = new PtpAcceptAnyCommand();
|
||||
private CommandExecutor ptpAcceptCommand = new PtpAcceptCommand();
|
||||
@@ -42,11 +55,11 @@ public class PtpCommand implements CommandExecutor {
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||
Player player = mcMMOPlayer.getPlayer();
|
||||
|
||||
int ptpCooldown = Config.getInstance().getPTPCommandCooldown();
|
||||
long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
|
||||
int recentlyhurt_cooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
|
||||
|
||||
if (((recentlyHurt * Misc.TIME_CONVERSION_FACTOR) + (ptpCooldown * Misc.TIME_CONVERSION_FACTOR)) > System.currentTimeMillis()) {
|
||||
player.sendMessage(LocaleLoader.getString("Party.Teleport.Hurt", ptpCooldown));
|
||||
if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)) {
|
||||
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -54,6 +67,19 @@ public class PtpCommand implements CommandExecutor {
|
||||
return ptpAcceptCommand.onCommand(sender, command, label, args);
|
||||
}
|
||||
|
||||
if (!Permissions.partyTeleportSend(sender)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
int ptpCooldown = Config.getInstance().getPTPCommandCooldown();
|
||||
long lastTeleport = mcMMOPlayer.getLastTeleport();
|
||||
|
||||
if (!SkillUtils.cooldownOver(lastTeleport * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player)) {
|
||||
player.sendMessage(ChatColor.RED + "You need to wait before you can use this again! " + ChatColor.YELLOW + "(" + SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player) + ")"); //TODO Locale!
|
||||
return true;
|
||||
}
|
||||
|
||||
sendTeleportRequest(sender, player, args[0]);
|
||||
return true;
|
||||
|
||||
@@ -62,13 +88,30 @@ public class PtpCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
List<String> matches = StringUtil.copyPartialMatches(args[0], TELEPORT_SUBCOMMANDS, new ArrayList<String>(TELEPORT_SUBCOMMANDS.size()));
|
||||
|
||||
if (matches.size() == 0) {
|
||||
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
}
|
||||
|
||||
return matches;
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
private void sendTeleportRequest(CommandSender sender, Player player, String targetName) {
|
||||
if (!canTeleport(sender, player, targetName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mcMMOTarget.getPtpConfirmRequired()) {
|
||||
handlePartyTeleportEvent(player, target);
|
||||
handleTeleportWarmup(player, target);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -89,6 +132,7 @@ public class PtpCommand implements CommandExecutor {
|
||||
}
|
||||
|
||||
target = mcMMOTarget.getPlayer();
|
||||
targetName = target.getName();
|
||||
|
||||
if (player.equals(target)) {
|
||||
player.sendMessage(LocaleLoader.getString("Party.Teleport.Self"));
|
||||
@@ -113,7 +157,24 @@ public class PtpCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
|
||||
protected static void handleTeleportWarmup(Player teleportingPlayer, Player targetPlayer) {
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
|
||||
mcMMOTarget = UserManager.getPlayer(targetPlayer);
|
||||
|
||||
long warmup = Config.getInstance().getPTPCommandWarmup();
|
||||
|
||||
mcMMOPlayer.actualizeTeleportCommenceLocation(teleportingPlayer);
|
||||
|
||||
if (warmup > 0) {
|
||||
teleportingPlayer.sendMessage(ChatColor.GRAY + "Commencing teleport in " + ChatColor.GOLD + "(" + warmup + ")" + ChatColor.GRAY + " seconds, please stand still..."); //TODO Locale!
|
||||
new TeleportationWarmup(mcMMOPlayer, mcMMOTarget).runTaskLater(mcMMO.p, 20 * warmup);
|
||||
}
|
||||
else {
|
||||
handlePartyTeleportEvent(teleportingPlayer, targetPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
public static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
|
||||
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(teleportingPlayer, targetPlayer, mcMMOPlayer.getParty().getName());
|
||||
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
package com.gmail.nossr50.commands.player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
@@ -13,7 +18,9 @@ import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class InspectCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class InspectCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
switch (args.length) {
|
||||
@@ -68,4 +75,15 @@ public class InspectCommand implements CommandExecutor {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package com.gmail.nossr50.commands.player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -17,7 +22,9 @@ import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
public class McrankCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class McrankCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
switch (args.length) {
|
||||
@@ -74,6 +81,17 @@ public class McrankCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
private void flatfileDisplay(CommandSender sender, String playerName) {
|
||||
LeaderboardManager.updateLeaderboards(); // Make sure the information is up to date
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.gmail.nossr50.commands.player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -11,7 +13,9 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public class McstatsCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class McstatsCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (CommandUtils.noConsoleUsage(sender)) {
|
||||
@@ -45,4 +49,9 @@ public class McstatsCommand implements CommandExecutor {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package com.gmail.nossr50.commands.player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -15,7 +19,9 @@ import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
|
||||
public class MctopCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class MctopCommand implements TabExecutor {
|
||||
private SkillType skill;
|
||||
|
||||
@Override
|
||||
@@ -58,6 +64,16 @@ public class MctopCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
private void display(int page, String skill, CommandSender sender, boolean sql, Command command) {
|
||||
if (!skill.equalsIgnoreCase("all") && !Permissions.mctop(sender, this.skill)) {
|
||||
sender.sendMessage(command.getPermissionMessage());
|
||||
@@ -122,7 +138,7 @@ public class MctopCommand implements CommandExecutor {
|
||||
skill = SkillType.getSkill(skillName);
|
||||
|
||||
if (CommandUtils.isChildSkill(sender, skill)) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -15,11 +15,13 @@ public class FishingCommand extends SkillCommand {
|
||||
private String shakeChance;
|
||||
private String shakeChanceLucky;
|
||||
private int fishermansDietRank;
|
||||
private String biteChance;
|
||||
|
||||
private boolean canTreasureHunt;
|
||||
private boolean canMagicHunt;
|
||||
private boolean canShake;
|
||||
private boolean canFishermansDiet;
|
||||
private boolean canMasterAngler;
|
||||
|
||||
public FishingCommand() {
|
||||
super(SkillType.FISHING);
|
||||
@@ -27,12 +29,14 @@ public class FishingCommand extends SkillCommand {
|
||||
|
||||
@Override
|
||||
protected void dataCalculations() {
|
||||
boolean isStorming = player.getWorld().hasStorm();
|
||||
|
||||
// TREASURE HUNTER
|
||||
if (canTreasureHunt) {
|
||||
lootTier = mcMMOPlayer.getFishingManager().getLootTier();
|
||||
double enchantChance = lootTier * AdvancedConfig.getInstance().getFishingMagicMultiplier();
|
||||
|
||||
if (player.getWorld().hasStorm()) {
|
||||
if (isStorming) {
|
||||
chanceRaining = LocaleLoader.getString("Fishing.Chance.Raining");
|
||||
enchantChance *= 1.1D;
|
||||
}
|
||||
@@ -53,6 +57,11 @@ public class FishingCommand extends SkillCommand {
|
||||
if (canFishermansDiet) {
|
||||
fishermansDietRank = calculateRank(Fishing.fishermansDietMaxLevel, Fishing.fishermansDietRankLevel1);
|
||||
}
|
||||
|
||||
// MASTER ANGLER
|
||||
if (canMasterAngler) {
|
||||
biteChance = calculateAbilityDisplayValues((skillValue / 10) / (isStorming ? 300 : 500))[0];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,11 +70,12 @@ public class FishingCommand extends SkillCommand {
|
||||
canMagicHunt = Permissions.magicHunter(player);
|
||||
canShake = Permissions.shake(player);
|
||||
canFishermansDiet = Permissions.fishermansDiet(player);
|
||||
canMasterAngler = Permissions.masterAngler(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean effectsHeaderPermissions() {
|
||||
return canTreasureHunt || canMagicHunt || canShake;
|
||||
return canTreasureHunt || canMagicHunt || canShake || canMasterAngler || canFishermansDiet;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -87,15 +97,23 @@ public class FishingCommand extends SkillCommand {
|
||||
if (canFishermansDiet) {
|
||||
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.6"), LocaleLoader.getString("Fishing.Effect.7")));
|
||||
}
|
||||
|
||||
if (canMasterAngler) {
|
||||
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.8"), LocaleLoader.getString("Fishing.Effect.9")));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean statsHeaderPermissions() {
|
||||
return canTreasureHunt || canMagicHunt || canShake;
|
||||
return canTreasureHunt || canMagicHunt || canShake || canMasterAngler || canFishermansDiet;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void statsDisplay() {
|
||||
if (canMasterAngler) {
|
||||
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Chance", biteChance));
|
||||
}
|
||||
|
||||
if (canTreasureHunt) {
|
||||
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Rank", lootTier));
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.gmail.nossr50.commands.skills;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
@@ -21,7 +23,9 @@ import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
public abstract class SkillCommand implements CommandExecutor {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public abstract class SkillCommand implements TabExecutor {
|
||||
protected SkillType skill;
|
||||
protected String skillName;
|
||||
|
||||
@@ -102,6 +106,16 @@ public abstract class SkillCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
return ImmutableList.of("?");
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
protected int calculateRank(int maxLevel, int rankChangeLevel) {
|
||||
return Math.min((int) skillValue, maxLevel) / rankChangeLevel;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,41 @@
|
||||
package com.gmail.nossr50.commands.spout;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class MchudCommand extends SpoutCommand {
|
||||
private static final List<String> HUD_TYPES;
|
||||
|
||||
static {
|
||||
ArrayList<String> types = new ArrayList<String>();
|
||||
|
||||
for (HudType type : HudType.values()) {
|
||||
types.add(type.toString());
|
||||
}
|
||||
|
||||
Collections.sort(types);
|
||||
HUD_TYPES = ImmutableList.copyOf(types);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
return StringUtil.copyPartialMatches(args[0], HUD_TYPES, new ArrayList<String>(HUD_TYPES.size()));
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean noArguments(Command command, CommandSender sender, String[] args) {
|
||||
return false;
|
||||
@@ -14,16 +43,15 @@ public class MchudCommand extends SpoutCommand {
|
||||
|
||||
@Override
|
||||
protected boolean oneArgument(Command command, CommandSender sender, String[] args) {
|
||||
for (HudType hudType : HudType.values()) {
|
||||
if (hudType.toString().equalsIgnoreCase(args[0])) {
|
||||
playerProfile.setHudType(hudType);
|
||||
spoutHud.initializeXpBar();
|
||||
spoutHud.updateXpBar();
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
playerProfile.setHudType(HudType.valueOf(args[0].toUpperCase().trim()));
|
||||
spoutHud.initializeXpBar();
|
||||
spoutHud.updateXpBar();
|
||||
return true;
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.mchud.Invalid"));
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage(LocaleLoader.getString("Commands.mchud.Invalid"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.gmail.nossr50.commands.spout;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.spout.SpoutConfig;
|
||||
@@ -12,7 +12,7 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public abstract class SpoutCommand implements CommandExecutor {
|
||||
public abstract class SpoutCommand implements TabExecutor {
|
||||
protected PlayerProfile playerProfile;
|
||||
protected McMMOHud spoutHud;
|
||||
|
||||
|
||||
@@ -1,15 +1,36 @@
|
||||
package com.gmail.nossr50.commands.spout;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class XplockCommand extends SpoutCommand {
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1:
|
||||
List<String> matches = StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||
|
||||
if (matches.size() == 0) {
|
||||
return StringUtil.copyPartialMatches(args[0], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||
}
|
||||
|
||||
return matches;
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean noArguments(Command command, CommandSender sender, String[] args) {
|
||||
if (spoutHud.getXpBarLocked()) {
|
||||
|
||||
@@ -6,6 +6,7 @@ import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
@@ -48,6 +49,18 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
public boolean getPartyDisplayNames() { return config.getBoolean("Commands.p.Use_Display_Names", true); }
|
||||
public boolean getAdminDisplayNames() { return config.getBoolean("Commands.a.Use_Display_Names", true); }
|
||||
|
||||
/* Mob Healthbar */
|
||||
public MobHealthbarType getMobHealthbarDefault() {
|
||||
try {
|
||||
return MobHealthbarType.valueOf(config.getString("Mob_Healthbar.Display_Type", "HEARTS").toUpperCase().trim());
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
return MobHealthbarType.HEARTS;
|
||||
}
|
||||
}
|
||||
|
||||
public int getMobHealthbarTime() { return config.getInt("Mob_Healthbar.Display_Time", 3); }
|
||||
|
||||
/* Database Purging */
|
||||
public int getPurgeInterval() { return config.getInt("Database_Purging.Purge_Interval", -1); }
|
||||
public int getOldUsersCutoff() { return config.getInt("Database_Purging.Old_User_Cutoff", 6); }
|
||||
@@ -108,6 +121,7 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
public boolean getChimaeraPreventUseUnderground() { return config.getBoolean("Items.Chimaera_Wing.Prevent_Use_Underground", true); }
|
||||
public int getChimaeraCooldown() { return config.getInt("Items.Chimaera_Wing.Cooldown", 240); }
|
||||
public int getChimaeraWarmup() { return config.getInt("Items.Chimaera_Wing.Warmup", 5); }
|
||||
public int getChimaeraRecentlyHurtCooldown() { return config.getInt("Items.Chimaera_Wing.RecentlyHurt_Cooldown", 60); }
|
||||
|
||||
/* Particles */
|
||||
public boolean getAbilityActivationEffectEnabled() { return config.getBoolean("Particles.Ability_Activation", true); }
|
||||
@@ -115,6 +129,8 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
public boolean getDodgeEffectEnabled() { return config.getBoolean("Particles.Dodge", true); }
|
||||
public boolean getBleedEffectEnabled() { return config.getBoolean("Particles.Bleed", true); }
|
||||
public boolean getGreaterImpactEffectEnabled() { return config.getBoolean("Particles.Greater_Impact", true); }
|
||||
public boolean getLevelUpEffectsEnabled() { return config.getBoolean("Particles.LevelUp_Enabled", true); }
|
||||
public int getLevelUpEffectsTier() { return config.getInt("Particles.LevelUp_Tier", 100); }
|
||||
|
||||
/* PARTY SETTINGS */
|
||||
public int getAutoPartyKickInterval() { return config.getInt("Party.AutoKick_Interval", 12); }
|
||||
@@ -127,7 +143,9 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
public double getPartyShareRange() { return config.getDouble("Party.Sharing.Range", 75.0); }
|
||||
|
||||
/* Party Teleport Settings */
|
||||
public int getPTPCommandCooldown() { return config.getInt("Commands.ptp.Cooldown", 30); }
|
||||
public int getPTPCommandCooldown() { return config.getInt("Commands.ptp.Cooldown", 120); }
|
||||
public int getPTPCommandWarmup() { return config.getInt("Commands.ptp.Warmup", 5); }
|
||||
public int getPTPCommandRecentlyHurtCooldown() { return config.getInt("Commands.ptp.RecentlyHurt_Cooldown", 60); }
|
||||
public int getPTPCommandTimeout() { return config.getInt("Commands.ptp.Request_Timeout", 300); }
|
||||
public boolean getPTPCommandConfirmRequired() { return config.getBoolean("Commands.ptp.Confirm_Required", true); }
|
||||
public boolean getPTPCommandWorldPermissions() { return config.getBoolean("Commands.ptp.World_Based_Permissions", false); }
|
||||
|
||||
@@ -11,6 +11,7 @@ public class HiddenConfig {
|
||||
private static boolean chunkletsEnabled;
|
||||
private static int conversionRate;
|
||||
private static boolean useEnchantmentBuffs;
|
||||
private static boolean resendChunksAfterBlockAbility;
|
||||
|
||||
public HiddenConfig(String fileName) {
|
||||
HiddenConfig.fileName = fileName;
|
||||
@@ -31,6 +32,7 @@ public class HiddenConfig {
|
||||
chunkletsEnabled = config.getBoolean("Options.Chunklets", true);
|
||||
conversionRate = config.getInt("Options.ConversionRate", 1);
|
||||
useEnchantmentBuffs = config.getBoolean("Options.EnchantmentBuffs", true);
|
||||
resendChunksAfterBlockAbility = config.getBoolean("Options.RefreshChunks", false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,4 +47,8 @@ public class HiddenConfig {
|
||||
public boolean useEnchantmentBuffs() {
|
||||
return useEnchantmentBuffs;
|
||||
}
|
||||
|
||||
public boolean resendChunksAfterBlockAbility() {
|
||||
return resendChunksAfterBlockAbility;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,9 @@ import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
||||
|
||||
public class SpoutConfig extends ConfigLoader {
|
||||
private static SpoutConfig instance;
|
||||
public HudType defaultHudType;
|
||||
|
||||
private SpoutConfig() {
|
||||
super("spout.yml");
|
||||
loadKeys();
|
||||
}
|
||||
|
||||
public static SpoutConfig getInstance() {
|
||||
@@ -24,17 +22,14 @@ public class SpoutConfig extends ConfigLoader {
|
||||
@Override
|
||||
protected void loadKeys() {
|
||||
// Setup default HUD
|
||||
String temp = config.getString("Spout.HUD.Default", "STANDARD");
|
||||
}
|
||||
|
||||
for (HudType hudType : HudType.values()) {
|
||||
if (hudType.toString().equalsIgnoreCase(temp)) {
|
||||
defaultHudType = hudType;
|
||||
break;
|
||||
}
|
||||
public HudType getDefaultHudType() {
|
||||
try {
|
||||
return HudType.valueOf(config.getString("Spout.HUD.Default", "STANDARD").toUpperCase().trim());
|
||||
}
|
||||
|
||||
if (defaultHudType == null) {
|
||||
defaultHudType = HudType.STANDARD;
|
||||
catch (IllegalArgumentException ex) {
|
||||
return HudType.STANDARD;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,13 +9,17 @@ import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.potion.Potion;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import com.gmail.nossr50.config.ConfigLoader;
|
||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.Treasure;
|
||||
|
||||
public class TreasureConfig extends ConfigLoader {
|
||||
@@ -33,6 +37,27 @@ public class TreasureConfig extends ConfigLoader {
|
||||
public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>();
|
||||
public List<HylianTreasure> hylianFromPots = new ArrayList<HylianTreasure>();
|
||||
|
||||
public List<ShakeTreasure> shakeFromBlaze = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromCaveSpider = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromSpider = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromChicken = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromCow = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromCreeper = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromEnderman = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromGhast = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromIronGolem = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromMagmaCube = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromMushroomCow = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromPig = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromPigZombie = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromSheep = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromSkeleton = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromSlime = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromSnowman = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromSquid = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromWitch = new ArrayList<ShakeTreasure>();
|
||||
public List<ShakeTreasure> shakeFromZombie = new ArrayList<ShakeTreasure>();
|
||||
|
||||
public List<FishingTreasure> fishingRewards = new ArrayList<FishingTreasure>();
|
||||
|
||||
private TreasureConfig() {
|
||||
@@ -128,15 +153,32 @@ public class TreasureConfig extends ConfigLoader {
|
||||
reason.add("Invalid Drop_Level: " + dropLevel);
|
||||
}
|
||||
|
||||
/*
|
||||
* Potions
|
||||
*/
|
||||
|
||||
ItemStack item = null;
|
||||
|
||||
if (config.contains("Treasures." + treasureName + ".Potion_Type")) {
|
||||
String potionType = config.getString("Treasures." + treasureName + ".Potion_Type");
|
||||
try {
|
||||
item = new Potion(PotionType.valueOf(potionType.toUpperCase())).toItemStack(amount);
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
reason.add("Invalid Potion_Type: " + potionType);
|
||||
}
|
||||
}
|
||||
else {
|
||||
item = (new MaterialData(id, (byte) data)).toItemStack(amount);
|
||||
}
|
||||
|
||||
/*
|
||||
* Drops From & Max Level
|
||||
*/
|
||||
|
||||
ItemStack item = (new MaterialData(id, (byte) data)).toItemStack(amount);
|
||||
|
||||
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
||||
if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) {
|
||||
reason.add("Fishing drops cannot also be excavation drops");
|
||||
reason.add("This can only be a fishing drop.");
|
||||
}
|
||||
|
||||
if (!config.contains("Treasures." + treasureName + ".Max_Level")) {
|
||||
@@ -150,6 +192,30 @@ public class TreasureConfig extends ConfigLoader {
|
||||
treasures.put(treasureName, fTreasure);
|
||||
}
|
||||
}
|
||||
else if (config.getBoolean("Treasures." + treasureName + "Drops_From.Shake", false)) {
|
||||
if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) {
|
||||
reason.add("This can only be a shake drop.");
|
||||
}
|
||||
|
||||
if (!config.contains("Treasures." + treasureName + ".Mob")) {
|
||||
reason.add("Missing Mob");
|
||||
}
|
||||
|
||||
String mobType = config.getString("Treasures." + treasureName + ".Mob");
|
||||
EntityType mob = null;
|
||||
|
||||
try {
|
||||
mob = EntityType.valueOf(mobType.toUpperCase().trim());
|
||||
}
|
||||
catch (IllegalArgumentException ex){
|
||||
reason.add("Invalid Mob: " + mobType);
|
||||
}
|
||||
|
||||
if (noErrorsInTreasure(reason)) {
|
||||
ShakeTreasure sTreasure = new ShakeTreasure(item, xp, dropChance, dropLevel, mob);
|
||||
treasures.put(treasureName, sTreasure);
|
||||
}
|
||||
}
|
||||
else {
|
||||
ExcavationTreasure eTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
|
||||
HylianTreasure hTreasure = new HylianTreasure(item, xp, dropChance, dropLevel);
|
||||
@@ -195,7 +261,11 @@ public class TreasureConfig extends ConfigLoader {
|
||||
}
|
||||
|
||||
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
||||
reason.add("Excavation drops cannot also be fishing drops");
|
||||
reason.add("This cannot also be a fishing drop.");
|
||||
}
|
||||
|
||||
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Shake", false)) {
|
||||
reason.add("This cannot also be a shake drop.");
|
||||
}
|
||||
|
||||
if (noErrorsInTreasure(reason) && hTreasure.getDropsFrom() == (byte) 0x0) {
|
||||
@@ -210,6 +280,7 @@ public class TreasureConfig extends ConfigLoader {
|
||||
List<String> excavationTreasures = config.getStringList("Excavation.Treasure");
|
||||
List<String> fishingTreasures = config.getStringList("Fishing.Treasure");
|
||||
List<String> hylianTreasures = config.getStringList("Hylian_Luck.Treasure");
|
||||
List<String> shakeTreasures = config.getStringList("Shake.Treasure");
|
||||
|
||||
for (Entry<String, Treasure> nextEntry : treasures.entrySet()) {
|
||||
String treasureKey = nextEntry.getKey();
|
||||
@@ -222,6 +293,97 @@ public class TreasureConfig extends ConfigLoader {
|
||||
|
||||
fishingRewards.add((FishingTreasure) treasure);
|
||||
}
|
||||
else if (treasure instanceof ShakeTreasure) {
|
||||
if (shakeTreasures == null || !shakeTreasures.contains(treasureKey)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ShakeTreasure e = (ShakeTreasure) treasure;
|
||||
switch (e.getMob()) {
|
||||
case BLAZE:
|
||||
shakeFromBlaze.add(e);
|
||||
break;
|
||||
|
||||
case CAVE_SPIDER:
|
||||
shakeFromCaveSpider.add(e);
|
||||
break;
|
||||
|
||||
case CHICKEN:
|
||||
shakeFromChicken.add(e);
|
||||
break;
|
||||
|
||||
case COW:
|
||||
shakeFromCow.add(e);
|
||||
break;
|
||||
|
||||
case CREEPER:
|
||||
shakeFromCreeper.add(e);
|
||||
break;
|
||||
|
||||
case ENDERMAN:
|
||||
shakeFromEnderman.add(e);
|
||||
break;
|
||||
|
||||
case GHAST:
|
||||
shakeFromGhast.add(e);
|
||||
break;
|
||||
|
||||
case IRON_GOLEM:
|
||||
shakeFromIronGolem.add(e);
|
||||
break;
|
||||
|
||||
case MAGMA_CUBE:
|
||||
shakeFromMagmaCube.add(e);
|
||||
break;
|
||||
|
||||
case MUSHROOM_COW:
|
||||
shakeFromMushroomCow.add(e);
|
||||
break;
|
||||
|
||||
case PIG:
|
||||
shakeFromPig.add(e);
|
||||
break;
|
||||
|
||||
case PIG_ZOMBIE:
|
||||
shakeFromPigZombie.add(e);
|
||||
break;
|
||||
|
||||
case SHEEP:
|
||||
shakeFromSheep.add(e);
|
||||
break;
|
||||
|
||||
case SKELETON:
|
||||
shakeFromSkeleton.add(e);
|
||||
break;
|
||||
|
||||
case SLIME:
|
||||
shakeFromSlime.add(e);
|
||||
break;
|
||||
|
||||
case SPIDER:
|
||||
shakeFromSpider.add(e);
|
||||
break;
|
||||
|
||||
case SNOWMAN:
|
||||
shakeFromSnowman.add(e);
|
||||
break;
|
||||
|
||||
case SQUID:
|
||||
shakeFromSquid.add(e);
|
||||
break;
|
||||
|
||||
case WITCH:
|
||||
shakeFromWitch.add(e);
|
||||
break;
|
||||
|
||||
case ZOMBIE:
|
||||
shakeFromZombie.add(e);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (treasure instanceof HylianTreasure) {
|
||||
if (hylianTreasures == null || !hylianTreasures.contains(treasureKey)) {
|
||||
continue;
|
||||
|
||||
@@ -96,6 +96,7 @@ public final class DatabaseManager {
|
||||
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "huds` ("
|
||||
+ "`user_id` int(10) unsigned NOT NULL,"
|
||||
+ "`hudtype` varchar(50) NOT NULL DEFAULT 'STANDARD',"
|
||||
+ "`mobhealthbar` varchar(50) NOT NULL DEFAULT 'HEARTS',"
|
||||
+ "PRIMARY KEY (`user_id`),"
|
||||
+ "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users` (`id`) "
|
||||
+ "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
||||
@@ -153,6 +154,7 @@ public final class DatabaseManager {
|
||||
checkDatabaseStructure(DatabaseUpdateType.BLAST_MINING);
|
||||
checkDatabaseStructure(DatabaseUpdateType.CASCADE_DELETE);
|
||||
checkDatabaseStructure(DatabaseUpdateType.INDEX);
|
||||
checkDatabaseStructure(DatabaseUpdateType.MOB_HEALTHBARS);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -413,9 +415,10 @@ public final class DatabaseManager {
|
||||
String skillName = skillType.name().toLowerCase();
|
||||
String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " +
|
||||
"AND " + skillName + " > (SELECT " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " +
|
||||
"WHERE user = '" + playerName + "')";
|
||||
"WHERE user = ?)";
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
statement.setString(1, playerName);
|
||||
resultSet = statement.executeQuery();
|
||||
|
||||
resultSet.next();
|
||||
@@ -443,9 +446,10 @@ public final class DatabaseManager {
|
||||
"WHERE taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > 0 " +
|
||||
"AND taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > " +
|
||||
"(SELECT taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
||||
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = '" + playerName + "')";
|
||||
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = ?)";
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
statement.setString(1, playerName);
|
||||
resultSet = statement.executeQuery();
|
||||
|
||||
resultSet.next();
|
||||
@@ -457,9 +461,10 @@ public final class DatabaseManager {
|
||||
"WHERE taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing > 0 " +
|
||||
"AND taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing = " +
|
||||
"(SELECT taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " +
|
||||
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = '" + playerName + "') ORDER BY user";
|
||||
"FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE user = ?) ORDER BY user";
|
||||
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setString(1, playerName);
|
||||
resultSet = statement.executeQuery();
|
||||
|
||||
while (resultSet.next()) {
|
||||
@@ -571,6 +576,10 @@ public final class DatabaseManager {
|
||||
}
|
||||
break;
|
||||
|
||||
case MOB_HEALTHBARS:
|
||||
sql = "SELECT * FROM `" + tablePrefix + "huds` ORDER BY `" + tablePrefix + "huds`.`mobhealthbar` ASC LIMIT 0 , 30";
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -607,6 +616,11 @@ public final class DatabaseManager {
|
||||
write("ALTER TABLE `"+tablePrefix + "experience` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
||||
break;
|
||||
|
||||
case MOB_HEALTHBARS:
|
||||
mcMMO.p.getLogger().info("Updating mcMMO MySQL tables for mob healthbars...");
|
||||
write("ALTER TABLE `" + tablePrefix + "huds` ADD `mobhealthbar` varchar(50) NOT NULL DEFAULT 'HEARTS' ;");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.gmail.nossr50.datatypes;
|
||||
|
||||
public enum MobHealthbarType {
|
||||
HEARTS,
|
||||
BAR,
|
||||
DISABLED;
|
||||
}
|
||||
@@ -4,5 +4,6 @@ public enum DatabaseUpdateType {
|
||||
FISHING,
|
||||
BLAST_MINING,
|
||||
CASCADE_DELETE,
|
||||
INDEX;
|
||||
INDEX,
|
||||
MOB_HEALTHBARS;
|
||||
}
|
||||
|
||||
@@ -79,11 +79,12 @@ public class McMMOPlayer {
|
||||
private Map<ToolType, Boolean> toolMode = new HashMap<ToolType, Boolean>();
|
||||
private Map<ToolType, Integer> toolATS = new HashMap<ToolType, Integer>();
|
||||
|
||||
private int chimaeraWing;
|
||||
private Location chimaeraWingCommence;
|
||||
|
||||
private int recentlyHurt;
|
||||
private int respawnATS;
|
||||
private int teleportLastUse;
|
||||
private Location teleportCommence;
|
||||
|
||||
private boolean isUsingUnarmed;
|
||||
|
||||
public McMMOPlayer(Player player) {
|
||||
String playerName = player.getName();
|
||||
@@ -303,31 +304,31 @@ public class McMMOPlayer {
|
||||
}
|
||||
|
||||
/*
|
||||
* Chimaera Wing
|
||||
* Teleportation cooldown & warmup
|
||||
*/
|
||||
|
||||
public int getLastChimaeraTeleport() {
|
||||
return chimaeraWing;
|
||||
public int getLastTeleport() {
|
||||
return teleportLastUse;
|
||||
}
|
||||
|
||||
public void setLastChimaeraTeleport(int value) {
|
||||
chimaeraWing = value;
|
||||
public void setLastTeleport(int value) {
|
||||
teleportLastUse = value;
|
||||
}
|
||||
|
||||
public void actualizeLastChimaeraTeleport() {
|
||||
chimaeraWing = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||
public void actualizeLastTeleport() {
|
||||
teleportLastUse = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||
}
|
||||
|
||||
public Location getChimaeraCommenceLocation() {
|
||||
return chimaeraWingCommence;
|
||||
public Location getTeleportCommenceLocation() {
|
||||
return teleportCommence;
|
||||
}
|
||||
|
||||
public void setChimaeraCommenceLocation(Location location) {
|
||||
chimaeraWingCommence = location;
|
||||
public void setTeleportCommenceLocation(Location location) {
|
||||
teleportCommence = location;
|
||||
}
|
||||
|
||||
public void actualizeChimaeraCommenceLocation(Player player) {
|
||||
setChimaeraCommenceLocation(player.getLocation());
|
||||
public void actualizeTeleportCommenceLocation(Player player) {
|
||||
setTeleportCommenceLocation(player.getLocation());
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -491,6 +492,7 @@ public class McMMOPlayer {
|
||||
spoutHud.setLastGained(skillType);
|
||||
}
|
||||
|
||||
isUsingUnarmed = skillType == SkillType.UNARMED;
|
||||
SkillUtils.xpCheckSkill(skillType, player, profile);
|
||||
}
|
||||
|
||||
@@ -642,6 +644,10 @@ public class McMMOPlayer {
|
||||
partyChatMode = !partyChatMode;
|
||||
}
|
||||
|
||||
public boolean isUsingUnarmed() {
|
||||
return isUsingUnarmed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifies an experience gain using skill modifiers, global rate and perks
|
||||
*
|
||||
@@ -650,11 +656,7 @@ public class McMMOPlayer {
|
||||
* @return Modified experience
|
||||
*/
|
||||
private int modifyXpGain(SkillType skillType, int xp) {
|
||||
if (player.getGameMode() == GameMode.CREATIVE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((skillType.getMaxLevel() < profile.getSkillLevel(skillType) + 1) || (Config.getInstance().getPowerLevelCap() < getPowerLevel() + 1)) {
|
||||
if (player.getGameMode() == GameMode.CREATIVE || (skillType.getMaxLevel() < profile.getSkillLevel(skillType) + 1) || (Config.getInstance().getPowerLevelCap() < getPowerLevel() + 1)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.spout.SpoutConfig;
|
||||
import com.gmail.nossr50.database.DatabaseManager;
|
||||
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
||||
@@ -27,6 +28,7 @@ public class PlayerProfile {
|
||||
// HUD
|
||||
private McMMOHud spoutHud;
|
||||
private HudType hudType;
|
||||
private MobHealthbarType mobHealthbarType;
|
||||
|
||||
// mySQL Stuff
|
||||
private int userId;
|
||||
@@ -41,9 +43,10 @@ public class PlayerProfile {
|
||||
|
||||
public PlayerProfile(String playerName, boolean addNew) {
|
||||
this.playerName = playerName;
|
||||
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
||||
|
||||
if (mcMMO.spoutEnabled) {
|
||||
hudType = SpoutConfig.getInstance().defaultHudType;
|
||||
hudType = SpoutConfig.getInstance().getDefaultHudType();
|
||||
}
|
||||
else {
|
||||
hudType = HudType.DISABLED;
|
||||
@@ -91,13 +94,11 @@ public class PlayerProfile {
|
||||
DatabaseManager.write("INSERT INTO " + tablePrefix + "huds (user_id) VALUES (" + userId + ")");
|
||||
}
|
||||
else {
|
||||
for (HudType type : HudType.values()) {
|
||||
if (type.toString().equalsIgnoreCase(huds.get(1).get(0))) {
|
||||
hudType = type;
|
||||
}
|
||||
}
|
||||
hudType = HudType.valueOf(huds.get(1).get(0));
|
||||
}
|
||||
|
||||
mobHealthbarType = MobHealthbarType.valueOf(DatabaseManager.read("SELECT mobhealthbar FROM " + tablePrefix + "huds WHERE user_id = " + userId).get(1).get(0));
|
||||
|
||||
HashMap<Integer, ArrayList<String>> cooldowns = DatabaseManager.read("SELECT mining, woodcutting, unarmed, herbalism, excavation, swords, axes, blast_mining FROM " + tablePrefix + "cooldowns WHERE user_id = " + userId);
|
||||
ArrayList<String> cooldownValues = cooldowns.get(1);
|
||||
|
||||
@@ -307,11 +308,7 @@ public class PlayerProfile {
|
||||
}
|
||||
|
||||
if (character.length > 33) {
|
||||
for (HudType type : HudType.values()) {
|
||||
if (type.toString().equalsIgnoreCase(character[33])) {
|
||||
hudType = type;
|
||||
}
|
||||
}
|
||||
hudType = HudType.valueOf(character[33]);
|
||||
}
|
||||
|
||||
if (character.length > 34) {
|
||||
@@ -326,6 +323,10 @@ public class PlayerProfile {
|
||||
skillsDATS.put(AbilityType.BLAST_MINING, Integer.valueOf(character[36]));
|
||||
}
|
||||
|
||||
if (character.length > 38) {
|
||||
mobHealthbarType = MobHealthbarType.valueOf(character[38]);
|
||||
}
|
||||
|
||||
loaded = true;
|
||||
|
||||
in.close();
|
||||
@@ -348,6 +349,7 @@ public class PlayerProfile {
|
||||
String tablePrefix = Config.getInstance().getMySQLTablePrefix();
|
||||
|
||||
DatabaseManager.write("UPDATE " + tablePrefix + "huds SET hudtype = '" + hudType.toString() + "' WHERE user_id = " + userId);
|
||||
DatabaseManager.write("UPDATE " + tablePrefix + "huds SET mobhealthbar = '" + mobHealthbarType.toString() + "' WHERE user_id = " + userId);
|
||||
DatabaseManager.write("UPDATE " + tablePrefix + "users SET lastlogin = " + ((int) (timestamp / Misc.TIME_CONVERSION_FACTOR)) + " WHERE id = " + userId);
|
||||
DatabaseManager.write("UPDATE " + tablePrefix + "cooldowns SET "
|
||||
+ " mining = " + skillsDATS.get(AbilityType.SUPER_BREAKER)
|
||||
@@ -443,6 +445,7 @@ public class PlayerProfile {
|
||||
writer.append(skillsXp.get(SkillType.FISHING)).append(":");
|
||||
writer.append(skillsDATS.get(AbilityType.BLAST_MINING)).append(":");
|
||||
writer.append(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR).append(":");
|
||||
writer.append(mobHealthbarType.toString()).append(":");
|
||||
writer.append("\r\n");
|
||||
}
|
||||
}
|
||||
@@ -452,6 +455,7 @@ public class PlayerProfile {
|
||||
// Write the new file
|
||||
FileWriter out = new FileWriter(location);
|
||||
out.write(writer.toString());
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
catch (Exception e) {
|
||||
@@ -505,6 +509,7 @@ public class PlayerProfile {
|
||||
out.append("0:"); // FishingXp
|
||||
out.append("0:"); // Blast Mining
|
||||
out.append(String.valueOf(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR)).append(":"); // LastLogin
|
||||
out.append(mobHealthbarType.toString()).append(":"); // Mob Healthbar HUD
|
||||
|
||||
// Add more in the same format as the line above
|
||||
|
||||
@@ -548,6 +553,18 @@ public class PlayerProfile {
|
||||
this.hudType = hudType;
|
||||
}
|
||||
|
||||
/*
|
||||
* Mob Healthbars
|
||||
*/
|
||||
|
||||
public MobHealthbarType getMobHealthbarType() {
|
||||
return mobHealthbarType;
|
||||
}
|
||||
|
||||
public void setMobHealthbarType(MobHealthbarType mobHealthbarType) {
|
||||
this.mobHealthbarType = mobHealthbarType;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cooldowns
|
||||
*/
|
||||
@@ -666,6 +683,20 @@ public class PlayerProfile {
|
||||
skillsXp.put(skillType, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Experience to a skill.
|
||||
*
|
||||
* @param skillType Type of skill to add experience to
|
||||
* @param experience Number of experience to add
|
||||
*/
|
||||
public void addExperience(SkillType skillType, int experience) {
|
||||
if (skillType.isChildSkill()) {
|
||||
return;
|
||||
}
|
||||
|
||||
skillsXp.put(skillType, skillsXp.get(skillType) + experience);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount of Xp remaining before the next level.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package com.gmail.nossr50.datatypes.skills;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Color;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
@@ -20,6 +24,8 @@ import com.gmail.nossr50.skills.taming.TamingManager;
|
||||
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public enum SkillType {
|
||||
ACROBATICS(AcrobaticsManager.class, Color.WHITE),
|
||||
@@ -41,6 +47,19 @@ public enum SkillType {
|
||||
private AbilityType ability;
|
||||
private ToolType tool;
|
||||
|
||||
public static final List<String> SKILL_NAMES;
|
||||
|
||||
static {
|
||||
ArrayList<String> names = new ArrayList<String>();
|
||||
|
||||
for (SkillType skill : values()) {
|
||||
names.add(SkillUtils.getSkillName(skill));
|
||||
}
|
||||
|
||||
Collections.sort(names);
|
||||
SKILL_NAMES = ImmutableList.copyOf(names);
|
||||
}
|
||||
|
||||
private SkillType(Class<? extends SkillManager> managerClass, Color runescapeColor) {
|
||||
this.managerClass = managerClass;
|
||||
this.runescapeColor = runescapeColor;
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.gmail.nossr50.datatypes.treasure;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ShakeTreasure extends Treasure {
|
||||
private EntityType mob;
|
||||
|
||||
public ShakeTreasure(ItemStack drop, int xp, double dropChance, int dropLevel, EntityType mob) {
|
||||
super(drop, xp, dropChance, dropLevel);
|
||||
this.mob = mob;
|
||||
}
|
||||
|
||||
public EntityType getMob() {
|
||||
return mob;
|
||||
}
|
||||
|
||||
public void setMob(EntityType mob) {
|
||||
this.mob = mob;
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,14 @@ public class McMMOPlayerLevelUpEvent extends McMMOPlayerExperienceEvent {
|
||||
|
||||
public McMMOPlayerLevelUpEvent(Player player, SkillType skill, int levelsGained) {
|
||||
super(player, skill);
|
||||
this.setLevelsGained(levelsGained);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param levelsGained
|
||||
* @return Set the number of levels gained in this event
|
||||
*/
|
||||
public void setLevelsGained(int levelsGained) {
|
||||
this.levelsGained = levelsGained;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ public class BlockListener implements Listener {
|
||||
Block futureEmptyBlock = event.getBlock().getRelative(direction); // Block that would be air after piston is finished
|
||||
|
||||
for (Block b : blocks) {
|
||||
if (mcMMO.placeStore.isTrue(b)) {
|
||||
if (BlockUtils.shouldBeWatched(b.getState()) && mcMMO.placeStore.isTrue(b)) {
|
||||
b.getRelative(direction).setMetadata(mcMMO.blockMetadataKey, mcMMO.metadataValue);
|
||||
if (b.equals(futureEmptyBlock)) {
|
||||
mcMMO.placeStore.setFalse(b);
|
||||
@@ -129,18 +129,19 @@ public class BlockListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
BlockState blockState = event.getBlock().getState();
|
||||
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
if (!BlockUtils.shouldBeWatched(blockState)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
BlockState blockState = event.getBlock().getState();
|
||||
ItemStack heldItem = player.getItemInHand();
|
||||
|
||||
/* HERBALISM */
|
||||
@@ -190,9 +191,7 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
|
||||
/* Remove metadata from placed watched blocks */
|
||||
if (BlockUtils.shouldBeWatched(blockState) && mcMMO.placeStore.isTrue(blockState)) {
|
||||
mcMMO.placeStore.setFalse(blockState);
|
||||
}
|
||||
mcMMO.placeStore.setFalse(blockState);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -208,11 +207,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE) {
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.gmail.nossr50.listeners;
|
||||
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.AnimalTamer;
|
||||
import org.bukkit.entity.Entity;
|
||||
@@ -106,7 +107,7 @@ public class EntityListener implements Listener {
|
||||
else if (attacker instanceof Tameable) {
|
||||
AnimalTamer animalTamer = ((Tameable) attacker).getOwner();
|
||||
|
||||
if (animalTamer != null) {
|
||||
if (animalTamer != null && ((OfflinePlayer) animalTamer).isOnline()) {
|
||||
attacker = (Entity) animalTamer;
|
||||
}
|
||||
}
|
||||
@@ -317,14 +318,15 @@ public class EntityListener implements Listener {
|
||||
public void onExplosionPrime(ExplosionPrimeEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
|
||||
if (entity instanceof TNTPrimed) {
|
||||
int id = entity.getEntityId();
|
||||
if (entity instanceof TNTPrimed && entity.hasMetadata(mcMMO.tntMetadataKey)) {
|
||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||
Player player = plugin.getServer().getPlayer(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
||||
|
||||
if (!plugin.tntIsTracked(id)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
MiningManager miningManager = UserManager.getPlayer(plugin.getTNTPlayer(id)).getMiningManager();
|
||||
MiningManager miningManager = UserManager.getPlayer(player).getMiningManager();
|
||||
|
||||
if (miningManager.canUseBiggerBombs()) {
|
||||
event.setRadius(miningManager.biggerBombs(event.getRadius()));
|
||||
@@ -341,21 +343,20 @@ public class EntityListener implements Listener {
|
||||
public void onEnitityExplode(EntityExplodeEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
|
||||
if (entity instanceof TNTPrimed) {
|
||||
int id = entity.getEntityId();
|
||||
if (entity instanceof TNTPrimed && entity.hasMetadata(mcMMO.tntMetadataKey)) {
|
||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||
Player player = plugin.getServer().getPlayer(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
||||
|
||||
if (!plugin.tntIsTracked(id)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
MiningManager miningManager = UserManager.getPlayer(plugin.getTNTPlayer(id)).getMiningManager();
|
||||
MiningManager miningManager = UserManager.getPlayer(player).getMiningManager();
|
||||
|
||||
if (miningManager.canUseBlastMining()) {
|
||||
miningManager.blastMiningDropProcessing(event.getYield(), event.blockList());
|
||||
event.setYield(0);
|
||||
}
|
||||
|
||||
plugin.removeFromTNTTracker(id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||
import com.gmail.nossr50.skills.repair.Repair;
|
||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||
import com.gmail.nossr50.skills.unarmed.Unarmed;
|
||||
import com.gmail.nossr50.util.BlockUtils;
|
||||
import com.gmail.nossr50.util.ChimaeraWing;
|
||||
import com.gmail.nossr50.util.HardcoreManager;
|
||||
@@ -58,6 +59,18 @@ public class PlayerListener implements Listener {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
public void onPlayerDeathLowest(PlayerDeathEvent event) {
|
||||
String deathMessage = event.getDeathMessage();
|
||||
|
||||
if (deathMessage == null) {
|
||||
mcMMO.p.getLogger().severe("You have another plugin causing null death messages. mcMMO cannot process this death message.");
|
||||
return;
|
||||
}
|
||||
|
||||
event.setDeathMessage(deathMessage.replaceAll("(?:\u00A7(?:[0-9A-FK-ORa-fk-or]){1}(?:[\u2764\u25A0]{1,10})){1,2}", "a mob"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Monitor PlayerDeath events.
|
||||
*
|
||||
@@ -164,6 +177,12 @@ public class PlayerListener implements Listener {
|
||||
FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
|
||||
|
||||
switch (event.getState()) {
|
||||
case FISHING:
|
||||
if (fishingManager.canMasterAngler()) {
|
||||
fishingManager.masterAngler(event.getHook());
|
||||
}
|
||||
break;
|
||||
|
||||
case CAUGHT_FISH:
|
||||
fishingManager.handleFishing((Item) event.getCaught());
|
||||
|
||||
@@ -193,7 +212,8 @@ public class PlayerListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Item item = event.getItem();
|
||||
Item drop = event.getItem();
|
||||
ItemStack dropStack = drop.getItemStack();
|
||||
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
@@ -201,8 +221,21 @@ public class PlayerListener implements Listener {
|
||||
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
|
||||
if (mcMMOPlayer.inParty() && ItemUtils.isShareable(item.getItemStack())) {
|
||||
ShareHandler.handleItemShare(event, mcMMOPlayer);
|
||||
if (mcMMOPlayer.inParty() && ItemUtils.isShareable(dropStack)) {
|
||||
event.setCancelled(ShareHandler.handleItemShare(drop, mcMMOPlayer));
|
||||
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (mcMMOPlayer.isUsingUnarmed() && ItemUtils.isShareable(dropStack)) {
|
||||
event.setCancelled(Unarmed.handleItemPickup(player.getInventory(), drop));
|
||||
|
||||
if (event.isCancelled()) {
|
||||
player.updateInventory();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,11 +312,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerInteractLowest(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE) {
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -342,11 +371,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE) {
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -449,6 +474,7 @@ public class PlayerListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean isAsync = event.isAsynchronous();
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
|
||||
if (mcMMOPlayer.getPartyChatMode()) {
|
||||
@@ -459,11 +485,11 @@ public class PlayerListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
ChatManager.handlePartyChat(plugin, party, player.getName(), player.getDisplayName(), event.getMessage(), true);
|
||||
ChatManager.handlePartyChat(plugin, party, player.getName(), player.getDisplayName(), event.getMessage(), isAsync);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
else if (mcMMOPlayer.getAdminChatMode()) {
|
||||
ChatManager.handleAdminChat(plugin, player.getName(), player.getDisplayName(), event.getMessage(), true);
|
||||
ChatManager.handleAdminChat(plugin, player.getName(), player.getDisplayName(), event.getMessage(), isAsync);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,36 @@
|
||||
package com.gmail.nossr50.listeners;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||
|
||||
public class SelfListener implements Listener {
|
||||
protected Player player;
|
||||
|
||||
protected float skillValue;
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerLevelUp(McMMOPlayerLevelUpEvent event) {
|
||||
Calendar today = Calendar.getInstance();
|
||||
if (today.get(Calendar.MONTH) == Calendar.APRIL && today.get(Calendar.DAY_OF_MONTH) == 1) {
|
||||
ParticleEffectUtils.runescapeModeCelebration(event.getPlayer(), event.getSkill());
|
||||
if (!Config.getInstance().getLevelUpEffectsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
int tier = Config.getInstance().getLevelUpEffectsTier();
|
||||
|
||||
if (tier <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
player = event.getPlayer();
|
||||
skillValue = event.getSkillLevel();
|
||||
|
||||
if ((skillValue % tier) == 0) {
|
||||
ParticleEffectUtils.runescapeModeCelebration(player, event.getSkill());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.gmail.nossr50;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import net.shatteredlands.shatt.backup.ZipLibrary;
|
||||
@@ -25,6 +24,8 @@ import com.gmail.nossr50.config.spout.SpoutConfig;
|
||||
import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.database.DatabaseManager;
|
||||
import com.gmail.nossr50.database.LeaderboardManager;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||
import com.gmail.nossr50.listeners.BlockListener;
|
||||
import com.gmail.nossr50.listeners.EntityListener;
|
||||
import com.gmail.nossr50.listeners.InventoryListener;
|
||||
@@ -37,7 +38,6 @@ import com.gmail.nossr50.party.PartyManager;
|
||||
import com.gmail.nossr50.runnables.SaveTimerTask;
|
||||
import com.gmail.nossr50.runnables.database.UserPurgeTask;
|
||||
import com.gmail.nossr50.runnables.party.PartyAutoKickTask;
|
||||
import com.gmail.nossr50.runnables.party.PartyLoaderTask;
|
||||
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
|
||||
import com.gmail.nossr50.runnables.skills.SkillMonitorTask;
|
||||
import com.gmail.nossr50.skills.child.ChildConfig;
|
||||
@@ -63,8 +63,6 @@ public class mcMMO extends JavaPlugin {
|
||||
private final SelfListener selfListener = new SelfListener();
|
||||
private final WorldListener worldListener = new WorldListener();
|
||||
|
||||
private HashMap<Integer, String> tntTracker = new HashMap<Integer, String>();
|
||||
|
||||
public static mcMMO p;
|
||||
|
||||
public static ChunkManager placeStore;
|
||||
@@ -89,10 +87,14 @@ public class mcMMO extends JavaPlugin {
|
||||
private boolean xpEventEnabled = false;
|
||||
|
||||
// Metadata Values
|
||||
public static FixedMetadataValue metadataValue;
|
||||
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
||||
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
||||
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
||||
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
||||
public final static String furnaceMetadataKey = "mcMMO: Tracked Furnace";
|
||||
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 static FixedMetadataValue metadataValue;
|
||||
|
||||
/**
|
||||
* Things to be run when the plugin is enabled.
|
||||
@@ -115,6 +117,8 @@ public class mcMMO extends JavaPlugin {
|
||||
registerEvents();
|
||||
registerCustomRecipes();
|
||||
|
||||
PartyManager.loadParties();
|
||||
|
||||
// Setup the leader boards
|
||||
if (Config.getInstance().getUseMySQL()) {
|
||||
// TODO: Why do we have to check for a connection that hasn't be made yet?
|
||||
@@ -126,7 +130,7 @@ public class mcMMO extends JavaPlugin {
|
||||
}
|
||||
|
||||
for (Player player : getServer().getOnlinePlayers()) {
|
||||
UserManager.addUser(player); // In case of reload add all users back into PlayerProfile
|
||||
UserManager.addUser(player); // In case of reload add all users back into UserManager
|
||||
}
|
||||
|
||||
getLogger().info("Version " + getDescription().getVersion() + " is enabled!");
|
||||
@@ -164,10 +168,11 @@ public class mcMMO extends JavaPlugin {
|
||||
@Override
|
||||
public void onDisable() {
|
||||
try {
|
||||
UserManager.saveAll(); // Make sure to save player information if the server shuts down
|
||||
PartyManager.saveParties();
|
||||
placeStore.saveAll(); // Save our metadata
|
||||
placeStore.cleanUp(); // Cleanup empty metadata stores
|
||||
reloadDisableHelper(); // Prevent Berserk from getting "stuck"
|
||||
UserManager.saveAll(); // Make sure to save player information if the server shuts down
|
||||
PartyManager.saveParties(); // Save our parties
|
||||
placeStore.saveAll(); // Save our metadata
|
||||
placeStore.cleanUp(); // Cleanup empty metadata stores
|
||||
}
|
||||
catch (NullPointerException e) {}
|
||||
|
||||
@@ -196,45 +201,6 @@ public class mcMMO extends JavaPlugin {
|
||||
getLogger().info("Was disabled."); // How informative!
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a set of values to the TNT tracker.
|
||||
*
|
||||
* @param tntID The EntityID of the TNT
|
||||
* @param playerName The name of the detonating player
|
||||
*/
|
||||
public void addToTNTTracker(int tntID, String playerName) {
|
||||
tntTracker.put(tntID, playerName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if a given TNT Entity is tracked.
|
||||
*
|
||||
* @param tntID The EntityID of the TNT
|
||||
* @return true if the TNT is being tracked, false otherwise
|
||||
*/
|
||||
public boolean tntIsTracked(int tntID) {
|
||||
return tntTracker.containsKey(tntID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the player who detonated the TNT.
|
||||
*
|
||||
* @param tntID The EntityID of the TNT
|
||||
* @return the Player who detonated it
|
||||
*/
|
||||
public Player getTNTPlayer(int tntID) {
|
||||
return getServer().getPlayer(tntTracker.get(tntID));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove TNT from the tracker after it explodes.
|
||||
*
|
||||
* @param tntID The EntityID of the TNT
|
||||
*/
|
||||
public void removeFromTNTTracker(int tntID) {
|
||||
tntTracker.remove(tntID);
|
||||
}
|
||||
|
||||
public static String getMainDirectory() {
|
||||
return mainDirectory;
|
||||
}
|
||||
@@ -391,6 +357,7 @@ public class mcMMO extends JavaPlugin {
|
||||
CommandRegistrationManager.registerHardcoreCommand();
|
||||
CommandRegistrationManager.registerVampirismCommand();
|
||||
CommandRegistrationManager.registerMcnotifyCommand();
|
||||
CommandRegistrationManager.registerMobhealthCommand();
|
||||
|
||||
// Spout commands
|
||||
CommandRegistrationManager.registerXplockCommand();
|
||||
@@ -404,9 +371,6 @@ public class mcMMO extends JavaPlugin {
|
||||
}
|
||||
|
||||
private void scheduleTasks() {
|
||||
// Parties are loaded at the end of first server tick otherwise Server.getOfflinePlayer throws an IndexOutOfBoundsException
|
||||
new PartyLoaderTask().runTaskLater(this, 0);
|
||||
|
||||
// Periodic save timer (Saves every 10 minutes by default)
|
||||
long saveIntervalTicks = Config.getInstance().getSaveInterval() * 1200;
|
||||
|
||||
@@ -444,4 +408,17 @@ public class mcMMO extends JavaPlugin {
|
||||
partyAutoKickTask.runTaskTimer(this, kickIntervalTicks, kickIntervalTicks);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Because /reload is the biggest piece of garbage in existence,
|
||||
* we have to do some special checks to keep it from breaking everything.
|
||||
*/
|
||||
private void reloadDisableHelper() {
|
||||
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers().values()) {
|
||||
if (mcMMOPlayer.getAbilityMode(AbilityType.BERSERK)) {
|
||||
mcMMOPlayer.setAbilityMode(AbilityType.BERSERK, false);
|
||||
mcMMOPlayer.getPlayer().setCanPickupItems(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent;
|
||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.runnables.party.PartyLoaderTask;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
@@ -84,7 +85,7 @@ public final class PartyManager {
|
||||
List<Player> nearMembers = new ArrayList<Player>();
|
||||
if (party != null) {
|
||||
for (Player member : party.getOnlineMembers()) {
|
||||
if (!player.getName().equalsIgnoreCase(member.getName()) && Misc.isNear(player.getLocation(), member.getLocation(), range)) {
|
||||
if (!player.getName().equalsIgnoreCase(member.getName()) && !member.isDead() && Misc.isNear(player.getLocation(), member.getLocation(), range)) {
|
||||
nearMembers.add(member);
|
||||
}
|
||||
}
|
||||
@@ -438,6 +439,14 @@ public final class PartyManager {
|
||||
* Load party file.
|
||||
*/
|
||||
public static void loadParties() {
|
||||
try {
|
||||
mcMMO.p.getServer().getOfflinePlayer("nossr50"); // TODO: Find a less-hacky way to manage reloading.
|
||||
}
|
||||
catch (IndexOutOfBoundsException ex){
|
||||
new PartyLoaderTask().runTaskLater(mcMMO.p, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
File file = new File(partiesFilePath);
|
||||
|
||||
if (!file.exists()) {
|
||||
|
||||
@@ -4,7 +4,6 @@ import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -91,9 +90,8 @@ public final class ShareHandler {
|
||||
* @param mcMMOPlayer Player who picked up the item
|
||||
* @return True if the item has been shared
|
||||
*/
|
||||
public static boolean handleItemShare(PlayerPickupItemEvent event, McMMOPlayer mcMMOPlayer) {
|
||||
Item item = event.getItem();
|
||||
ItemStack itemStack = item.getItemStack();
|
||||
public static boolean handleItemShare(Item drop, McMMOPlayer mcMMOPlayer) {
|
||||
ItemStack itemStack = drop.getItemStack();
|
||||
Party party = mcMMOPlayer.getParty();
|
||||
Player player = mcMMOPlayer.getPlayer();
|
||||
Player winningPlayer = null;
|
||||
@@ -126,8 +124,7 @@ public final class ShareHandler {
|
||||
nearMembers.add(player);
|
||||
partySize = nearMembers.size();
|
||||
|
||||
event.setCancelled(true);
|
||||
item.remove();
|
||||
drop.remove();
|
||||
int itemWeight = ItemWeightConfig.getInstance().getItemWeight(itemStack.getType());
|
||||
|
||||
for (int i = 0; i < itemStack.getAmount(); i++) {
|
||||
@@ -172,8 +169,7 @@ public final class ShareHandler {
|
||||
|
||||
partySize = nearMembers.size() + 1;
|
||||
|
||||
event.setCancelled(true);
|
||||
item.remove();
|
||||
drop.remove();
|
||||
|
||||
for (int i = 0; i < itemStack.getAmount(); i++) {
|
||||
int randomMember = Misc.getRandom().nextInt(partySize);
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.gmail.nossr50.runnables;
|
||||
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
|
||||
public class MobHealthDisplayUpdaterTask extends BukkitRunnable {
|
||||
private LivingEntity target;
|
||||
private String oldName;
|
||||
private boolean oldNameVisible;
|
||||
|
||||
public MobHealthDisplayUpdaterTask(LivingEntity target) {
|
||||
if (target.isValid()) {
|
||||
this.target = target;
|
||||
this.oldName = target.getMetadata(mcMMO.customNameKey).get(0).asString();
|
||||
this.oldNameVisible = target.getMetadata(mcMMO.customVisibleKey).get(0).asBoolean();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (target.isValid()) {
|
||||
target.setCustomNameVisible(oldNameVisible);
|
||||
target.setCustomName(oldName);
|
||||
target.removeMetadata(mcMMO.customNameKey, mcMMO.p);
|
||||
target.removeMetadata(mcMMO.customVisibleKey, mcMMO.p);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,14 @@ package com.gmail.nossr50.runnables.items;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.util.ChimaeraWing;
|
||||
import com.gmail.nossr50.util.ItemUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
@@ -25,25 +28,30 @@ public class ChimaeraWingWarmup extends BukkitRunnable {
|
||||
|
||||
private void checkChimaeraWingTeleport() {
|
||||
Player player = mcMMOPlayer.getPlayer();
|
||||
Location previousLocation = mcMMOPlayer.getChimaeraCommenceLocation();
|
||||
Location previousLocation = mcMMOPlayer.getTeleportCommenceLocation();
|
||||
Location newLocation = mcMMOPlayer.getPlayer().getLocation();
|
||||
long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
|
||||
ItemStack inHand = player.getItemInHand();
|
||||
|
||||
if (newLocation.distanceSquared(previousLocation) > 1.0) {
|
||||
player.sendMessage(ChatColor.RED + "Teleportation canceled!"); //TODO Locale!
|
||||
mcMMOPlayer.setTeleportCommenceLocation(null);
|
||||
|
||||
mcMMOPlayer.setChimaeraCommenceLocation(null);
|
||||
if (newLocation.distanceSquared(previousLocation) > 1.0 || !player.getInventory().containsAtLeast(ChimaeraWing.getChimaeraWing(0), 1)) {
|
||||
player.sendMessage(ChatColor.DARK_RED + "Teleportation canceled!"); //TODO Locale!
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)) {
|
||||
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)));
|
||||
|
||||
mcMMOPlayer.setChimaeraCommenceLocation(null);
|
||||
if (!ItemUtils.isChimaeraWing(inHand) || inHand.getAmount() < Config.getInstance().getChimaeraUseCost()) {
|
||||
player.sendMessage(LocaleLoader.getString("Skills.NeedMore", "Chimaera Wings")); //TODO Locale!
|
||||
return;
|
||||
}
|
||||
|
||||
int recentlyhurt_cooldown = Config.getInstance().getChimaeraRecentlyHurtCooldown();
|
||||
|
||||
if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)) {
|
||||
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)));
|
||||
return;
|
||||
}
|
||||
|
||||
ChimaeraWing.chimaeraExecuteTeleport();
|
||||
|
||||
mcMMOPlayer.setChimaeraCommenceLocation(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.gmail.nossr50.runnables.items;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import com.gmail.nossr50.commands.party.teleport.PtpCommand;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.party.PartyManager;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
public class TeleportationWarmup extends BukkitRunnable {
|
||||
private static Player teleportingPlayer;
|
||||
private McMMOPlayer mcMMOPlayer;
|
||||
private static Player targetPlayer;
|
||||
private McMMOPlayer mcMMOTarget;
|
||||
|
||||
public TeleportationWarmup(McMMOPlayer mcMMOPlayer, McMMOPlayer mcMMOTarget) {
|
||||
this.mcMMOPlayer = mcMMOPlayer;
|
||||
this.mcMMOTarget = mcMMOTarget;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
checkPartyTeleport();
|
||||
}
|
||||
|
||||
private void checkPartyTeleport() {
|
||||
teleportingPlayer = mcMMOPlayer.getPlayer();
|
||||
targetPlayer = mcMMOTarget.getPlayer();
|
||||
Location previousLocation = mcMMOPlayer.getTeleportCommenceLocation();
|
||||
Location newLocation = mcMMOPlayer.getPlayer().getLocation();
|
||||
long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
|
||||
|
||||
mcMMOPlayer.setTeleportCommenceLocation(null);
|
||||
|
||||
if (!PartyManager.inSameParty(teleportingPlayer, targetPlayer)) {
|
||||
teleportingPlayer.sendMessage(LocaleLoader.getString("Party.NotInYourParty", targetPlayer.getName()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (newLocation.distanceSquared(previousLocation) > 1.0) {
|
||||
teleportingPlayer.sendMessage(ChatColor.DARK_RED + "Teleportation canceled!"); //TODO Locale!
|
||||
return;
|
||||
}
|
||||
|
||||
int recentlyhurt_cooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
|
||||
|
||||
if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, teleportingPlayer)) {
|
||||
teleportingPlayer.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, teleportingPlayer)));
|
||||
return;
|
||||
}
|
||||
|
||||
PtpCommand.handlePartyTeleportEvent(teleportingPlayer, targetPlayer);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,13 @@
|
||||
package com.gmail.nossr50.skills.fishing;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.Potion;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
|
||||
public final class Fishing {
|
||||
@@ -66,115 +63,70 @@ public final class Fishing {
|
||||
* @param target Targeted entity
|
||||
* @param possibleDrops List of ItemStack that can be dropped
|
||||
*/
|
||||
protected static void findPossibleDrops(LivingEntity target, Map<ItemStack, Integer> possibleDrops) {
|
||||
protected static List<ShakeTreasure> findPossibleDrops(LivingEntity target) {
|
||||
switch (target.getType()) {
|
||||
case BLAZE:
|
||||
possibleDrops.put(new ItemStack(Material.BLAZE_ROD), 100);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromBlaze;
|
||||
|
||||
case CAVE_SPIDER:
|
||||
case SPIDER:
|
||||
possibleDrops.put(new ItemStack(Material.SPIDER_EYE), 50);
|
||||
possibleDrops.put(new ItemStack(Material.STRING), 50);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromCaveSpider;
|
||||
|
||||
case CHICKEN:
|
||||
possibleDrops.put(new ItemStack(Material.FEATHER), 34);
|
||||
possibleDrops.put(new ItemStack(Material.RAW_CHICKEN), 33);
|
||||
possibleDrops.put(new ItemStack(Material.EGG), 33);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromChicken;
|
||||
|
||||
case COW:
|
||||
possibleDrops.put(new ItemStack(Material.MILK_BUCKET), 2);
|
||||
possibleDrops.put(new ItemStack(Material.LEATHER), 49);
|
||||
possibleDrops.put(new ItemStack(Material.RAW_BEEF), 49);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromCow;
|
||||
|
||||
case CREEPER:
|
||||
possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 4), 1);
|
||||
possibleDrops.put(new ItemStack(Material.SULPHUR), 99);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromCreeper;
|
||||
|
||||
case ENDERMAN:
|
||||
possibleDrops.put(new ItemStack(Material.ENDER_PEARL), 100);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromEnderman;
|
||||
|
||||
case GHAST:
|
||||
possibleDrops.put(new ItemStack(Material.SULPHUR), 50);
|
||||
possibleDrops.put(new ItemStack(Material.GHAST_TEAR), 50);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromGhast;
|
||||
|
||||
case IRON_GOLEM:
|
||||
possibleDrops.put(new ItemStack(Material.PUMPKIN), 3);
|
||||
possibleDrops.put(new ItemStack(Material.IRON_INGOT), 12);
|
||||
possibleDrops.put(new ItemStack(Material.RED_ROSE), 85);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromIronGolem;
|
||||
|
||||
case MAGMA_CUBE:
|
||||
possibleDrops.put(new ItemStack(Material.MAGMA_CREAM), 100);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromMagmaCube;
|
||||
|
||||
case MUSHROOM_COW:
|
||||
possibleDrops.put(new ItemStack(Material.MILK_BUCKET), 5);
|
||||
possibleDrops.put(new ItemStack(Material.MUSHROOM_SOUP), 5);
|
||||
possibleDrops.put(new ItemStack(Material.LEATHER), 30);
|
||||
possibleDrops.put(new ItemStack(Material.RAW_BEEF), 30);
|
||||
possibleDrops.put(new ItemStack(Material.RED_MUSHROOM, Misc.getRandom().nextInt(3) + 1), 30);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromMushroomCow;
|
||||
|
||||
case PIG:
|
||||
possibleDrops.put(new ItemStack(Material.PORK), 100);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromPig;
|
||||
|
||||
case PIG_ZOMBIE:
|
||||
possibleDrops.put(new ItemStack(Material.ROTTEN_FLESH), 50);
|
||||
possibleDrops.put(new ItemStack(Material.GOLD_NUGGET), 50);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromPigZombie;
|
||||
|
||||
case SHEEP:
|
||||
possibleDrops.put(new ItemStack(Material.WOOL, Misc.getRandom().nextInt(6) + 1), 100);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromSheep;
|
||||
|
||||
case SKELETON:
|
||||
possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 0), 2);
|
||||
possibleDrops.put(new ItemStack(Material.BONE), 49);
|
||||
possibleDrops.put(new ItemStack(Material.ARROW, Misc.getRandom().nextInt(3) + 1), 49);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromSkeleton;
|
||||
|
||||
case SLIME:
|
||||
possibleDrops.put(new ItemStack(Material.SLIME_BALL), 100);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromSlime;
|
||||
|
||||
case SNOWMAN:
|
||||
possibleDrops.put(new ItemStack(Material.PUMPKIN), 3);
|
||||
possibleDrops.put(new ItemStack(Material.SNOW_BALL, Misc.getRandom().nextInt(4) + 1), 97);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromSnowman;
|
||||
|
||||
case SPIDER:
|
||||
return TreasureConfig.getInstance().shakeFromSpider;
|
||||
|
||||
case SQUID:
|
||||
possibleDrops.put(new ItemStack(Material.INK_SACK, 1, DyeColor.BLACK.getDyeData()), 100);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromSquid;
|
||||
|
||||
case WITCH:
|
||||
possibleDrops.put(new Potion(PotionType.INSTANT_HEAL).toItemStack(1), 1);
|
||||
possibleDrops.put(new Potion(PotionType.FIRE_RESISTANCE).toItemStack(1), 1);
|
||||
possibleDrops.put(new Potion(PotionType.SPEED).toItemStack(1), 1);
|
||||
possibleDrops.put(new ItemStack(Material.GLASS_BOTTLE), 9);
|
||||
possibleDrops.put(new ItemStack(Material.GLOWSTONE_DUST), 13);
|
||||
possibleDrops.put(new ItemStack(Material.SULPHUR), 12);
|
||||
possibleDrops.put(new ItemStack(Material.REDSTONE), 13);
|
||||
possibleDrops.put(new ItemStack(Material.SPIDER_EYE), 12);
|
||||
possibleDrops.put(new ItemStack(Material.STICK), 13);
|
||||
possibleDrops.put(new ItemStack(Material.SUGAR), 12);
|
||||
possibleDrops.put(new ItemStack(Material.POTION), 13);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromWitch;
|
||||
|
||||
case ZOMBIE:
|
||||
possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 2), 2);
|
||||
possibleDrops.put(new ItemStack(Material.ROTTEN_FLESH), 98);
|
||||
break;
|
||||
return TreasureConfig.getInstance().shakeFromZombie;
|
||||
|
||||
default:
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,15 +136,15 @@ public final class Fishing {
|
||||
* @param possibleDrops List of ItemStack that can be dropped
|
||||
* @return Chosen ItemStack
|
||||
*/
|
||||
protected static ItemStack chooseDrop(Map<ItemStack, Integer> possibleDrops) {
|
||||
protected static ItemStack chooseDrop(List<ShakeTreasure> possibleDrops) {
|
||||
int dropProbability = Misc.getRandom().nextInt(100);
|
||||
int cumulatedProbability = 0;
|
||||
double cumulatedProbability = 0;
|
||||
|
||||
for (Entry<ItemStack, Integer> entry : possibleDrops.entrySet()) {
|
||||
cumulatedProbability += entry.getValue();
|
||||
for (ShakeTreasure treasure : possibleDrops) {
|
||||
cumulatedProbability += treasure.getDropChance();
|
||||
|
||||
if (dropProbability < cumulatedProbability) {
|
||||
return entry.getKey();
|
||||
return treasure.getDrop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,12 @@ package com.gmail.nossr50.skills.fishing;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Fish;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -23,6 +22,7 @@ import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.skills.fishing.Fishing.Tier;
|
||||
@@ -41,6 +41,10 @@ public class FishingManager extends SkillManager {
|
||||
return target instanceof LivingEntity && getSkillLevel() >= AdvancedConfig.getInstance().getShakeUnlockLevel() && Permissions.shake(getPlayer());
|
||||
}
|
||||
|
||||
public boolean canMasterAngler() {
|
||||
return Permissions.masterAngler(getPlayer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the loot tier
|
||||
*
|
||||
@@ -86,6 +90,10 @@ public class FishingManager extends SkillManager {
|
||||
return SkillUtils.handleFoodSkills(getPlayer(), skill, eventFoodLevel, Fishing.fishermansDietRankLevel1, Fishing.fishermansDietMaxLevel, rankChange);
|
||||
}
|
||||
|
||||
public void masterAngler(Fish hook) {
|
||||
hook.setBiteChance(Math.min(hook.getBiteChance() * Math.max((getSkillLevel() / 10.0), 1.0), 1.0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the results from a successful fishing trip
|
||||
*
|
||||
@@ -135,11 +143,9 @@ public class FishingManager extends SkillManager {
|
||||
*/
|
||||
public void shakeCheck(LivingEntity target) {
|
||||
if (getShakeProbability() > Misc.getRandom().nextInt(getActivationChance())) {
|
||||
Map<ItemStack, Integer> possibleDrops = new HashMap<ItemStack, Integer>();
|
||||
List<ShakeTreasure> possibleDrops = Fishing.findPossibleDrops(target);
|
||||
|
||||
Fishing.findPossibleDrops(target, possibleDrops);
|
||||
|
||||
if (possibleDrops.isEmpty()) {
|
||||
if (possibleDrops == null || possibleDrops.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -263,17 +269,7 @@ public class FishingManager extends SkillManager {
|
||||
int specificChance = 1;
|
||||
|
||||
for (Enchantment possibleEnchantment : possibleEnchantments) {
|
||||
boolean conflicts = false;
|
||||
|
||||
for (Enchantment currentEnchantment : treasureDrop.getEnchantments().keySet()) {
|
||||
conflicts = currentEnchantment.conflictsWith(possibleEnchantment);
|
||||
|
||||
if (conflicts) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!conflicts && Misc.getRandom().nextInt(specificChance) == 0) {
|
||||
if (!treasureDrop.getItemMeta().hasConflictingEnchant(possibleEnchantment) && Misc.getRandom().nextInt(specificChance) == 0) {
|
||||
treasureDrop.addEnchantment(possibleEnchantment, Misc.getRandom().nextInt(possibleEnchantment.getMaxLevel()) + 1);
|
||||
|
||||
specificChance++;
|
||||
|
||||
@@ -5,12 +5,14 @@ import java.util.List;
|
||||
|
||||
import org.bukkit.CropState;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NetherWartsState;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.material.CocoaPlant;
|
||||
import org.bukkit.material.CocoaPlant.CocoaPlantSize;
|
||||
import org.bukkit.material.NetherWarts;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -307,20 +309,22 @@ public class HerbalismManager extends SkillManager {
|
||||
return true;
|
||||
|
||||
case NETHER_WARTS:
|
||||
NetherWarts warts = (NetherWarts) blockState.getData();
|
||||
|
||||
if (greenTerra) {
|
||||
blockState.setRawData((byte) 2);
|
||||
warts.setState(NetherWartsState.STAGE_TWO);
|
||||
}
|
||||
else {
|
||||
int greenThumbStage = getGreenThumbStage();
|
||||
|
||||
if (greenThumbStage > 2) {
|
||||
blockState.setRawData((byte) 2);
|
||||
warts.setState(NetherWartsState.STAGE_TWO);
|
||||
}
|
||||
else if (greenThumbStage == 2) {
|
||||
blockState.setRawData((byte) 1);
|
||||
warts.setState(NetherWartsState.STAGE_ONE);
|
||||
}
|
||||
else {
|
||||
blockState.setRawData((byte) 0);
|
||||
warts.setState(NetherWartsState.SEEDED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.bukkit.block.BlockState;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
@@ -100,7 +101,7 @@ public class MiningManager extends SkillManager{
|
||||
SkillUtils.sendSkillMessage(player, AbilityType.BLAST_MINING.getAbilityPlayer(player));
|
||||
player.sendMessage(LocaleLoader.getString("Mining.Blast.Boom"));
|
||||
|
||||
mcMMO.p.addToTNTTracker(tnt.getEntityId(), player.getName());
|
||||
tnt.setMetadata(mcMMO.tntMetadataKey, new FixedMetadataValue(mcMMO.p, player.getName()));
|
||||
tnt.setFuseTicks(0);
|
||||
targetBlock.setData((byte) 0x0);
|
||||
targetBlock.setType(Material.AIR);
|
||||
|
||||
@@ -194,6 +194,7 @@ public class TamingManager extends SkillManager {
|
||||
((Ocelot) entity).setCatType(Ocelot.Type.getType(1 + Misc.getRandom().nextInt(3)));
|
||||
}
|
||||
else {
|
||||
entity.setMaxHealth(20);
|
||||
entity.setHealth(entity.getMaxHealth());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package com.gmail.nossr50.skills.unarmed;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
|
||||
@@ -19,4 +25,61 @@ public class Unarmed {
|
||||
public static boolean blockCrackerSmoothBrick = Config.getInstance().getUnarmedBlockCrackerSmoothbrickToCracked();
|
||||
|
||||
public static double berserkDamageModifier = 1.5;
|
||||
|
||||
public static boolean handleItemPickup(PlayerInventory inventory, Item drop) {
|
||||
ItemStack dropStack = drop.getItemStack();
|
||||
int firstEmpty = inventory.firstEmpty();
|
||||
|
||||
if (inventory.containsAtLeast(dropStack, 1)) {
|
||||
int dropAmount = dropStack.getAmount();
|
||||
int nextSlot = 0;
|
||||
|
||||
for (Iterator<ItemStack> iterator = inventory.iterator(); iterator.hasNext();) {
|
||||
ItemStack itemstack = iterator.next();
|
||||
|
||||
if (dropStack.isSimilar(itemstack)) {
|
||||
int itemAmount = itemstack.getAmount();
|
||||
int itemMax = itemstack.getMaxStackSize();
|
||||
|
||||
ItemStack addStack = itemstack.clone();
|
||||
|
||||
if (dropAmount + itemAmount <= itemMax) {
|
||||
drop.remove();
|
||||
addStack.setAmount(dropAmount + itemAmount);
|
||||
inventory.setItem(nextSlot, addStack);
|
||||
return true;
|
||||
}
|
||||
|
||||
addStack.setAmount(itemMax);
|
||||
dropAmount = dropAmount + itemAmount - itemMax;
|
||||
inventory.setItem(nextSlot, addStack);
|
||||
}
|
||||
|
||||
if (dropAmount == 0) {
|
||||
drop.remove();
|
||||
return true;
|
||||
}
|
||||
|
||||
nextSlot++;
|
||||
}
|
||||
}
|
||||
|
||||
if (firstEmpty == inventory.getHeldItemSlot()) {
|
||||
int nextSlot = firstEmpty + 1;
|
||||
|
||||
for (Iterator<ItemStack> iterator = inventory.iterator(nextSlot); iterator.hasNext();) {
|
||||
ItemStack itemstack = iterator.next();
|
||||
|
||||
if (itemstack == null) {
|
||||
drop.remove();
|
||||
inventory.setItem(nextSlot, dropStack);
|
||||
return true;
|
||||
}
|
||||
|
||||
nextSlot++;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import org.bukkit.CropState;
|
||||
import org.bukkit.NetherWartsState;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.material.CocoaPlant;
|
||||
import org.bukkit.material.CocoaPlant.CocoaPlantSize;
|
||||
import org.bukkit.material.NetherWarts;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
|
||||
@@ -30,6 +32,8 @@ public final class BlockUtils {
|
||||
case GOLD_ORE:
|
||||
case GRASS:
|
||||
case GRAVEL:
|
||||
case HUGE_MUSHROOM_1:
|
||||
case HUGE_MUSHROOM_2:
|
||||
case IRON_ORE:
|
||||
case LAPIS_ORE:
|
||||
case LOG:
|
||||
@@ -51,10 +55,20 @@ public final class BlockUtils {
|
||||
case VINE:
|
||||
case WATER_LILY:
|
||||
case YELLOW_FLOWER:
|
||||
case COCOA:
|
||||
case EMERALD_ORE:
|
||||
return true;
|
||||
|
||||
case CARROT:
|
||||
case CROPS:
|
||||
case POTATO:
|
||||
return blockState.getRawData() == CropState.RIPE.getData();
|
||||
|
||||
case NETHER_WARTS:
|
||||
return ((NetherWarts) blockState.getData()).getState() == NetherWartsState.RIPE;
|
||||
|
||||
case COCOA:
|
||||
return ((CocoaPlant) blockState.getData()).getSize() == CocoaPlantSize.LARGE;
|
||||
|
||||
default:
|
||||
return ModUtils.getCustomBlock(blockState) != null;
|
||||
}
|
||||
@@ -182,7 +196,7 @@ public final class BlockUtils {
|
||||
return blockState.getRawData() == CropState.RIPE.getData();
|
||||
|
||||
case NETHER_WARTS:
|
||||
return blockState.getRawData() == (byte) 0x3;
|
||||
return ((NetherWarts) blockState.getData()).getState() == NetherWartsState.RIPE;
|
||||
|
||||
case COCOA:
|
||||
return ((CocoaPlant) blockState.getData()).getSize() == CocoaPlantSize.LARGE;
|
||||
|
||||
@@ -46,20 +46,22 @@ public final class ChimaeraWing {
|
||||
location = player.getLocation();
|
||||
int amount = inHand.getAmount();
|
||||
long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
|
||||
long lastChimaeraWing = mcMMOPlayer.getLastChimaeraTeleport();
|
||||
long lastTeleport = mcMMOPlayer.getLastTeleport();
|
||||
|
||||
if (Permissions.chimaeraWing(player) && ItemUtils.isChimaeraWing(inHand)) {
|
||||
if (mcMMOPlayer.getChimaeraCommenceLocation() != null) {
|
||||
if (mcMMOPlayer.getTeleportCommenceLocation() != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SkillUtils.cooldownOver(lastChimaeraWing * Misc.TIME_CONVERSION_FACTOR, Config.getInstance().getChimaeraCooldown(), player)) {
|
||||
player.sendMessage(ChatColor.RED + "You need to wait before you can use this again! " + ChatColor.YELLOW + "(" + SkillUtils.calculateTimeLeft(lastChimaeraWing * Misc.TIME_CONVERSION_FACTOR, Config.getInstance().getChimaeraCooldown(), player) + ")"); //TODO Locale!
|
||||
if (Config.getInstance().getChimaeraCooldown() > 0 && !SkillUtils.cooldownOver(lastTeleport * Misc.TIME_CONVERSION_FACTOR, Config.getInstance().getChimaeraCooldown(), player)) {
|
||||
player.sendMessage(ChatColor.RED + "You need to wait before you can use this again! " + ChatColor.YELLOW + "(" + SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, Config.getInstance().getChimaeraCooldown(), player) + ")"); //TODO Locale!
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)) {
|
||||
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, 60, player)));
|
||||
int recentlyhurt_cooldown = Config.getInstance().getChimaeraRecentlyHurtCooldown();
|
||||
|
||||
if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)) {
|
||||
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -69,21 +71,27 @@ public final class ChimaeraWing {
|
||||
}
|
||||
|
||||
if (Config.getInstance().getChimaeraPreventUseUnderground()) {
|
||||
|
||||
if (location.getY() < player.getWorld().getHighestBlockYAt(location)) {
|
||||
player.setItemInHand(new ItemStack(getChimaeraWing(amount - Config.getInstance().getChimaeraUseCost())));
|
||||
player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Fail"));
|
||||
player.setVelocity(new Vector(0, 0.5D, 0));
|
||||
CombatUtils.dealDamage(player, Misc.getRandom().nextInt(player.getHealth() - 10));
|
||||
mcMMOPlayer.actualizeLastChimaeraTeleport();
|
||||
mcMMOPlayer.actualizeLastTeleport();
|
||||
return;
|
||||
}
|
||||
}
|
||||
mcMMOPlayer.actualizeChimaeraCommenceLocation(player);
|
||||
|
||||
mcMMOPlayer.actualizeTeleportCommenceLocation(player);
|
||||
|
||||
long warmup = Config.getInstance().getChimaeraWarmup();
|
||||
player.sendMessage(ChatColor.GRAY + "Commencing teleport in " + ChatColor.GOLD + "(" + warmup + ")" + ChatColor.GRAY + " seconds, please stand still..."); //TODO Locale!
|
||||
new ChimaeraWingWarmup(mcMMOPlayer).runTaskLater(mcMMO.p, 20 * warmup);
|
||||
|
||||
if (warmup > 0) {
|
||||
player.sendMessage(ChatColor.GRAY + "Commencing teleport in " + ChatColor.GOLD + "(" + warmup + ")" + ChatColor.GRAY + " seconds, please stand still..."); //TODO Locale!
|
||||
new ChimaeraWingWarmup(mcMMOPlayer).runTaskLater(mcMMO.p, 20 * warmup);
|
||||
}
|
||||
else {
|
||||
chimaeraExecuteTeleport();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,20 +112,26 @@ public final class ChimaeraWing {
|
||||
}
|
||||
|
||||
player.setItemInHand(new ItemStack(getChimaeraWing(player.getItemInHand().getAmount() - Config.getInstance().getChimaeraUseCost())));
|
||||
UserManager.getPlayer(player).actualizeLastChimaeraTeleport();
|
||||
MetricsManager.chimeraWingUsed();
|
||||
UserManager.getPlayer(player).actualizeLastTeleport();
|
||||
if (Config.getInstance().getStatsTrackingEnabled()) {
|
||||
MetricsManager.chimeraWingUsed();
|
||||
}
|
||||
player.playSound(location, Sound.BAT_TAKEOFF, Misc.BAT_VOLUME, Misc.BAT_PITCH);
|
||||
player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Pass"));
|
||||
}
|
||||
|
||||
public static ItemStack getChimaeraWing(int amount) {
|
||||
ItemStack itemStack = new ItemStack(Material.FEATHER, amount);
|
||||
Material ingredient = Material.getMaterial(Config.getInstance().getChimaeraItemId());
|
||||
ItemStack itemStack = new ItemStack(ingredient, amount);
|
||||
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
itemMeta.setDisplayName(ChatColor.GOLD + "Chimaera Wing"); //TODO Locale!
|
||||
|
||||
List<String> itemLore = new ArrayList<String>();
|
||||
itemLore.add("mcMMO Item");
|
||||
itemLore.add(ChatColor.GRAY + "Teleports you to your bed."); //TODO Locale!
|
||||
itemMeta.setLore(itemLore);
|
||||
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@@ -189,6 +189,14 @@ public final class Misc {
|
||||
}
|
||||
}
|
||||
|
||||
public static void resendChunkRadiusAt(Player player, int radius) {
|
||||
for (int x = player.getLocation().getChunk().getX() - radius; x < player.getLocation().getChunk().getX() + radius; x++) {
|
||||
for (int z = player.getLocation().getChunk().getZ() - radius; z < player.getLocation().getChunk().getZ() + radius; z++) {
|
||||
player.getWorld().refreshChunk(x, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Random getRandom() {
|
||||
return random;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ public final class Permissions {
|
||||
*/
|
||||
|
||||
public static boolean motd(Permissible permissible) { return permissible.hasPermission("mcmmo.motd"); }
|
||||
public static boolean mobHealthDisplay(Permissible permissible) { return permissible.hasPermission("mcmmo.mobhealthdisplay"); }
|
||||
public static boolean updateNotifications(Permissible permissible) {return permissible.hasPermission("mcmmo.tools.updatecheck"); }
|
||||
public static boolean chimaeraWing(Permissible permissible) { return permissible.hasPermission("mcmmo.item.chimaerawing"); }
|
||||
|
||||
@@ -142,6 +143,7 @@ public final class Permissions {
|
||||
public static boolean fishermansDiet(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.fishermansdiet"); }
|
||||
public static boolean fishingTreasureHunter(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.treasures"); }
|
||||
public static boolean magicHunter(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.magic"); }
|
||||
public static boolean masterAngler(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.masterangler"); }
|
||||
public static boolean shake(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.fishing.shakemob"); }
|
||||
|
||||
/* HERBALISM */
|
||||
@@ -213,10 +215,11 @@ public final class Permissions {
|
||||
*/
|
||||
|
||||
public static boolean party(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.party"); }
|
||||
public static boolean partySubcommand(Permissible permissible, PartySubcommandType subcommand) {return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase()); }
|
||||
public static boolean partySubcommand(Permissible permissible, PartySubcommandType subcommand) { return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase()); }
|
||||
public static boolean friendlyFire(Permissible permissible) { return permissible.hasPermission("mcmmo.party.friendlyfire"); }
|
||||
|
||||
/* TELEPORT */
|
||||
public static boolean partyTeleportSend(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.ptp.send"); }
|
||||
public static boolean partyTeleportAccept(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.ptp.accept"); }
|
||||
public static boolean partyTeleportAcceptAll(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.ptp.acceptall"); }
|
||||
public static boolean partyTeleportToggle(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.ptp.toggle"); }
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.gmail.nossr50.commands.McgodCommand;
|
||||
import com.gmail.nossr50.commands.McmmoCommand;
|
||||
import com.gmail.nossr50.commands.McnotifyCommand;
|
||||
import com.gmail.nossr50.commands.McrefreshCommand;
|
||||
import com.gmail.nossr50.commands.MobhealthCommand;
|
||||
import com.gmail.nossr50.commands.XprateCommand;
|
||||
import com.gmail.nossr50.commands.chat.AdminChatCommand;
|
||||
import com.gmail.nossr50.commands.chat.PartyChatCommand;
|
||||
@@ -366,4 +367,13 @@ public final class CommandRegistrationManager {
|
||||
command.setUsage(LocaleLoader.getString("Commands.Usage.0", "mcnotify"));
|
||||
command.setExecutor(new McnotifyCommand());
|
||||
}
|
||||
|
||||
public static void registerMobhealthCommand() {
|
||||
PluginCommand command = mcMMO.p.getCommand("mobhealth");
|
||||
command.setDescription("Change the style of the mob healthbar"); //TODO: Localize
|
||||
command.setPermission("mcmmo.commands.mobhealth");
|
||||
command.setPermissionMessage(permissionsMessage);
|
||||
command.setUsage(LocaleLoader.getString("Commands.Usage.1", "mobhealth", "<DISABLED | HEARTS | BAR>"));
|
||||
command.setExecutor(new MobhealthCommand());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.gmail.nossr50.util.commands;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@@ -13,7 +15,12 @@ import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public final class CommandUtils {
|
||||
public static final List<String> TRUE_FALSE_OPTIONS = ImmutableList.of("on", "off", "true", "false", "enabled", "disabled");
|
||||
public static final List<String> RESET_OPTIONS = ImmutableList.of("clear", "reset");
|
||||
|
||||
private CommandUtils() {}
|
||||
|
||||
public static boolean isChildSkill(CommandSender sender, SkillType skill) {
|
||||
|
||||
@@ -13,7 +13,7 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
|
||||
public final class UserManager {
|
||||
private static Map<String, McMMOPlayer> players = new HashMap<String, McMMOPlayer>();
|
||||
private final static Map<String, McMMOPlayer> players = new HashMap<String, McMMOPlayer>();
|
||||
|
||||
private UserManager() {};
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.gmail.nossr50.util.skills;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.AnimalTamer;
|
||||
import org.bukkit.entity.Animals;
|
||||
@@ -17,15 +18,19 @@ import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerAnimationEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
|
||||
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.party.PartyManager;
|
||||
import com.gmail.nossr50.runnables.MobHealthDisplayUpdaterTask;
|
||||
import com.gmail.nossr50.runnables.skills.AwardCombatXpTask;
|
||||
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
|
||||
import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager;
|
||||
@@ -284,6 +289,40 @@ public final class CombatUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (attacker instanceof Player) {
|
||||
Player player = (Player) attacker;
|
||||
PlayerProfile profile = UserManager.getPlayer(player).getProfile();
|
||||
|
||||
if (Permissions.mobHealthDisplay(player) && profile.getMobHealthbarType() != MobHealthbarType.DISABLED) {
|
||||
String oldName = target.getCustomName();
|
||||
boolean oldNameVisible = target.isCustomNameVisible();
|
||||
String newName = createHealthDisplay(profile, target, event.getDamage());
|
||||
|
||||
target.setCustomName(newName);
|
||||
target.setCustomNameVisible(true);
|
||||
|
||||
int displayTime = Config.getInstance().getMobHealthbarTime();
|
||||
|
||||
if (displayTime != -1) {
|
||||
if (oldName == null) {
|
||||
oldName = "";
|
||||
}
|
||||
|
||||
boolean updateName = !ChatColor.stripColor(oldName).equalsIgnoreCase(ChatColor.stripColor(newName));
|
||||
|
||||
if (updateName) {
|
||||
target.setMetadata(mcMMO.customNameKey, new FixedMetadataValue(mcMMO.p, oldName));
|
||||
target.setMetadata(mcMMO.customVisibleKey, new FixedMetadataValue(mcMMO.p, oldNameVisible));
|
||||
}
|
||||
else if (!target.hasMetadata(mcMMO.customNameKey)) {
|
||||
target.setMetadata(mcMMO.customNameKey, new FixedMetadataValue(mcMMO.p, ""));
|
||||
target.setMetadata(mcMMO.customVisibleKey, new FixedMetadataValue(mcMMO.p, false));
|
||||
}
|
||||
|
||||
new MobHealthDisplayUpdaterTask(target).runTaskLater(mcMMO.p, displayTime * 20); // Clear health display after 3 seconds
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -583,4 +622,67 @@ public final class CombatUtils {
|
||||
|
||||
return process;
|
||||
}
|
||||
|
||||
private static String createHealthDisplay(PlayerProfile profile, LivingEntity entity, int damage) {
|
||||
int maxHealth = entity.getMaxHealth();
|
||||
int currentHealth = Math.max(entity.getHealth() - damage, 0);
|
||||
double healthPercentage = (currentHealth / (double) maxHealth) * 100.0D;
|
||||
|
||||
int fullDisplay = 0;
|
||||
ChatColor color = ChatColor.BLACK;
|
||||
String symbol = "";
|
||||
|
||||
switch (profile.getMobHealthbarType()) {
|
||||
case HEARTS:
|
||||
fullDisplay = Math.min(maxHealth / 2, 10);
|
||||
color = ChatColor.DARK_RED;
|
||||
symbol = "❤";
|
||||
break;
|
||||
|
||||
case BAR:
|
||||
fullDisplay = 10;
|
||||
|
||||
if (healthPercentage >= 85) {
|
||||
color = ChatColor.DARK_GREEN;
|
||||
}
|
||||
else if (healthPercentage >= 70) {
|
||||
color = ChatColor.GREEN;
|
||||
}
|
||||
else if (healthPercentage >= 55) {
|
||||
color = ChatColor.GOLD;
|
||||
}
|
||||
else if (healthPercentage >= 40) {
|
||||
color = ChatColor.YELLOW;
|
||||
}
|
||||
else if (healthPercentage >= 25) {
|
||||
color = ChatColor.RED;
|
||||
}
|
||||
else if (healthPercentage >= 0) {
|
||||
color = ChatColor.DARK_RED;
|
||||
}
|
||||
|
||||
symbol = "■";
|
||||
break;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
int coloredDisplay = (int) (fullDisplay * (healthPercentage / 100.0D));
|
||||
int grayDisplay = fullDisplay - coloredDisplay;
|
||||
|
||||
String healthbar = color + "";
|
||||
|
||||
for (int i = 0; i < coloredDisplay; i++) {
|
||||
healthbar += symbol;
|
||||
}
|
||||
|
||||
healthbar += ChatColor.GRAY;
|
||||
|
||||
for (int i = 0; i < grayDisplay; i++) {
|
||||
healthbar += symbol;
|
||||
}
|
||||
|
||||
return healthbar;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,6 +187,10 @@ public class SkillUtils {
|
||||
handleAbilitySpeedDecrease(player);
|
||||
}
|
||||
|
||||
if (HiddenConfig.getInstance().resendChunksAfterBlockAbility() && (ability == AbilityType.BERSERK || ability == AbilityType.SUPER_BREAKER || ability == AbilityType.GIGA_DRILL_BREAKER)) {
|
||||
Misc.resendChunkRadiusAt(player, 1);
|
||||
}
|
||||
|
||||
mcMMOPlayer.setAbilityMode(ability, false);
|
||||
mcMMOPlayer.setAbilityInformed(ability, false);
|
||||
|
||||
@@ -499,10 +503,10 @@ public class SkillUtils {
|
||||
int ticks = 0;
|
||||
|
||||
if (mcMMOPlayer.getAbilityMode(AbilityType.SUPER_BREAKER)) {
|
||||
ticks = ((int) (mcMMOPlayer.getProfile().getSkillDATS(AbilityType.SUPER_BREAKER) - System.currentTimeMillis())) / Misc.TIME_CONVERSION_FACTOR;
|
||||
ticks = ((int) (mcMMOPlayer.getProfile().getSkillDATS(AbilityType.SUPER_BREAKER) - (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR))) * 20;
|
||||
}
|
||||
else if (mcMMOPlayer.getAbilityMode(AbilityType.GIGA_DRILL_BREAKER)) {
|
||||
ticks = ((int) (mcMMOPlayer.getProfile().getSkillDATS(AbilityType.GIGA_DRILL_BREAKER) - System.currentTimeMillis())) / Misc.TIME_CONVERSION_FACTOR;
|
||||
ticks = ((int) (mcMMOPlayer.getProfile().getSkillDATS(AbilityType.GIGA_DRILL_BREAKER) - (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR))) * 20;
|
||||
}
|
||||
|
||||
PotionEffect abilityBuff = new PotionEffect(PotionEffectType.FAST_DIGGING, duration + ticks, amplifier + 10);
|
||||
|
||||
@@ -27,6 +27,12 @@ General:
|
||||
# Should mcMMO over-write configs to update, or make new ones ending in .new?
|
||||
Config_Update_Overwrite: true
|
||||
|
||||
Mob_Healthbar:
|
||||
# Default display for mob health bars - HEARTS, BAR, or DISABLED
|
||||
Display_Type: HEARTS
|
||||
# Amount of time (in seconds) to display. To display permanently, set to -1
|
||||
Display_Time: 3
|
||||
|
||||
Database_Purging:
|
||||
# Amount of time (in hours) to wait between database purging
|
||||
# To only run at server start, set to 0
|
||||
@@ -74,6 +80,7 @@ Items:
|
||||
Enabled: true
|
||||
Cooldown: 240
|
||||
Warmup: 5
|
||||
RecentlyHurt_Cooldown: 60
|
||||
Prevent_Use_Underground: true
|
||||
Use_Cost: 1
|
||||
Recipe_Cost: 5
|
||||
@@ -349,7 +356,9 @@ Commands:
|
||||
mcmmo:
|
||||
Donate_Message: true
|
||||
ptp:
|
||||
Cooldown: 30
|
||||
Cooldown: 120
|
||||
Warmup: 5
|
||||
RecentlyHurt_Cooldown: 60
|
||||
Confirm_Required: true
|
||||
Request_Timeout: 300
|
||||
# If true, require players to have a mcmmo.commands.ptp.world.[WorldName] permission
|
||||
@@ -368,8 +377,13 @@ Particles:
|
||||
# These settings determine if fireworks should get launched when a player activates/deactivates an ability
|
||||
Ability_Activation: true
|
||||
Ability_Deactivation: true
|
||||
|
||||
|
||||
# Use particle effect when these abilities trigger
|
||||
Dodge: true
|
||||
Bleed: true
|
||||
Greater_Impact: true
|
||||
|
||||
# These settings determine if fireworks should get launched when a player levels-up,
|
||||
# this will happen by default for every 100 levels.
|
||||
LevelUp_Enabled: true
|
||||
LevelUp_Tier: 100
|
||||
|
||||
@@ -8,4 +8,6 @@ Options:
|
||||
# Square root of the number of chunks to convert per tick.
|
||||
ConversionRate: 1
|
||||
# true to use enchantment buffs for Super Breaker & Giga Drill Breaker, false to use potion buffs
|
||||
EnchantmentBuffs: true
|
||||
EnchantmentBuffs: true
|
||||
# true to enable refreshing of chunks around a player at the end of Super Breaker, Giga Drill Breaker, and Berserk. This should fix blocks being broken client side, but not server-side
|
||||
RefreshChunks: false
|
||||
|
||||
@@ -90,9 +90,12 @@ Fishing.SkillName=RYBARENI
|
||||
Fishing.Skillup=[[YELLOW]]Dovednost v rybareni byla navysena o {0}. Celkem ({1})
|
||||
Herbalism.Ability.DoubleDropChance=[[RED]]\u0160ance na dvojn\u00e1sobn\u00fd zisk: [[YELLOW]]{0}
|
||||
Herbalism.Ability.GTe.Length=[[RED]]D\u00e9lka trv\u00e1n\u00ed Zelen\u00e9 planety: [[YELLOW]]{0}s
|
||||
Herbalism.Ability.GTe.NeedMore=[[RED]]Bude\u0161 pot\u0159ebovat v\u00edc sem\u00ednek pro Green Tera.
|
||||
Herbalism.Ability.GTh.Chance=[[RED]]\u0160ance na dovednost Zahradn\u00edk: [[YELLOW]]{0}
|
||||
Herbalism.Ability.GTh.Fail=[[RED]]**ZAHRADN\u00cdK SELHAL**
|
||||
Herbalism.Ability.GTh.Stage=[[RED]] Zahradn\u00edk Stage: [[\u017dlut\u00e9]] Plodiny rostou ve st\u00e1diu {0}
|
||||
Herbalism.Ability.GTh=[[GREEN]]**ZAHRADNIK**
|
||||
Herbalism.Ability.HylianLuck=[[RED]]Hylian Luck zm\u011bn\u011bn: [[YELLOW]]{0}
|
||||
Herbalism.Ability.Lower=[[GRAY]]**SKLONIL JSI SVOJI MOTYKU**
|
||||
Herbalism.Ability.Ready=[[GREEN]]**PRIPRAVIL JSI SVOU MOTYKU**
|
||||
Herbalism.Effect.0=Green Terra (SCHOPNOST)
|
||||
@@ -105,6 +108,8 @@ Herbalism.Effect.6=Farm\u00e1\u0159\u016fv apetit
|
||||
Herbalism.Effect.7=Zvysuje obnovu hladu ze sklizenych jidel
|
||||
Herbalism.Effect.8=Dvojnasobny zisk (vsechny byliny)
|
||||
Herbalism.Effect.9=Zdvojnasobi normalni zisk
|
||||
Herbalism.Effect.11=D\u00e1v\u00e1 malou \u0161anci naj\u00edt vz\u00e1cn\u00e9 p\u0159edm\u011bty
|
||||
Herbalism.HylianLuck=[[GREEN]]The luck of Hyrule t\u011b doprov\u00e1z\u00ed!
|
||||
Herbalism.Listener=Bylinarstvi:
|
||||
Herbalism.SkillName=Bylinkarstvi
|
||||
Herbalism.Skills.GTe.Off=[[RED]]**Green Terra byla deaktivovana**
|
||||
@@ -159,6 +164,7 @@ Repair.Effect.6=Oprava diamantovych predmetu ({0}+ SKILL)
|
||||
Repair.Effect.7=Oprava diamantovych nastroju a brneni
|
||||
Repair.Effect.8=Tajemne kovani
|
||||
Repair.Effect.9=Oprava enchantovanych predmetu
|
||||
Repair.Error=[[DARK_RED]]V mcMMO do\u0161lo k chyb\u011b p\u0159i oprav\u011b tohoto itemu!
|
||||
Repair.Listener.Anvil=[[DARK_RED]]Polo\u017eil si kovadlinu, na kovadlin\u011b m\u016f\u017ee\u0161 opravovat n\u00e1stroje a zbroj.
|
||||
Repair.Listener.Anvil2=[[DARK_RED]]Polozil jsi Salvage kovadlinu, pouzij ji na zachranu armoru.
|
||||
Repair.Listener=Opravovani:
|
||||
@@ -170,6 +176,7 @@ Repair.Skills.AdeptStone=[[DARK_RED]]Nemas dostatek dovednosti pro opravu Kamenn
|
||||
Repair.Skills.Adept=[[RED]]Mus\u00ed\u0161 m\u00edt level [[YELLOW]]{0}[[RED]] k oprav\u011b [[YELLOW]]{1}
|
||||
Repair.Skills.FeltEasy=[[GRAY]]To bylo snadn\u00e9.
|
||||
Repair.Skills.FullDurability=[[GRAY]]Tento p\u0159edm\u011bt nen\u00ed po\u0161kozen\u00fd.
|
||||
Repair.Skills.SalvageSuccess=[[GRAY]] Item zachr\u00e1n\u011bn!
|
||||
Repair.Skills.Mastery=[[RED]]Mistrovstvi v opravovani: [[YELLOW]]Extra {0} \u017eivotnosti obnovena
|
||||
Repair.Skills.StackedItems=[[DARK_RED]]Nem\u016f\u017ee\u0161 opravovat nestackovan\u00e9 p\u0159edm\u011bty.
|
||||
Repair.Skills.Super.Chance=[[RED]]\u0160ance na superopravov\u00e1n\u00ed: [[YELLOW]]{0}
|
||||
@@ -245,6 +252,7 @@ Unarmed.Ability.Bonus.0=Styl \u017eelezn\u00e9 pa\u017ee
|
||||
Unarmed.Ability.Bonus.1=+{0} Zv\u00fd\u0161en\u00ed zran\u011bn\u00ed
|
||||
Unarmed.Ability.Chance.ArrowDeflect=[[RED]]\u0160ance na vych\u00edlen\u00ed \u0161\u00edpu: [[YELLOW]]{0}
|
||||
Unarmed.Ability.Chance.Disarm=[[RED]]\u0160ance na odzbrojen\u00ed: [[YELLOW]]{0}
|
||||
Unarmed.Ability.IronGrip.Attacker=[[RED]] Tv\u016fj soupe\u0159 m\u00e1 \u017eelezn\u00e9 sev\u0159en\u00ed!
|
||||
Unarmed.Ability.Lower=[[GRAY]]**SKL\u00c1N\u00cd\u0160 SV\u00c9 P\u011aSTI**
|
||||
Unarmed.Ability.Ready=[[GREEN]]**PRIPRAVIL JSI SVOJE PESTI**
|
||||
Unarmed.Effect.0=B\u011bsn\u011bn\u00ed (SCHOPNOST)
|
||||
@@ -294,11 +302,15 @@ Combat.Gore=[[GREEN]]**PRUNIK**
|
||||
Combat.StruckByGore=[[RED]]**BYL JSI PROBODNUT**
|
||||
Combat.TargetDazed=C\u00edl byl [[DARK_RED]]Omr\u00e1\u010den
|
||||
Combat.TouchedFuzzy=[[DARK_RED]]Nejasne dotcen. Mas zavrat.
|
||||
Commands.addlevels.AwardAll.2=[[RED]]V\u0161echny schopnosti byly zm\u011bn\u011bny na {0}.
|
||||
Commands.addlevels.AwardSkill.1=[[GREEN]]Tvoje dovednost {1} je nyn\u00ed {0}!
|
||||
Commands.addxp.AwardSkill=[[GREEN]]Z\u00edskal si {0} zku\u0161enost\u00ed v {1}!
|
||||
Commands.Ability.Off=Pou\u017eit\u00ed schopnosti bylo [[RED]] vypnuto
|
||||
Commands.Ability.On=Pou\u017eit\u00ed schopnosti bylo [[GREEN]]zapnuto
|
||||
Commands.AdminChat.Off=Admin chat [[RED]]Vypnuty
|
||||
Commands.AdminChat.On=Admin Chat[[GREEN]]Zapnut\u00fd
|
||||
Commands.AdminToggle=[[RED]]- Prepnout admin chat
|
||||
Commands.Chat.Console=*\u0158\u00edd\u00edc\u00ed panel*
|
||||
Commands.Disabled=[[RED]]Tento prikaz je vypnuty.
|
||||
Commands.DoesNotExist=[[RED]]Hrac se v databaze nenachazi!
|
||||
Commands.GodMode.Disabled=[[YELLOW]]mcMMO Godmod vypnuty
|
||||
@@ -310,9 +322,12 @@ Commands.Invite.Success=[[GREEN]]Pozv\u00e1nka \u00faspesne odesl\u00e1na.
|
||||
Commands.Leaderboards=<skill> <page> [[RED]]- Tabulka nejlep\u0161\u00edch
|
||||
Commands.mcgod=[[RED]]- Prepnout GodMod
|
||||
Commands.mchud.Invalid=Nespr\u00e1vn\u00fd typ HUD.
|
||||
Commands.mcpurge.Success=[[GREEN]]Datab\u00e1ze byla \u00fasp\u011b\u0161n\u011b vy\u010dist\u011bna!
|
||||
Commands.mcrank.Heading=[[GOLD]]-=OSOBN\u00cd HODNOCEN\u00cd=-
|
||||
Commands.mcremove.Success=[[GREEN]]{0} byl \u00fasp\u011b\u0161n\u011b vymaz\u00e1n z datab\u00e1ze!
|
||||
Commands.mctop.Tip=[[GOLD]]Tip: Pro osobn\u00ed statistiky pou\u017eij [[RED]]/mcrank[[GOLD]]!
|
||||
Commands.mmoedit=[player] <skill> <newvalue> [[RED]] - Modify target
|
||||
Commands.mmoedit.Modified.1=[[GREEN]]Tv\u016fj skill v {0} byl pozm\u011bn\u011bn na {1}!
|
||||
Commands.ModDescription=[[RED]]- Precti si strucny popis pluginu
|
||||
Commands.NoConsole=Tento prikaz nepodporuje pouziti z konzole.
|
||||
Commands.Other=[[GREEN]]--OSTATNI PRIKAZY--
|
||||
@@ -332,7 +347,8 @@ Commands.Party.Toggle=[[RED]]- Zapnout party chat
|
||||
Commands.PowerLevel.Leaderboard=[[YELLOW]]--mcMMO[[BLUE]] Rebricek [[YELLOW]]Celkovych levelu--
|
||||
Commands.PowerLevel=[[DARK_RED]]CELKOVY LEVEL: [[GREEN]]{0}
|
||||
Commands.Reset.All=[[GREEN]] Vsechny vase dovednosti byli byli uspesne resetov\u00e1ny.
|
||||
Commands.Reset.Single=[[GREEN]] Vsechny vase dovednosti byly uspesne resetov\u00e1ny.
|
||||
Commands.Reset.Single=[[GREEN]]Tvoje dovednost {0} byla uspesne restartovana.
|
||||
Commands.Reset=[[RED]]Resetov\u00e1n\u00ed zku\u0161enost\u00ed na level 0
|
||||
Commands.Skill.Invalid=[[RED]]Neplatny nazev dovednosti!
|
||||
Commands.Skill.Leaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Tabulka nejlepsich--
|
||||
Commands.SkillInfo=/<skill> [[RED]]- Zjist\u00ed\u0161 bliz\u0161\u00ed informace o skillu
|
||||
@@ -352,6 +368,10 @@ Party.IsLocked=[[RED]]Tahla parta je ji\u017e uzamknuta!
|
||||
Party.IsntLocked=[[RED]]Tato parta je zamknuta!
|
||||
Party.Locked=[[RED]]Parta je zamnuta, pouze velitel party t\u011b m\u016f\u017ee p\u0159izvat.
|
||||
Party.NotInYourParty=[[DARK_RED]]{0} nen\u00ed ve tv\u00e9 part\u011b.
|
||||
Party.Owner.New=[[GREEN]]{0} se stal v\u016fdce party.
|
||||
Party.Owner.NotLeader=[[DARK_RED]]U\u017e nejsi v\u016fdce party.
|
||||
Party.Owner.Player=[[GREEN]]Nyn\u00ed jsi v\u016fdce party.
|
||||
Party.Password.Incorrect=[[RED]]Heslo k part\u011b je \u0161patn\u011b!
|
||||
Party.Password.Set=[[GREEN]]Heslo do party nastaveno na {0}
|
||||
Party.Player.Invalid=[[RED]]Tohle neni platny hrac.
|
||||
Party.NotOnline=[[DARK_RED]]{0} nen\u00ed online!
|
||||
@@ -373,6 +393,7 @@ Commands.XPGain.Repair=Opravovani
|
||||
Commands.XPGain.Swords=Zabijenim monster.
|
||||
Commands.XPGain.Taming=Ochoceni zvirat nebo boj s vlky
|
||||
Commands.XPGain.Unarmed=Zabijenim monster.
|
||||
Commands.XPGain.Woodcutting=K\u00e1cen\u00ed strom\u016f
|
||||
Commands.XPGain=[[DARK_GRAY]]Zisk dovednosti: [[WHITE]]{0}
|
||||
Commands.xplock.locked=[[GOLD]]Tvuj XP bar byl uzamcen na {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Tvuj XP bar je nyni [[GREEN]]ODEMCEN[[GOLD]]!
|
||||
@@ -392,6 +413,8 @@ Guides.Available=[[DARK_AQUA]]N\u00e1vod k {0} - napi\u0161te /{1} ? [page]
|
||||
Guides.Excavation=[[DARK_AQUA]]O kopani:\n[[YELLOW]]Kopani je cinnost vykonavana nicenim bloku hliny lopatou a nachazenim pokladu.\n[[YELLOW]]Nicenim bloku lopatou ziskavate sanci, ze naleznete poklady.\n[[YELLOW]]Cim dele tuhle cinnost provozujete, tim vic zvysujete svou sanci k naleznuti.\n[[DARK_AQUA]]Zisk dovednosti:\n[[YELLOW]]Pro zisk dovednosti v kopani musite nicit hlinene bloky lopatou.\n[[YELLOW]]Pro naleznuti pokladu muzou byt niceni jen nektere bloky.\n[[DARK_AQUA]]Seznam bloku se sanci pro nalezeni pokladu:\n[[YELLOW]]Trava, Hlina, Pisek, Jil, Sterk, Podhubi, Zvetrany pisek\n[[DARK_AQUA]]Jak pouzivat Giga Drill Breaker:\n[[YELLOW]]S lopatou v ruce a klikem pravym tlacidlem aktivujete svuj nastroj.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it\'s\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Mining=[[DARK_AQUA]]O Miningu:\n[[YELLOW]]Mining spo\u010d\u00edv\u00e1 v t\u011b\u017een\u00ed kamenu a rud. Poskytuje bonusy\n[[YELLOW]]v po\u010dtu materi\u00e1lu, kter\u00fd vyt\u011b\u017e\u00edte.\n\n[[DARK_AQUA]]Z\u00edskan\u00ed XP:\n[[YELLOW]]Aby jste dostali XP, mus\u00edte m\u00edt v ruce krump\u00e1\u010d.\n[[YELLOW]]XP v\u00e1m d\u00e1vaj\u00ed jenom jist\u00e9 bloky.\n\n[[DARK_AQUA]]Kompatibiln\u00ed materi\u00e1ly:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, a Netherrack.\n\n\n[[DARK_AQUA]]Jak pou\u017e\u00edt Super Breaker:\n[[YELLOW]]Dr\u017ete v ruce krump\u00e1\u010d a stisknete prav\u00e9 tla\u010ditko na my\u0161i.\n[[YELLOW]]Vr\u00e1mci \u010dty\u0159 sekund m\u00fa\u017eete buchnout do bloku, kter\u00fd je naps\u00e1n\n[[YELLOW]]v kompatibiln\u00edch materi\u00e1lech, kter\u00e9 aktivujou\n[[YELLOW]]Super Breaker.\n\n[[DARK_AQUA]]Co je to Super Breaker?\n[[YELLOW]]Super Breaker je schopnost, kter\u00e1 trv\u00e1 podle toho,\n[[YELLOW]]jak\u00fd m\u00e1te skill. Ztrojn\u00e1sobuje va\u0161i \u0161anci na z\u00edskan\u00ed extra v\u011bc\u00ed\n[[YELLOW]]a t\u011b\u017e\u00edte bloky na jednu r\u00e1nu.\n\n[[DARK_AQUA]]Jak pou\u017e\u00edt Blast Mining:\n[[YELLOW]]Kdy\u017e m\u00e1te v ruce odpalova\u010d, kter\u00fdm je flint and steel ve vychoz\u00edm nastaven\u00ed,\n[[YELLOW]]klikn\u011bte prav\u00fdm tla\u010ditkem na my\u0161i na TNT, a to zp\u016fsob\u00ed,\n[[YELLOW]]\u017ee hned bouchne.\n\n[[DARK_AQUA]]Jak funguje Blast Mining?\n[[YELLOW]]Blast Mining je schopnost, kter\u00e1 trv\u00e1 podle toho, jak\u00fd m\u00e1te\n[[YELLOW]]skill. D\u00e1va bonusy kdy\u017e t\u011b\u017e\u00edte pou\u017eit\u00edm TNT a umo\u017e\u0148uje v\u00e1m\n[[YELLOW]]d\u00e1lkov\u011b odp\u00e1lit TNT. Blast mining m\u00e1 3 \u010d\u00e1sti.\n[[YELLOW]]Prvn\u00ed \u010d\u00e1st je Bigger Bombs, kter\u00e1 zv\u011bt\u0161uje oblast v\u00fdbuchu.\n[[YELLOW]]Druh\u00e1 \u010d\u00e1st je Demolitions Expert, kter\u00e1 zvy\u0161uje po\u0161kozen\u00ed\n[[YELLOW]]v\u00fdbuchem TNT. T\u0159et\u00ed \u010d\u00e1st prost\u011b zvy\u0161uje mno\u017estvi rud, kter\u00e9\n[[YELLOW]]z\u00edsk\u00e1te z TNT a zni\u017euje su\u0165,\n[[YELLOW]]kter\u00e1 padne.
|
||||
Guides.Page.Invalid=Nespr\u00e1vn\u00e9 \u010d\u00edslo str\u00e1nky!
|
||||
Guides.Page.OutOfRange=Tato str\u00e1nka neexistuje, je tu pouze {0} str\u00e1nek.
|
||||
Guides.Repair=[[DARK_AQUA]]Opravov\u00e1n\u00ed:\n[[YELLOW]]Oprava umo\u017e\u0148uje pou\u017e\u00edvat \u017eelezn\u00fd blok k oprav\u011b brn\u011bn\u00ed a\n[[YELLOW]]n\u00e1stroje, nebo zlat\u00fd blok, aby zachr\u00e1nil zbroj a n\u00e1stroje.\n\n[[DARK_AQUA]]XP ZISK:\n[[YELLOW]]Pro opravu n\u00e1stroj\u016f nebo brn\u011bn\u00ed se pou\u017e\u00edv\u00e1 mcMMO kovadlina.Je to\n[[YELLOW]]\u017eelezn\u00fd blok ve v\u00fdchoz\u00edm nastaven\u00ed a nem\u011bl by b\u00fdt zam\u011b\u0148ov\u00e1n s\n[[YELLOW]]the Vanilla Minecraft Anvil.\n[[DARK_AQUA]]Jak si m\u00e1m n\u011bco opravit?\n[[YELLOW]]Polo\u017e te mcMMO kovadlinu a prav\u00edm kliknut\u00edm na opravu polo\u017eky \n[[YELLOW]]kter\u00fd pr\u00e1v\u011b dr\u017e\u00ed\u0161.Spot\u0159ebuje to 1 polo\u017eku na ka\u017ed\u00e9 pou\u017eit\u00ed.\n\n[[DARK_AQUA]]Jak opravit Mastery v\u011bci?\n[[YELLOW]]Repair Mastery increases the repair amount. The extra amount\n[[YELLOW]]repaired is influenced by your Repair skill level.\n\n[[DARK_AQUA]]Jak funguje super opravov\u00e1n\u00ed?\n[[YELLOW]]Super Repair je pasivn\u00ed schopnost.P\u0159i oprav\u00e1ch polo\u017eky,\n[[YELLOW]] ud\u011bl\u00ed hr\u00e1\u010d\u016fm \u0161anci opravit polo\u017eku s\n[[YELLOW]]s dvojitou \u00fa\u010dinost\u00ed.\n\n\n\n\n[[DARK_AQUA]]Jak Arcane Forging funguje?\n[[YELLOW]]Tato pasivn\u00ed schopnost umo\u017e\u0148uje k oprav\u011b polo\u017eky s ur\u010ditou\n[[YELLOW]]\u0161ance na zachov\u00e1n\u00ed jejich kouzla. Tyto enchanty mohou b\u00fdt\n[[YELLOW]]zachov\u00e1ny, nebo sn\u00ed\u017eeny na ni\u017e\u0161\u00ed \u00farove\u0148,\n[[YELLOW]]nebo \u00fapln\u011b ztraceny.\n\n\n\n[[DARK_AQUA]]Jak funguje Salvage?\n[[YELLOW]]Polo\u017ete mcMMO kovadlinu a klikn\u011bte prav\u00fdm tla\u010d\u00edtkem my\u0161i na z\u00e1chranu\n[[YELLOW]]itemu kter\u00fd pr\u00e1v\u011b dr\u017e\u00ed\u0161.\n[[YELLOW]]This will break the item apart en give back the used ingots.\n[[YELLOW]]Pozn\u00e1mka:Je mo\u017en\u00e9 zachr\u00e1nit pouze pln\u011b opraven\u00e9 n\u00e1stroje nebo brn\u011bn\u00ed.
|
||||
Inspect.Offline=[[RED]]Nem\u00e1\u0161 pr\u00e1va kontrolovat hr\u00e1\u010de co nejsou online!
|
||||
Inspect.OfflineStats=mcMMO Statistiky pro offline hrace [[YELLOW]]{0}
|
||||
Inspect.Stats=[[GREEN]]mcMMO Statistiky pro [[YELLOW]]{0}
|
||||
@@ -414,8 +437,10 @@ Perks.lucky.name=\u0160test\u00ed
|
||||
Perks.cooldowns.name=Rychle zotaveni
|
||||
Perks.activationtime.name=Vytrvalost
|
||||
Perks.activationtime.desc=Prodlu\u017euje pou\u017eit\u00ed schopnosti na {0} sekund.
|
||||
Hardcore.Player.Loss=[GOLD]][mcMMO] [[DARK_RED]]Ztratil jsi [[BLUE]]{0}[[DARK_RED]] za smrt.
|
||||
Vampirism.Killer.Success=[[GOLD]][mcMMO] [[DARK_AQUA]]Z\u00edskal jsi [[BLUE]]{0}[[DARK_AQUA]] level\u016f od [[YELLOW]]{1}.
|
||||
Spout.Donate=[[YELLOW]][mcMMO] P\u0159isp\u011bjte!
|
||||
Spout.Menu.ExitButton=V\u00fdchod
|
||||
Spout.Menu.HudButton.1=Typ HUD: {0}
|
||||
Spout.Menu.HudButton.2=Zm\u011b\u0148te si styl HUD!
|
||||
MOTD.Version=[[GOLD]][mcMMO] - verze [[DARK_AQUA]]{0}
|
||||
|
||||
@@ -98,6 +98,7 @@ Excavation.Skills.GigaDrillBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] has used
|
||||
Excavation.Skillup=[[YELLOW]]Excavation skill increased by {0}. Total ({1})
|
||||
|
||||
#FISHING
|
||||
Fishing.Ability.Chance=[[RED]]Bite Chance: [[YELLOW]]{0}
|
||||
Fishing.Ability.Info=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
|
||||
Fishing.Ability.Locked.0=LOCKED UNTIL {0}+ SKILL (SHAKE)
|
||||
Fishing.Ability.Rank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
|
||||
@@ -111,6 +112,8 @@ Fishing.Effect.4=Shake (vs. Entities)
|
||||
Fishing.Effect.5=Shake items off of mobs w/ fishing pole
|
||||
Fishing.Effect.6=Fisherman's Diet
|
||||
Fishing.Effect.7=Improves hunger restored from fished foods
|
||||
Fishing.Effect.8=Master Angler
|
||||
Fishing.Effect.9=Improves chance of getting a bite while fishing
|
||||
Fishing.Enchant.Chance=[[RED]]Magic Hunter Chance: [[YELLOW]]{0}
|
||||
Fishing.Chance.Raining=[[BLUE]] Rain Bonus
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
|
||||
14
src/main/resources/locale/locale_lt.properties
Normal file
14
src/main/resources/locale/locale_lt.properties
Normal file
@@ -0,0 +1,14 @@
|
||||
Acrobatics.Combat.Proc=[[GREEN]]**I\u0161vengta**
|
||||
Acrobatics.SkillName=AKROBATIKA
|
||||
Acrobatics.Skillup=[[YELLOW]]Akrobatiko \u012fg\u016bdis pakilo {0}. Bendras ({1})
|
||||
Excavation.SkillName=KASIN\u0116JIMAS
|
||||
Herbalism.Listener=\u017dOLININKYST\u0116
|
||||
Mining.Ability.Ready=[[GREEN]]**TU PARUOSEI SAVO KIRTIKLI**
|
||||
Mining.Skillup=[[YELLOW]]Kasinejimo igudis pakilo {0}. Bendras ({1})
|
||||
Mining.Blast.Refresh=[[GREEN]]Tavo [[YELLOW]]Sprogimo kasimo [[GREEN]]sugeb\u0117jimas atsinaujino!
|
||||
Swords.Combat.Bleeding.Stopped=[[GRAY]]Kraujavimas [[GREEN]]sustojo[[GRAY]]!
|
||||
Commands.Party.Kick=[[RED]]Tu buvai i\u0161mestas i\u0161 grup\u0117s {0}!
|
||||
Party.Unlocked=[[GRAY]]Grupe yra atrakinta
|
||||
Commands.XPGain.Taming=Gyvunu prijaukinimas arba kova su savo vilkais
|
||||
Commands.XPGain=[[DARK_GRAY]]PATIRTIES GAUTA: [[WHITE]]{0}
|
||||
Stats.Header.Combat=[[GOLD]]-=KOVOS IGUDZIAI=-
|
||||
@@ -1,10 +1,36 @@
|
||||
Acrobatics.Combat.Proc=[[GREEN]]**Esquivou**
|
||||
Acrobatics.Effect.0=Rolar
|
||||
Acrobatics.Effect.4=Esquivou
|
||||
Acrobatics.Roll.Text=**Rolou**
|
||||
Acrobatics.SkillName=ACROBACIA
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
Acrobatics.Skillup=[[AMARELO]]Habilidade Acrobacia aumentada em {0}. Total ({1})
|
||||
Archery.Listener=Arqueiro
|
||||
Archery.SkillName=ARQUEIRO
|
||||
Archery.Skillup=[[AMARELO]]Habilidade Arqueiro aumentada em {0}. Total ({1})
|
||||
Axes.Ability.Bonus.0=Machado
|
||||
Axes.SkillName=Machado
|
||||
Excavation.Effect.3=Habilidade de cavar tesouros
|
||||
Excavation.SkillName=Escava\u00e7\u00e3o
|
||||
Fishing.ItemFound=[[GRAY]]Tesouro encontrado!
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.SkillName=PESCARIA
|
||||
Herbalism.Listener=Herbalismo
|
||||
Herbalism.SkillName=HERBALISMO
|
||||
Mining.Ability.Ready=[[VERDE]]**VOC\u00ca PREPARA A SUA PICARETA**
|
||||
Mining.Skillup=[[AMARELO]]Capacidade de Minar aumentada em {0}. Total ({1})
|
||||
Mining.SkillName=MINERAR
|
||||
Mining.Skillup=[[YELLOW]]Habilidade Minerar aumentada em {0}. Total ({1})
|
||||
Mining.Blast.Boom=[[GRAY]]**BOOM**
|
||||
Repair.Skills.AdeptGold=[[DARK_RED]]Voc\u00ea n\u00e3o tem nivel suficiente pra reparar Ouro.
|
||||
Repair.Arcane.Fail=[[VERMELHO]]Poder misterioso saiu permanentemente do item.
|
||||
Swords.Combat.Bleeding.Stopped=[[CINZA]]O sangramento tem [[VERDE]]Parado[[CINZA]]!
|
||||
Swords.Combat.Bleeding.Stopped=[[GRAY]]O sangramento[[GREEN]]parou[[GRAY]]!
|
||||
Swords.Effect.0=Contra-ataque
|
||||
Swords.Effect.6=Sangrou
|
||||
Swords.SkillName=Espada
|
||||
Taming.Listener=Domar
|
||||
Taming.SkillName=DOMAR
|
||||
Unarmed.SkillName=DESARMAR
|
||||
Woodcutting.Listener=Lenhador
|
||||
Woodcutting.SkillName=Lenhador
|
||||
Ability.Generic.Template=[[VERMELHO]]{0}:[[AMARELO]]{1}
|
||||
Combat.ArrowDeflect=[[WHITE]]*DESVIOU A FLECHA*
|
||||
Combat.BeastLore=[[GREEN]]*CONHECIMENTO DE FERAS*
|
||||
@@ -14,25 +40,31 @@ Combat.Gore=[[GREEN]]*MORDIDA*
|
||||
Combat.StruckByGore=[[RED]]*ATINGIDO POR MORDIDA*
|
||||
Combat.TargetDazed=Alvo foi [[DARK_RED]]Atordoado
|
||||
Combat.TouchedFuzzy=[[DARK_RED]]Visao turva. Sente Tonturas.
|
||||
Commands.DoesNotExist=[[RED]]Player does not exist in the database!
|
||||
Commands.NoConsole=This command does not support console usage.
|
||||
Commands.DoesNotExist=[[RED]]Player n\u00e3o existe na database!
|
||||
Commands.GodMode.Disabled=[[YELLOW]]mcMMO Modo God desabilitado
|
||||
Commands.NoConsole=Esse comando n\u00e3o suporta uso no console
|
||||
Commands.Party.Kick=[[RED]]Voc\u00ea foi kickado da party {0}!
|
||||
Commands.Stats.Self=SEUS STATS
|
||||
Party.Forbidden=[mcMMO] Parties not permitted on this world (See Permissions)
|
||||
Party.Locked=[[RED]]Equipe est\u00e1 trancada, s\u00f3 o l\u00edder pode convidar.
|
||||
Party.Locked=[[RED]]Equipe est\u00e1 bloqueada, s\u00f3 o l\u00edder pode convidar.
|
||||
Party.NotInYourParty=[[DARK_RED]]{0} nao est\u00e1 na sua equipe
|
||||
Party.Password.Set=[[GREEN]]Senha da equipe: {0}
|
||||
Party.Unlocked=[[GRAY]]Equipe foi Destrancada
|
||||
Commands.XPGain.Mining=Minar Pedra & Min\u00e9rio
|
||||
Commands.XPGain.Acrobatics=CAINDO
|
||||
Commands.XPGain.Excavation=Cavando e achando tesouros
|
||||
Commands.XPGain.Mining=Minerar Pedra & Min\u00e9rio
|
||||
Commands.XPGain=[[DARK_GRAY]]XP ADQUIRIDO: [[WHITE]]{0}
|
||||
Commands.xplock.locked=[[GOLD]]Sua barra de XP BAR est\u00e1 travada em {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Sua barra de XP foi [[GREEN]]DESTRAVADA[[GOLD]]!
|
||||
Commands.xprate.over=[[RED]]Evento de XP Rate acabou!!
|
||||
XPRate.Event=[[GOLD]]mcMMO is currently in an XP rate event! XP rate is {0}x!
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it\'s\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Excavation=[[DARK_AQUA]] Sobre escava\u00e7\u00e3o:.. \\ N [[YELLOW]] Escava\u00e7\u00e3o \u00e9 o ato de cavar terra para encontrar tesouros \\ n [[YELLOW]] Por escavando a terra que voc\u00ea vai encontrar tesouros \\ n [[YELLOW]] Quanto mais voc\u00ea fizer isso mais os tesouros que voc\u00ea pode encontrar \\ n \\ n [[DARK_AQUA]] gANHO XP:. \\ n [[YELLOW]] Para ganhar XP neste habilidade que voc\u00ea tem que cavar com uma p\u00e1 na m\u00e3o \\ n [[. YELLOW]] Apenas certos materiais pode ser desenterrado para tesouros e XP \\ n [[DARK_AQUA]] Materiais compat\u00edveis:. \\ n [[YELLOW]] grama, terra, areia, argila, cascalho, Mic\u00e9lio, Areia Alma \\ n \\ n [[DARK_AQUA]] Como usar Broca Giga Breaker: \\ n [[YELLOW]] com uma p\u00e1 na m\u00e3o direita clique para pronta sua ferramenta \\ n [[YELLOW]] uma vez neste estado tem cerca de 4 segundos para fazer \\. n [[YELLOW]] contato com materiais de escava\u00e7\u00e3o compat\u00edveis esta \\ n [[YELLOW]] ativar disjuntor Broca Giga. \\ n [[DARK_AQUA]] O que \u00e9 o Giga disjuntor broca? \\ n [[YELLOW]] Disjuntor Broca Giga \u00e9 uma habilidade com um cooldown \\ n [[YELLOW]] ligada \u00e0 habilidade de escava\u00e7\u00e3o. Triplica sua chance \\ n [[YELLOW]] de encontrar tesouros e permite quebra instant\u00e2nea \\ n [[YELLOW]] em materiais de escava\u00e7\u00e3o. \\ N \\ n [[DARK_AQUA]] Como Treasure Hunter trabalho? \\ N [[] YELLOW ] Cada tesouro poss\u00edvel para escava\u00e7\u00e3o tem a sua pr\u00f3pria \\ n [[YELLOW]] exig\u00eancia de n\u00edvel de habilidade para a sua queda, como resultado, \u00e9 \\ n [[YELLOW]] dif\u00edcil dizer o quanto ele est\u00e1 ajudando voc\u00ea. \\ n [[YELLOW ]] Basta ter em mente que a habilidade maior escava\u00e7\u00e3o sua \\ n [[YELLOW]] \u00e9, os mais tesouros que podem ser encontrados. \\ n [[YELLOW]] E tamb\u00e9m ter em mente que cada tipo de escava\u00e7\u00e3o \\ n [[YELLOW]] material compat\u00edvel tem sua pr\u00f3pria lista \u00fanica de tesouros. \\ n [[YELLOW]] em outras palavras, voc\u00ea vai encontrar tesouros diferentes na sujeira \\ n [[YELLOW]] do que voc\u00ea em cascalho. \\ n [[DARK_AQUA]] notas sobre a escava\u00e7\u00e3o: \\ n [[YELLOW]] gotas de escava\u00e7\u00e3o s\u00e3o completamente customizeable \\ n [[YELLOW]] Ent\u00e3o, os resultados variam de servidor para servidor.\n
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Inspect.OfflineStats=mcMMO Stats for Offline Player [[YELLOW]]{0}
|
||||
Inspect.OfflineStats=mcMMO Statsde player offline[[YELLOW]]{0}
|
||||
Inspect.Stats=[[GREEN]]mcMMO Stats for [[YELLOW]]{0}
|
||||
Inspect.TooFar=[[RED]]You are too far away to inspect that player!
|
||||
Skills.Disarmed=[[DARK_RED]]Voc\u00ea foi Desarmado!
|
||||
Skills.NeedMore=[[DARK_RED]]Voc\u00ea precisa de mais
|
||||
Skills.TooTired=[[RED]]Voc\u00ea est\u00e1 cansado pra usar essa habilidade.
|
||||
Stats.Header.Combat=[[DOURADO]]-=HABILIDADES DE COMBATE=-
|
||||
Stats.Header.Combat=[[GOLD]]-=SKILLS DE COMBATE=-
|
||||
|
||||
@@ -593,6 +593,8 @@ Smelting.SkillName=\u0412\u042b\u041f\u041b\u0410\u0412\u041a\u0410
|
||||
Commands.Description.addlevels=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c mcMMO \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
|
||||
Commands.Description.adminchat=\u0412\u043a\u043b./\u043e\u0442\u043a\u043b. \u0440\u0435\u0436\u0438\u043c \u0447\u0430\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 \u0430\u0434\u043c\u0438\u043d\u0430\u043c\u0438 \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0430\u0434\u043c\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435
|
||||
Commands.Description.addxp=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043e\u043f\u044b\u0442 mcMMO
|
||||
Commands.Description.hardcore=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0445\u0430\u0440\u0434\u043a\u043e\u0440 \u043c\u043e\u0434 \u0432\u043a\u043b/\u0432\u044b\u043a\u043b
|
||||
Commands.Description.inspect=\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0443\u044e mcMMO \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u0440\u0443\u0433\u043e\u043c \u0438\u0433\u0440\u043e\u043a\u0435
|
||||
Commands.Description.mcability=\u0412\u043a\u043b./\u043e\u0442\u043a\u043b. \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044e \u0443\u043c\u0435\u043d\u0438\u0439 mcMMO \u043a\u043b\u0438\u043a\u043e\u043c \u041f\u041a\u041c
|
||||
Commands.Description.mcgod=\u0412\u043a\u043b./\u043e\u0442\u043a\u043b. \u0440\u0435\u0436\u0438\u043c-\u0431\u043e\u0433\u0430 mcMMO
|
||||
Commands.Description.mcmmo=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 mcMMO
|
||||
|
||||
656
src/main/resources/locale/locale_th_TH.properties
Normal file
656
src/main/resources/locale/locale_th_TH.properties
Normal file
@@ -0,0 +1,656 @@
|
||||
Acrobatics.Ability.Proc=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 Graceful Landing**
|
||||
Acrobatics.DodgeChance=[[RED]]Dodge \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Acrobatics.Effect.0=Roll
|
||||
Acrobatics.Effect.1=\u0e25\u0e14\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e15\u0e01\u0e08\u0e32\u0e01\u0e17\u0e35\u0e48\u0e2a\u0e39\u0e07
|
||||
Acrobatics.Effect.2=Graceful Roll
|
||||
Acrobatics.Effect.3=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e2a\u0e2d\u0e07\u0e40\u0e17\u0e48\u0e32
|
||||
Acrobatics.Effect.4=Dodge
|
||||
Acrobatics.Effect.5=\u0e25\u0e14\u0e01\u0e32\u0e23\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e04\u0e23\u0e36\u0e48\u0e07\u0e2b\u0e19\u0e36\u0e48\u0e07
|
||||
Acrobatics.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Acrobatics:
|
||||
Acrobatics.Roll.Chance=[[RED]]Roll \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Acrobatics.Roll.GraceChance=[[RED]]Graceful Roll \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Acrobatics.Roll.Text=**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 Rolled**
|
||||
Acrobatics.SkillName=ACROBATICS
|
||||
Acrobatics.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Acrobatics \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Archery.Combat.DazeChance=[[RED]]Daze \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Archery.Combat.RetrieveChance=[[RED]]Retrieve Arrows \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Archery.Combat.SkillshotBonus=[[RED]]\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e14\u0e49\u0e27\u0e22\u0e18\u0e19\u0e39: [[YELLOW]]{0}
|
||||
Archery.Effect.0=Skill Shot
|
||||
Archery.Effect.1=\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e14\u0e49\u0e27\u0e22\u0e18\u0e19\u0e39\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19
|
||||
Archery.Effect.2=(Players) \u0e16\u0e39\u0e01\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e21\u0e36\u0e19\u0e07\u0e07
|
||||
Archery.Effect.3=Disorients \u0e28\u0e31\u0e15\u0e23\u0e39\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 {0}
|
||||
Archery.Effect.4=Arrow Retrieval
|
||||
Archery.Effect.5=\u0e21\u0e35\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e18\u0e19\u0e39\u0e04\u0e37\u0e19\u0e2b\u0e25\u0e31\u0e07\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e07\u0e2b\u0e32\u0e23
|
||||
Archery.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Archery:
|
||||
Archery.SkillName=ARCHERY
|
||||
Archery.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Archery \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19{0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Axes.Ability.Bonus.0=\u0e17\u0e31\u0e01\u0e29\u0e30 Axe Mastery
|
||||
Axes.Ability.Bonus.1=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 {0}
|
||||
Axes.Ability.Bonus.2=Armor Impact
|
||||
Axes.Ability.Bonus.3=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 {0} \u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e40\u0e01\u0e23\u0e32\u0e30
|
||||
Axes.Ability.Bonus.4=Greater Impact
|
||||
Axes.Ability.Bonus.5=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 {0} \u0e43\u0e2b\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 unarmored
|
||||
Axes.Ability.Lower=[[GRAY]]**\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Axe**
|
||||
Axes.Ability.Ready=[[GREEN]]**\u0e04\u0e38\u0e13\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Axe**
|
||||
Axes.Combat.CritStruck=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e17\u0e33 CRITICALLY HIT \u0e43\u0e2a\u0e48\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19!
|
||||
Axes.Combat.CritChance=[[RED]]Critically Strike \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Axes.Combat.CriticalHit=[[RED]]\u0e42\u0e08\u0e21\u0e15\u0e35 CRITICAL!
|
||||
Axes.Combat.GI.Proc=[[GREEN]]**\u0e17\u0e33\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e14\u0e49\u0e27\u0e22 GREAT FORCE**
|
||||
Axes.Combat.GI.Struck=[[RED]]**\u0e42\u0e08\u0e21\u0e15\u0e35\u0e14\u0e49\u0e27\u0e22 GREATER IMPACT**
|
||||
Axes.Combat.SS.Length=[[RED]]Skull Splitter \u0e21\u0e35\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0}\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35
|
||||
Axes.Effect.0=Skull Splitter (Ability)
|
||||
Axes.Effect.1=\u0e17\u0e33\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e27\u0e07\u0e01\u0e27\u0e49\u0e32\u0e07
|
||||
Axes.Effect.2=Critical Strikes
|
||||
Axes.Effect.3=\u0e01\u0e32\u0e23\u0e42\u0e08\u0e21\u0e15\u0e35\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19
|
||||
Axes.Effect.4=\u0e17\u0e31\u0e01\u0e29\u0e30 Axe Mastery
|
||||
Axes.Effect.5=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e42\u0e1a\u0e19\u0e31\u0e2a\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22
|
||||
Axes.Effect.6=Armor Impact
|
||||
Axes.Effect.7=\u0e42\u0e08\u0e21\u0e15\u0e35\u0e40\u0e02\u0e49\u0e32\u0e40\u0e2a\u0e37\u0e49\u0e2d\u0e40\u0e01\u0e23\u0e32\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e01\u0e23\u0e32\u0e30\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e21\u0e32\u0e01
|
||||
Axes.Effect.8=Greater Impact
|
||||
Axes.Effect.9=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e17\u0e31\u0e01\u0e29\u0e30 Unarmored
|
||||
Axes.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Axes:
|
||||
Axes.SkillName=AXES
|
||||
Axes.Skills.SS.Off=[[RED]]**\u0e17\u0e31\u0e01\u0e29\u0e30 Skull Splitter \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e**
|
||||
Axes.Skills.SS.On=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 Skull Splitter**
|
||||
Axes.Skills.SS.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Skull Splitter [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Axes.Skills.SS.Other.Off=[[RED]]Skull Splitter[[GREEN]] \u0e23\u0e2d\u0e01\u0e32\u0e23\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c [[YELLOW]]{0}
|
||||
Axes.Skills.SS.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Skull Splitter!
|
||||
Axes.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Axes \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Excavation.Ability.Lower=[[GRAY]]**\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Shovel**
|
||||
Excavation.Ability.Ready=[[GREEN]]**\u0e04\u0e38\u0e13\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Shovel**
|
||||
Excavation.Effect.0=Giga Drill Breaker (ABILITY)
|
||||
Excavation.Effect.1=\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e14\u0e23\u0e2d\u0e1b 3x , EXP 3x, +\u0e04\u0e27\u0e32\u0e21\u0e40\u0e23\u0e47\u0e27
|
||||
Excavation.Effect.2=Treasure Hunter
|
||||
Excavation.Effect.3=\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e02\u0e38\u0e14\u0e2b\u0e32\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34
|
||||
Excavation.Effect.Length=[[RED]]Giga Drill Breaker \u0e21\u0e35\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0}\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35
|
||||
Excavation.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Excavation:
|
||||
Excavation.SkillName=EXCAVATION
|
||||
Excavation.Skills.GigaDrillBreaker.Off=[[RED]]**\u0e17\u0e31\u0e01\u0e29\u0e30 Giga Drill Breaker \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e**
|
||||
Excavation.Skills.GigaDrillBreaker.On=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 GIGA DRILL BREAKER**
|
||||
Excavation.Skills.GigaDrillBreaker.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Giga Drill Breaker [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Excavation.Skills.GigaDrillBreaker.Other.Off=[[RED]]Giga Drill Breaker[[GREEN]] \u0e23\u0e2d\u0e01\u0e32\u0e23\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c [[YELLOW]]{0}
|
||||
Excavation.Skills.GigaDrillBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Giga Drill Breaker!
|
||||
Excavation.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Excavation \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Fishing.Ability.Info=[[RED]]\u0e17\u0e31\u0e01\u0e29\u0e30 Magic Hunter: [[GRAY]] **\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e42\u0e14\u0e22\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e17\u0e31\u0e01\u0e29\u0e30 Treasure Hunter**
|
||||
Fishing.Ability.Locked.0=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (SHAKE)
|
||||
Fishing.Ability.Rank=[[RED]]Treasure Hunter \u0e23\u0e30\u0e14\u0e31\u0e1a: [[YELLOW]]{0}/5
|
||||
Fishing.Ability.Shake=[[RED]]Shake \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Fishing.Ability.FD=[[RED]]Fisherman\'\'s Diet \u0e23\u0e30\u0e14\u0e31\u0e1a: [[YELLOW]]{0}
|
||||
Fishing.Effect.0=Treasure Hunter (Passive)
|
||||
Fishing.Effect.1=\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e27\u0e31\u0e15\u0e16\u0e38\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e15\u0e01\u0e1b\u0e25\u0e32
|
||||
Fishing.Effect.2=Magic Hunter
|
||||
Fishing.Effect.3=\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07 enchanted
|
||||
Fishing.Effect.4=Shake (vs. Entities)
|
||||
Fishing.Effect.5=\u0e40\u0e02\u0e22\u0e48\u0e32\u0e40\u0e2d\u0e32\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e08\u0e32\u0e01 monster w/ \u0e14\u0e49\u0e27\u0e22\u0e04\u0e31\u0e19\u0e40\u0e1a\u0e47\u0e14
|
||||
Fishing.Effect.6=Fisherman\'s Diet
|
||||
Fishing.Effect.7=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e2d\u0e34\u0e48\u0e21\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e01\u0e34\u0e19\u0e1b\u0e25\u0e32
|
||||
Fishing.Enchant.Chance=[[RED]]Magic Hunter \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Fishing.Chance.Raining=[[BLUE]] Rain Bonus
|
||||
Fishing.ItemFound=[[GRAY]]\u0e44\u0e14\u0e49\u0e1e\u0e1a\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34!
|
||||
Fishing.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Fishing:
|
||||
Fishing.MagicFound=[[GRAY]]\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e2a\u0e36\u0e01\u0e44\u0e14\u0e49\u0e16\u0e36\u0e07\u0e2a\u0e31\u0e21\u0e1c\u0e31\u0e2a\u0e02\u0e2d\u0e07\u0e40\u0e27\u0e17\u0e21\u0e19\u0e15\u0e23\u0e4c\u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e2a\u0e34\u0e48\u0e07\u0e19\u0e35\u0e49 ...
|
||||
Fishing.SkillName=FISHING
|
||||
Fishing.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Fishing \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Herbalism.Ability.DoubleDropChance=[[RED]]Double Drop \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Herbalism.Ability.FD=[[RED]]Farmer\'\'s Diet \u0e23\u0e30\u0e14\u0e31\u0e1a: [[YELLOW]] {0}
|
||||
Herbalism.Ability.GTe.Length=[[RED]]Green Terra \u0e21\u0e35\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0}\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35
|
||||
Herbalism.Ability.GTe.NeedMore=[[RED]]\u0e41\u0e15\u0e48\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e21\u0e25\u0e47\u0e14\u0e1e\u0e31\u0e19\u0e18\u0e38\u0e4c\u0e21\u0e32\u0e01\u0e02\u0e36\u0e49\u0e19\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e0a\u0e49 Green Terra.
|
||||
Herbalism.Ability.GTh.Chance=[[RED]]Green Thumb \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Herbalism.Ability.GTh.Fail=[[RED]]**GREEN THUMB \u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27**
|
||||
Herbalism.Ability.GTh.Stage=[[RED]]Green Thumb \u0e08\u0e33\u0e19\u0e27\u0e19: [[YELLOW]]{0}
|
||||
Herbalism.Ability.GTh=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 GREEN THUMB**
|
||||
Herbalism.Ability.HylianLuck=[[RED]]Hylian Luck \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Herbalism.Ability.Lower=[[GRAY]]**\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Hoe**
|
||||
Herbalism.Ability.Ready=[[GREEN]]**\u0e04\u0e38\u0e13\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Hoe**
|
||||
Herbalism.Ability.ShroomThumb.Chance=[[RED]]Shroom Thumb \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Herbalism.Ability.ShroomThumb.Fail=[[RED]]**SHROOM THUMB \u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27**
|
||||
Herbalism.Effect.0=Green Terra (ABILITY)
|
||||
Herbalism.Effect.1=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e01\u0e32\u0e23\u0e14\u0e23\u0e2d\u0e1b x3
|
||||
Herbalism.Effect.2=Green Thumb (\u0e02\u0e49\u0e32\u0e27\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19)
|
||||
Herbalism.Effect.3=\u0e1e\u0e37\u0e0a\u0e42\u0e15\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e01\u0e47\u0e1a\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27
|
||||
Herbalism.Effect.4=Green Thumb (\u0e43\u0e0a\u0e49\u0e01\u0e31\u0e1a Cobble/Stone Brick/Dirt)
|
||||
Herbalism.Effect.5=\u0e17\u0e33\u0e2d\u0e34\u0e10\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e23\u0e37\u0e2d\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e2b\u0e0d\u0e49\u0e32\u0e40\u0e15\u0e34\u0e1a\u0e42\u0e15
|
||||
Herbalism.Effect.6=Farmer\'s Diet
|
||||
Herbalism.Effect.7=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e2d\u0e34\u0e48\u0e21\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e01\u0e34\u0e19\u0e2d\u0e32\u0e2b\u0e32\u0e23
|
||||
Herbalism.Effect.8=Drops x2 (\u0e2a\u0e21\u0e38\u0e19\u0e44\u0e1e\u0e23\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14)
|
||||
Herbalism.Effect.9=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e2d\u0e31\u0e04\u0e23\u0e32\u0e01\u0e32\u0e23 Drops
|
||||
Herbalism.Effect.10=Hylian Luck
|
||||
Herbalism.Effect.11=\u0e43\u0e2b\u0e49\u0e21\u0e35\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e40\u0e25\u0e47\u0e01\u0e19\u0e49\u0e2d\u0e22\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2b\u0e32\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e48\u0e2b\u0e32\u0e22\u0e32\u0e01
|
||||
Herbalism.Effect.12=Shroom Thumb
|
||||
Herbalism.Effect.13=\u0e01\u0e23\u0e30\u0e08\u0e32\u0e22\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e22\u0e14\u0e34\u0e19\u0e41\u0e25\u0e30\u0e2b\u0e0d\u0e49\u0e32
|
||||
Herbalism.HylianLuck=[[GREEN]]\u0e04\u0e38\u0e13\u0e21\u0e35\u0e42\u0e0a\u0e04\u0e43\u0e19\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49!
|
||||
Herbalism.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Herbalism:
|
||||
Herbalism.SkillName=HERBALISM
|
||||
Herbalism.Skills.GTe.Off=[[RED]]**\u0e17\u0e31\u0e01\u0e29\u0e30 Green Terra \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e**
|
||||
Herbalism.Skills.GTe.On=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 GREEN TERRA**
|
||||
Herbalism.Skills.GTe.Refresh=[[GREEN]]Your [[YELLOW]]Green Terra [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Herbalism.Skills.GTe.Other.Off=[[RED]]Green Terra[[GREEN]] \u0e23\u0e2d\u0e01\u0e32\u0e23\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c [[YELLOW]]{0}
|
||||
Herbalism.Skills.GTe.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Green Terra!
|
||||
Herbalism.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Herbalism \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Mining.Ability.Length=[[RED]]Super Breaker \u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0}s
|
||||
Mining.Ability.Locked.0=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (BLAST MINING)
|
||||
Mining.Ability.Locked.1=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (BIGGER BOMBS)
|
||||
Mining.Ability.Locked.2=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (DEMOLITIONS EXPERTISE)
|
||||
Mining.Ability.Lower=[[GRAY]]**\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Pickaxe**
|
||||
Mining.Ability.Ready=[[GREEN]]**\u0e04\u0e38\u0e13\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Pickaxe**
|
||||
Mining.Effect.0=Super Breaker (ABILITY)
|
||||
Mining.Effect.1=+\u0e04\u0e27\u0e32\u0e21\u0e40\u0e23\u0e47\u0e27, \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e14\u0e23\u0e2d\u0e1b x3
|
||||
Mining.Effect.2=Drops x2
|
||||
Mining.Effect.3=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e2d\u0e31\u0e04\u0e23\u0e32\u0e01\u0e32\u0e23 Drops
|
||||
Mining.Effect.4=Blast Mining
|
||||
Mining.Effect.5=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e23\u0e48\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49 TNT
|
||||
Mining.Effect.6=Bigger Bombs
|
||||
Mining.Effect.7=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e23\u0e31\u0e28\u0e21\u0e35\u0e02\u0e2d\u0e07 TNT
|
||||
Mining.Effect.8=Demolitions Expertise
|
||||
Mining.Effect.9=\u0e25\u0e14\u0e01\u0e32\u0e23\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e08\u0e32\u0e01 TNT
|
||||
Mining.Effect.Decrease=[[RED]]Demolitions \u0e25\u0e14\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22: [[YELLOW]]{0}
|
||||
Mining.Effect.DropChance=[[RED]]Double Drop \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Mining.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Mining:
|
||||
Mining.SkillName=MINING
|
||||
Mining.Skills.SuperBreaker.Off=[[RED]]**\u0e17\u0e31\u0e01\u0e29\u0e30 Super Breaker \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e**
|
||||
Mining.Skills.SuperBreaker.On=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 SUPER BREAKER**
|
||||
Mining.Skills.SuperBreaker.Other.Off=[[RED]]Super Breaker[[GREEN]] \u0e23\u0e2d\u0e01\u0e32\u0e23\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c [[YELLOW]]{0}
|
||||
Mining.Skills.SuperBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Super Breaker!
|
||||
Mining.Skills.SuperBreaker.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Super Breaker [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Mining.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Mining \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Mining.Blast.Boom=[[GRAY]]**BOOM**
|
||||
Mining.Blast.Effect=+{0} \u0e1c\u0e25\u0e1c\u0e25\u0e34\u0e15\u0e41\u0e23\u0e48, -{1} \u0e1c\u0e25\u0e1c\u0e25\u0e34\u0e15\u0e40\u0e28\u0e29, {2}x \u0e14\u0e23\u0e2d\u0e1b
|
||||
Mining.Blast.Radius.Increase=[[RED]]\u0e23\u0e31\u0e28\u0e21\u0e35\u0e02\u0e2d\u0e07\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19: [[YELLOW]]+{0}
|
||||
Mining.Blast.Rank=[[RED]]\u0e17\u0e31\u0e01\u0e29\u0e30 Blast Mining: [[YELLOW]] \u0e23\u0e30\u0e14\u0e31\u0e1a {0}/8 [[GRAY]]({1})
|
||||
Mining.Blast.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Blast Mining!
|
||||
Mining.Blast.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Blast Mining [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Repair.AnvilPlaced.Spout1=[mcMMO] Anvil \u0e16\u0e39\u0e01\u0e27\u0e32\u0e07
|
||||
Repair.AnvilPlaced.Spout2=\u0e04\u0e25\u0e34\u0e01\u0e02\u0e27\u0e32\u0e40\u0e1e\u0e37\u0e48\u0e21\u0e0b\u0e48\u0e2d\u0e21\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07!
|
||||
Repair.Effect.0=\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21
|
||||
Repair.Effect.1=\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e32\u0e30
|
||||
Repair.Effect.10=\u0e0b\u0e48\u0e2d\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e2d\u0e07 (\u0e17\u0e31\u0e01\u0e29\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 {0}+)
|
||||
Repair.Effect.11=\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21 \u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e2d\u0e07\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e32\u0e30
|
||||
Repair.Effect.12=\u0e0b\u0e48\u0e2d\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2b\u0e25\u0e47\u0e01 (\u0e17\u0e31\u0e01\u0e29\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 {0}+)
|
||||
Repair.Effect.13=\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21 \u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2b\u0e25\u0e47\u0e01\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e32\u0e30
|
||||
Repair.Effect.14=\u0e0b\u0e48\u0e2d\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2b\u0e34\u0e19 (\u0e17\u0e31\u0e01\u0e29\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 {0}+)
|
||||
Repair.Effect.15=\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2b\u0e34\u0e19
|
||||
Repair.Effect.2=\u0e17\u0e31\u0e01\u0e29\u0e30 Repair Mastery
|
||||
Repair.Effect.3=\u0e08\u0e33\u0e19\u0e27\u0e19\u0e40\u0e07\u0e34\u0e19\u0e17\u0e35\u0e48\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19\u0e43\u0e19\u0e01\u0e32\u0e23\u0e0b\u0e48\u0e2d\u0e21
|
||||
Repair.Effect.4=Super Repair
|
||||
Repair.Effect.5=\u0e1c\u0e25\u0e01\u0e32\u0e23\u0e44\u0e14\u0e49 Double
|
||||
Repair.Effect.6=\u0e17\u0e31\u0e01\u0e29\u0e30 Diamond Repair ({0}+ SKILL)
|
||||
Repair.Effect.7=\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21 \u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e1e\u0e0a\u0e23\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e32\u0e30
|
||||
Repair.Effect.8=Arcane Forging
|
||||
Repair.Effect.9=\u0e0b\u0e48\u0e2d\u0e21\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e02\u0e36\u0e49\u0e19
|
||||
Repair.Effect.16=\u0e17\u0e31\u0e01\u0e29\u0e30 Salvage (\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e31\u0e01\u0e29\u0e30 {0}+)
|
||||
Repair.Effect.17=\u0e01\u0e39\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e32\u0e30
|
||||
Repair.Error=[[DARK_RED]]mcMMO \u0e1e\u0e1a\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e1e\u0e22\u0e32\u0e22\u0e32\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e19\u0e35\u0e49!
|
||||
Repair.Listener.Anvil=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e27\u0e32\u0e07 Anvil \u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e32\u0e30.
|
||||
Repair.Listener.Anvil2=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e27\u0e32\u0e07\u0e17\u0e31\u0e48\u0e07\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e01\u0e39\u0e49\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e32\u0e30.
|
||||
Repair.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Repair:
|
||||
Repair.SkillName=REPAIR
|
||||
Repair.Skills.AdeptSalvage=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e0a\u0e33\u0e19\u0e32\u0e0d\u0e1e\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e01\u0e2d\u0e1a\u0e01\u0e39\u0e49\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e19\u0e35\u0e49.
|
||||
Repair.Skills.AdeptDiamond=[[DARK_RED]]\u0e17\u0e31\u0e01\u0e29\u0e30 Repair \u0e44\u0e21\u0e48\u0e1e\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e0b\u0e48\u0e2d\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e1e\u0e0a\u0e23.
|
||||
Repair.Skills.AdeptGold=[[DARK_RED]]\u0e17\u0e31\u0e01\u0e29\u0e30 Repair \u0e44\u0e21\u0e48\u0e1e\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e0b\u0e48\u0e2d\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e2d\u0e07.
|
||||
Repair.Skills.AdeptIron=[[DARK_RED]]\u0e17\u0e31\u0e01\u0e29\u0e30 Repair \u0e44\u0e21\u0e48\u0e1e\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e0b\u0e48\u0e2d\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2b\u0e25\u0e47\u0e01.
|
||||
Repair.Skills.AdeptStone=[[DARK_RED]]\u0e17\u0e31\u0e01\u0e29\u0e30 Repair \u0e44\u0e21\u0e48\u0e1e\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e0b\u0e48\u0e2d\u0e21\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2b\u0e34\u0e19.
|
||||
Repair.Skills.Adept=[[RED]]\u0e04\u0e38\u0e13\u0e21\u0e35\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21 [[YELLOW]]{0}[[RED]] \u0e40\u0e1e\u0e35\u0e22\u0e07\u0e1e\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21 [[YELLOW]]{1}
|
||||
Repair.Skills.FeltEasy=[[GRAY]]\u0e23\u0e39\u0e49\u0e2a\u0e36\u0e01\u0e27\u0e48\u0e32\u0e21\u0e31\u0e19\u0e07\u0e48\u0e32\u0e22.
|
||||
Repair.Skills.FullDurability=[[GRAY]]\u0e2a\u0e34\u0e48\u0e07\u0e19\u0e35\u0e49\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e04\u0e07\u0e17\u0e19\u0e40\u0e15\u0e47\u0e21\u0e41\u0e25\u0e49\u0e27.
|
||||
Repair.Skills.SalvageSuccess=[[GRAY]]\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e16\u0e39\u0e01\u0e01\u0e39\u0e49\u0e04\u0e37\u0e19!
|
||||
Repair.Skills.NotFullDurability=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e01\u0e2d\u0e1a\u0e01\u0e39\u0e49\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e19\u0e35\u0e49.
|
||||
Repair.Skills.Mastery=[[RED]]Repair Mastery: [[YELLOW]]\u0e40\u0e1e\u0e34\u0e48\u0e21 {0} \u0e15\u0e48\u0e2d\u0e01\u0e32\u0e23\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21
|
||||
Repair.Skills.StackedItems=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e0b\u0e48\u0e2d\u0e21\u0e41\u0e0b\u0e21\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e0b\u0e49\u0e2d\u0e19\u0e01\u0e31\u0e19\u0e44\u0e14\u0e49.
|
||||
Repair.Skills.Super.Chance=[[RED]]Super Repair \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Repair.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Repair \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Repair.Arcane.Chance.Downgrade=[[GRAY]]AF \u0e21\u0e35\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e25\u0e14\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22: [[YELLOW]]{0}%
|
||||
Repair.Arcane.Chance.Success=[[GRAY]]AF \u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08: [[YELLOW]]{0}%
|
||||
Repair.Arcane.Downgrade=[[RED]]\u0e2d\u0e33\u0e19\u0e32\u0e08\u0e25\u0e35\u0e49\u0e25\u0e31\u0e1a\u0e44\u0e14\u0e49\u0e25\u0e14\u0e25\u0e07\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e19\u0e35\u0e49.
|
||||
Repair.Arcane.Fail=[[RED]]\u0e2d\u0e33\u0e19\u0e32\u0e08\u0e25\u0e35\u0e49\u0e25\u0e31\u0e1a\u0e44\u0e14\u0e49\u0e17\u0e34\u0e49\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e16\u0e32\u0e27\u0e23.
|
||||
Repair.Arcane.Lost=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e21\u0e35\u0e17\u0e31\u0e01\u0e29\u0e30\u0e1e\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e
|
||||
Repair.Arcane.Perfect=[[GREEN]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e22\u0e31\u0e48\u0e07\u0e22\u0e37\u0e19\u0e1e\u0e25\u0e31\u0e07\u0e07\u0e32\u0e19\u0e25\u0e35\u0e49\u0e25\u0e31\u0e1a\u0e43\u0e19\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e19\u0e35\u0e49.
|
||||
Repair.Arcane.Rank=[[RED]]Arcane Forging \u0e23\u0e30\u0e14\u0e31\u0e1a: [[YELLOW]]{0}/4
|
||||
Swords.Ability.Lower=[[GRAY]]**\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 Sword**
|
||||
Swords.Ability.Ready=[[GREEN]]**\u0e04\u0e38\u0e13\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 Sword**
|
||||
Swords.Combat.Bleed.Chance=[[RED]]Bleed \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Swords.Combat.Bleed.Length=[[RED]]Bleed \u0e21\u0e35\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0} ticks
|
||||
Swords.Combat.Bleed.Note=[[GRAY]]NOTE: [[YELLOW]]1 Tick \u0e40\u0e01\u0e34\u0e14\u0e02\u0e36\u0e49\u0e19\u0e17\u0e38\u0e01 2 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35
|
||||
Swords.Combat.Bleeding.Started=[[DARK_RED]] \u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e25\u0e37\u0e2d\u0e14\u0e44\u0e2b\u0e25!
|
||||
Swords.Combat.Bleeding.Stopped=[[GRAY]]\u0e17\u0e31\u0e01\u0e29\u0e30 Enemy Bleeding \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e[[GREEN]]
|
||||
Swords.Combat.Bleeding=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 ENEMY BLEEDING**
|
||||
Swords.Combat.Counter.Chance=[[RED]]Counter Attack \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Swords.Combat.Counter.Hit=[[DARK_RED]]\u0e42\u0e08\u0e21\u0e15\u0e35\u0e14\u0e49\u0e27\u0e22 counter-attack!
|
||||
Swords.Combat.Countered=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 COUNTER-ATTACKED**
|
||||
Swords.Combat.SS.Struck=[[DARK_RED]]\u0e23\u0e39\u0e49\u0e2a\u0e36\u0e01\u0e21\u0e36\u0e19\u0e07\u0e07 \u0e40\u0e1e\u0e23\u0e32\u0e30 \u0e17\u0e31\u0e01\u0e29\u0e30 SERRATED STRIKES!
|
||||
Swords.Effect.0=Counter Attack
|
||||
Swords.Effect.1=\u0e2a\u0e30\u0e17\u0e49\u0e2d\u0e19\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 {0} \u0e04\u0e37\u0e19
|
||||
Swords.Effect.2=Serrated Strikes (ABILITY)
|
||||
Swords.Effect.3={0} \u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e01\u0e23\u0e30\u0e08\u0e32\u0e22, \u0e40\u0e25\u0e37\u0e2d\u0e14\u0e44\u0e2b\u0e25+ \u0e01\u0e23\u0e30\u0e08\u0e32\u0e22
|
||||
Swords.Effect.4=Serrated Strikes Bleed+
|
||||
Swords.Effect.5={0} Tick \u0e15\u0e48\u0e2d\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e14\u0e44\u0e2b\u0e25
|
||||
Swords.Effect.6=Bleed
|
||||
Swords.Effect.7=\u0e40\u0e25\u0e37\u0e2d\u0e14\u0e44\u0e2b\u0e25\u0e2d\u0e2d\u0e01
|
||||
Swords.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Swords:
|
||||
Swords.SkillName=SWORDS
|
||||
Swords.Skills.SS.Off=[[RED]]**\u0e17\u0e31\u0e01\u0e29\u0e30 Serrated Strikes \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e**
|
||||
Swords.Skills.SS.On=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e28\u0e30 SERRATED STRIKES**
|
||||
Swords.Skills.SS.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Serrated Strikes [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Swords.Skills.SS.Other.Off=[[RED]]Serrated Strikes[[GREEN]] \u0e23\u0e2d\u0e01\u0e32\u0e23\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c [[YELLOW]]{0}
|
||||
Swords.Skills.SS.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Serrated Strikes!
|
||||
Swords.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Swords \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Swords.SS.Length=[[RED]]Serrated Strikes \u0e21\u0e35\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0}\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35
|
||||
Taming.Ability.Bonus.0=Environmentally Aware
|
||||
Taming.Ability.Bonus.1=\u0e2b\u0e21\u0e32\u0e1b\u0e48\u0e32\u0e2b\u0e25\u0e35\u0e01\u0e40\u0e25\u0e35\u0e48\u0e22\u0e07\u0e2d\u0e31\u0e19\u0e15\u0e23\u0e32\u0e22
|
||||
Taming.Ability.Bonus.2=Thick Fur
|
||||
Taming.Ability.Bonus.3=1/{0} \u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 \u0e15\u0e49\u0e32\u0e19\u0e17\u0e32\u0e19\u0e44\u0e1f
|
||||
Taming.Ability.Bonus.4=Shock Proof
|
||||
Taming.Ability.Bonus.5=\u0e41\u0e23\u0e07\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e40\u0e1b\u0e47\u0e19 1/{0} \u0e08\u0e32\u0e01\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e1b\u0e01\u0e15\u0e34
|
||||
Taming.Ability.Bonus.6=Sharpened Claws
|
||||
Taming.Ability.Bonus.7=\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22+{0}
|
||||
Taming.Ability.Bonus.8=Fast Food Service
|
||||
Taming.Ability.Bonus.9={0} \u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e42\u0e08\u0e21\u0e15\u0e35\u0e41\u0e25\u0e49\u0e27\u0e08\u0e30\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e1e\u0e25\u0e31\u0e07\u0e0a\u0e35\u0e27\u0e34\u0e15
|
||||
Taming.Ability.Bonus.10=Holy Hound
|
||||
Taming.Ability.Bonus.11=\u0e1f\u0e37\u0e49\u0e19\u0e2a\u0e38\u0e02\u0e20\u0e32\u0e1e\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e01\u0e34\u0e14\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e08\u0e32\u0e01\u0e40\u0e27\u0e17\u0e21\u0e19\u0e15\u0e23\u0e4c\u0e2b\u0e23\u0e37\u0e2d\u0e22\u0e32\u0e1e\u0e34\u0e29
|
||||
Taming.Ability.Locked.0=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (ENVIRONMENTALLY AWARE)
|
||||
Taming.Ability.Locked.1=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (THICK FUR)
|
||||
Taming.Ability.Locked.2=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (SHOCK PROOF)
|
||||
Taming.Ability.Locked.3=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (SHARPENED CLAWS)
|
||||
Taming.Ability.Locked.4=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (FAST FOOD SERVICE)
|
||||
Taming.Ability.Locked.5=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (HOLY HOUND)
|
||||
Taming.Combat.Chance.Gore=[[RED]]Gore \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Taming.Effect.0=Beast Lore
|
||||
Taming.Effect.1=\u0e01\u0e23\u0e30\u0e14\u0e39\u0e01\u0e43\u0e0a\u0e49\u0e15\u0e23\u0e27\u0e08\u0e2b\u0e21\u0e32\u0e1b\u0e48\u0e32\u0e41\u0e25\u0e30 ocelots
|
||||
Taming.Effect.10=Shock Proof
|
||||
Taming.Effect.11=\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e08\u0e32\u0e01\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e25\u0e14\u0e25\u0e07
|
||||
Taming.Effect.12=Call of the Wild
|
||||
Taming.Effect.13=\u0e40\u0e23\u0e35\u0e22\u0e01\u0e2a\u0e31\u0e15\u0e27\u0e4c\u0e21\u0e32\u0e14\u0e49\u0e32\u0e19\u0e02\u0e49\u0e32\u0e07\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13
|
||||
Taming.Effect.14=[[GRAY]]COTW (Ocelot): \u0e21\u0e2d\u0e1a\u0e1b\u0e25\u0e32\u0e43\u0e19\u0e21\u0e37\u0e2d {0} \u0e0a\u0e34\u0e49\u0e19\u0e42\u0e14\u0e22\u0e01\u0e32\u0e23\u0e04\u0e25\u0e34\u0e01\u0e0b\u0e49\u0e32\u0e22
|
||||
Taming.Effect.15=[[GRAY]]COTW (Wolf): \u0e21\u0e2d\u0e1a\u0e01\u0e23\u0e30\u0e14\u0e39\u0e01\u0e43\u0e19\u0e21\u0e37\u0e2d {0} \u0e0a\u0e34\u0e49\u0e19\u0e42\u0e14\u0e22\u0e04\u0e25\u0e34\u0e01\u0e0b\u0e49\u0e32\u0e22
|
||||
Taming.Effect.16=Fast Food Service
|
||||
Taming.Effect.17=\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2b\u0e21\u0e32\u0e1b\u0e48\u0e32\u0e17\u0e35\u0e48\u0e08\u0e30\u0e23\u0e31\u0e01\u0e29\u0e32\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07\u0e43\u0e19\u0e01\u0e32\u0e23\u0e42\u0e08\u0e21\u0e15\u0e35
|
||||
Taming.Effect.18=Holy Hound
|
||||
Taming.Effect.19=\u0e23\u0e31\u0e01\u0e29\u0e32\u0e1e\u0e34\u0e29\u0e41\u0e25\u0e30\u0e40\u0e27\u0e17\u0e21\u0e19\u0e15\u0e4c
|
||||
Taming.Effect.2=Gore
|
||||
Taming.Effect.3=\u0e42\u0e08\u0e21\u0e15\u0e35\u0e17\u0e33 Critical \u0e41\u0e25\u0e30\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e25\u0e37\u0e2d\u0e14\u0e44\u0e2b\u0e25
|
||||
Taming.Effect.4=Sharpened Claws
|
||||
Taming.Effect.5=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22
|
||||
Taming.Effect.6=Environmentally Aware
|
||||
Taming.Effect.7=\u0e25\u0e14\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e08\u0e32\u0e01\u0e01\u0e23\u0e30\u0e1a\u0e2d\u0e07\u0e40\u0e1e\u0e0a\u0e23 \u0e25\u0e32\u0e27\u0e32 \u0e01\u0e32\u0e23\u0e15\u0e01\u0e08\u0e32\u0e01\u0e17\u0e35\u0e48\u0e2a\u0e39\u0e07
|
||||
Taming.Effect.8=Thick Fur
|
||||
Taming.Effect.9=\u0e25\u0e14\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e08\u0e32\u0e01\u0e44\u0e1f
|
||||
Taming.Listener.Wolf=[[DARK_GRAY]]\u0e2b\u0e21\u0e32\u0e1b\u0e48\u0e32\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e01\u0e25\u0e31\u0e1a\u0e21\u0e32\u0e2b\u0e32\u0e04\u0e38\u0e13...
|
||||
Taming.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Taming:
|
||||
Taming.SkillName=TAMING
|
||||
Taming.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Taming \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Taming.Summon.Complete=[[GREEN]]\u0e40\u0e23\u0e35\u0e22\u0e01\u0e2a\u0e31\u0e15\u0e27\u0e4c\u0e2d\u0e2d\u0e01\u0e21\u0e32\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08
|
||||
Taming.Summon.Fail.Ocelot=[[RED]]\u0e04\u0e38\u0e13\u0e21\u0e35 ocelots \u0e21\u0e32\u0e01\u0e40\u0e01\u0e34\u0e19\u0e44\u0e1b\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e23\u0e35\u0e22\u0e01\u0e2d\u0e2d\u0e01\u0e21\u0e32\u0e44\u0e14\u0e49
|
||||
Taming.Summon.Fail.Wolf=[[RED]]\u0e04\u0e38\u0e13\u0e21\u0e35 wolf \u0e21\u0e32\u0e01\u0e40\u0e01\u0e34\u0e19\u0e44\u0e1b\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e23\u0e35\u0e22\u0e01\u0e2d\u0e2d\u0e01\u0e21\u0e32\u0e44\u0e14\u0e49
|
||||
Unarmed.Ability.Berserk.Length=[[RED]]Berserk \u0e21\u0e35\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0}\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35
|
||||
Unarmed.Ability.Bonus.0=Iron Arm Style
|
||||
Unarmed.Ability.Bonus.1=+{0} \u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19
|
||||
Unarmed.Ability.Chance.ArrowDeflect=[[RED]]Arrow Deflect \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Unarmed.Ability.Chance.Disarm=[[RED]]Disarm \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Unarmed.Ability.Chance.IronGrip=[[RED]]Iron Grip \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Unarmed.Ability.IronGrip.Attacker=[[RED]]\u0e1d\u0e48\u0e32\u0e22\u0e15\u0e23\u0e07\u0e02\u0e49\u0e32\u0e21\u0e21\u0e35 iron grip!
|
||||
Unarmed.Ability.IronGrip.Defender=[[GREEN]]Iron grip \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22!
|
||||
Unarmed.Ability.Lower=[[GRAY]]**\u0e04\u0e38\u0e13\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 \u0e21\u0e37\u0e2d**
|
||||
Unarmed.Ability.Ready=[[GREEN]]**\u0e04\u0e38\u0e13\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30\u0e02\u0e2d\u0e07 \u0e21\u0e37\u0e2d**
|
||||
Unarmed.Effect.0=Berserk (ABILITY)
|
||||
Unarmed.Effect.1=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e17\u0e33\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 +50%, \u0e17\u0e33\u0e25\u0e32\u0e22\u0e27\u0e31\u0e15\u0e16\u0e38\u0e17\u0e35\u0e48\u0e2d\u0e48\u0e2d\u0e19
|
||||
Unarmed.Effect.2=Disarm (Players)
|
||||
Unarmed.Effect.3=\u0e02\u0e42\u0e21\u0e22\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e43\u0e19\u0e21\u0e37\u0e2d\u0e02\u0e2d\u0e07\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19
|
||||
Unarmed.Effect.4=Iron Arm Style
|
||||
Unarmed.Effect.5=\u0e41\u0e02\u0e47\u0e07\u0e15\u0e31\u0e27\u0e41\u0e02\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e27\u0e25\u0e32\u0e1c\u0e48\u0e32\u0e19\u0e44\u0e1b
|
||||
Unarmed.Effect.6=Arrow Deflect
|
||||
Unarmed.Effect.7=Deflect arrows
|
||||
Unarmed.Effect.8=Iron Grip
|
||||
Unarmed.Effect.9=\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e44\u0e21\u0e48\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e16\u0e39\u0e01\u0e1b\u0e25\u0e14
|
||||
Unarmed.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Unarmed:
|
||||
Unarmed.SkillName=UNARMED
|
||||
Unarmed.Skills.Berserk.Off=[[RED]]**\u0e17\u0e31\u0e01\u0e29\u0e30 Berserk \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e**
|
||||
Unarmed.Skills.Berserk.On=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 BERSERK**
|
||||
Unarmed.Skills.Berserk.Other.Off=[[RED]]Berserk[[GREEN]] \u0e23\u0e2d\u0e01\u0e32\u0e23\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c [[YELLOW]]{0}
|
||||
Unarmed.Skills.Berserk.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Berserk!
|
||||
Unarmed.Skills.Berserk.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Berserk [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Unarmed.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Unarmed \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Woodcutting.Ability.0=\u0e17\u0e31\u0e01\u0e29\u0e30 Leaf Blower
|
||||
Woodcutting.Ability.1=\u0e17\u0e33\u0e25\u0e32\u0e22\u0e43\u0e1a\u0e44\u0e21\u0e49\u0e2d\u0e2d\u0e01
|
||||
Woodcutting.Ability.Chance.DDrop=[[RED]]Double Drop \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Woodcutting.Ability.Length=[[RED]]Tree Feller \u0e21\u0e35\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32: [[YELLOW]]{0}\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35
|
||||
Woodcutting.Ability.Locked.0=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (LEAF BLOWER)
|
||||
Woodcutting.Effect.0=Tree Feller (ABILITY)
|
||||
Woodcutting.Effect.1=\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e15\u0e49\u0e19\u0e44\u0e21\u0e49\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14
|
||||
Woodcutting.Effect.2=Leaf Blower
|
||||
Woodcutting.Effect.3=\u0e17\u0e33\u0e25\u0e32\u0e22\u0e43\u0e1a\u0e44\u0e21\u0e49\u0e2d\u0e2d\u0e01
|
||||
Woodcutting.Effect.4=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e01\u0e32\u0e23 Drops
|
||||
Woodcutting.Effect.5=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e2d\u0e31\u0e04\u0e23\u0e32\u0e01\u0e32\u0e23 Drops
|
||||
Woodcutting.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Woodcutting:
|
||||
Woodcutting.SkillName=WOODCUTTING
|
||||
Woodcutting.Skills.TreeFeller.Off=[[RED]]**\u0e17\u0e31\u0e01\u0e29\u0e30 Tree Feller \u0e2b\u0e21\u0e14\u0e2a\u0e20\u0e32\u0e1e**
|
||||
Woodcutting.Skills.TreeFeller.On=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 TREE FELLER**
|
||||
Woodcutting.Skills.TreeFeller.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Tree Feller [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
|
||||
Woodcutting.Skills.TreeFeller.Other.Off=[[RED]]Tree Feller[[GREEN]] \u0e23\u0e2d\u0e01\u0e32\u0e23\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c [[YELLOW]]{0}
|
||||
Woodcutting.Skills.TreeFeller.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Tree Feller!
|
||||
Woodcutting.Skills.TreeFeller.Splinter=[[RED]]\u0e02\u0e27\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e1e\u0e31\u0e07\u0e41\u0e25\u0e49\u0e27!
|
||||
Woodcutting.Skills.TreeFellerThreshold=[[RED]]\u0e15\u0e49\u0e19\u0e44\u0e21\u0e49\u0e15\u0e49\u0e19\u0e19\u0e35\u0e49\u0e43\u0e2b\u0e0d\u0e48\u0e40\u0e01\u0e34\u0e19\u0e44\u0e1b!
|
||||
Woodcutting.Skillup=[[YELLOW]]\u0e17\u0e31\u0e01\u0e29\u0e30 Woodcutting \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
|
||||
Ability.Generic.Refresh=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 ABILITIES REFRESHED!**
|
||||
Ability.Generic.Template.Lock=[[GRAY]]{0}
|
||||
Ability.Generic.Template=[[RED]]{0}: [[YELLOW]]{1}
|
||||
Combat.ArrowDeflect=[[WHITE]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 ARROW DEFLECT**
|
||||
Combat.BeastLore=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 BEAST LORE**
|
||||
Combat.BeastLoreHealth=[[DARK_AQUA]]\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e40\u0e25\u0e37\u0e2d\u0e14 ([[GREEN]]{0}[[DARK_AQUA]]/{1})
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]\u0e40\u0e08\u0e49\u0e32\u0e02\u0e2d\u0e07 ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.Gore=[[GREEN]]**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 GORED**
|
||||
Combat.StruckByGore=[[RED]]**\u0e04\u0e38\u0e13\u0e16\u0e39\u0e01\u0e17\u0e31\u0e01\u0e29\u0e30 Gored**
|
||||
Combat.TargetDazed=\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e17\u0e35\u0e48 [[DARK_RED]]\u0e21\u0e36\u0e19\u0e07\u0e07
|
||||
Combat.TouchedFuzzy=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e2a\u0e36\u0e01\u0e21\u0e36\u0e19 \u0e40\u0e1e\u0e23\u0e32\u0e30 \u0e17\u0e31\u0e01\u0e29\u0e30 Touched Fuzzy.
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcmmo help[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Founder),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Project Lead),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]bm01 [[BLUE]](Developer),[[GOLD]] - [[GREEN]]TfT_02 [[BLUE]](Developer),[[GOLD]] - [[GREEN]]Glitchfinder [[BLUE]](Developer),[[GOLD]] - [[GREEN]]t00thpick1 [[BLUE]](Developer),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]https://github.com/mcMMO-Dev/mcMMO/issues[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,
|
||||
Commands.addlevels.AwardAll.1=[[GREEN]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e07\u0e27\u0e31\u0e25 {0} \u0e17\u0e38\u0e01\u0e17\u0e31\u0e01\u0e29\u0e30!
|
||||
Commands.addlevels.AwardAll.2=[[RED]]\u0e17\u0e31\u0e01\u0e29\u0e30\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e41\u0e01\u0e49\u0e44\u0e02\u0e40\u0e1e\u0e37\u0e48\u0e2d {0}.
|
||||
Commands.addlevels.AwardSkill.1=[[GREEN]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e07\u0e27\u0e31\u0e25 {0} \u0e43\u0e19\u0e17\u0e31\u0e01\u0e29\u0e30 {1}!
|
||||
Commands.addlevels.AwardSkill.2=[[RED]]{0} \u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e41\u0e01\u0e49\u0e44\u0e02\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a {1}.
|
||||
Commands.addxp.AwardAll=[[GREEN]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e07\u0e27\u0e31\u0e25 {0} \u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c\u0e43\u0e19\u0e17\u0e31\u0e01\u0e29\u0e30\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14!
|
||||
Commands.addxp.AwardSkill=[[GREEN]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e07\u0e27\u0e31\u0e25 {0} \u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c\u0e17\u0e31\u0e01\u0e29\u0e30 {1}!
|
||||
Commands.Ability.Off=Ability \u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e42\u0e2b\u0e21\u0e14[[GREEN]]\u0e1b\u0e34\u0e14
|
||||
Commands.Ability.On=Ability \u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e42\u0e2b\u0e21\u0e14[[GREEN]]\u0e40\u0e1b\u0e34\u0e14
|
||||
Commands.AdminChat.Off=Admin Chat [[RED]]\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14
|
||||
Commands.AdminChat.On=Admin Chat [[GREEN]]\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19
|
||||
Commands.AdminChat.Prefix=[[AQUA]][[[WHITE]]{0}[[AQUA]]]
|
||||
Commands.AdminToggle=[[RED]]- \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e42\u0e2b\u0e21\u0e14 admin chat
|
||||
Commands.Chat.Console=*Console*
|
||||
Commands.Disabled=[[RED]]\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e44\u0e27\u0e49.
|
||||
Commands.DoesNotExist=[[RED]]\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e43\u0e19\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25!
|
||||
Commands.GodMode.Disabled=[[YELLOW]]mcMMO \u0e42\u0e2b\u0e21\u0e14 God \u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e2d\u0e22\u0e39\u0e48
|
||||
Commands.GodMode.Enabled=[[YELLOW]]mcMMO \u0e42\u0e2b\u0e21\u0e14 God \u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14
|
||||
Commands.GodMode.Forbidden=[mcMMO] \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e1a\u0e19\u0e42\u0e25\u0e01\u0e19\u0e35\u0e49 (\u0e14\u0e39 Permissions)
|
||||
Commands.Inspect=<player> [[RED]]- \u0e14\u0e39\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e02\u0e2d\u0e07\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19
|
||||
Commands.Invite.Accepted=[[GREEN]]\u0e22\u0e34\u0e19\u0e22\u0e2d\u0e21\u0e01\u0e32\u0e23\u0e23\u0e31\u0e1a\u0e40\u0e0a\u0e34\u0e0d. \u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e40\u0e02\u0e49\u0e32 party {0}
|
||||
Commands.Invite.Success=[[GREEN]]\u0e2a\u0e48\u0e07\u0e04\u0e33\u0e40\u0e0a\u0e34\u0e0d\u0e41\u0e25\u0e49\u0e27\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08.
|
||||
Commands.Leaderboards=<skill> <page> [[RED]]- Leaderboards
|
||||
Commands.mcc.Header=[[RED]]---[][[YELLOW]]\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 mcMMO[[RED]][]---
|
||||
Commands.mcgod=[[RED]]- \u0e42\u0e2b\u0e21\u0e14 God
|
||||
Commands.mchud.Invalid=[[RED]]\u0e44\u0e21\u0e48\u0e1e\u0e1a HUD \u0e0a\u0e19\u0e34\u0e14\u0e19\u0e35\u0e49.
|
||||
Commands.mcpurge.Success=[[GREEN]]\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e01\u0e33\u0e25\u0e31\u0e07\u0e25\u0e49\u0e32\u0e07\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22\u0e41\u0e25\u0e49\u0e27!
|
||||
Commands.mcrank.Heading=[[GOLD]]-=\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e2d\u0e31\u0e19\u0e14\u0e31\u0e1a\u0e02\u0e2d\u0e07\u0e1a\u0e38\u0e04\u0e04\u0e25=-
|
||||
Commands.mcrank.Overall=[[YELLOW]]\u0e23\u0e27\u0e21\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14[[GREEN]] - [[GOLD]]\u0e23\u0e30\u0e14\u0e31\u0e1a [[WHITE]]#[[GREEN]]{0}
|
||||
Commands.mcrank.Player=[[RED]]\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22: [[WHITE]]{0}
|
||||
Commands.mcrank.Unranked=[[WHITE]]Unranked
|
||||
Commands.mcrefresh.Success=[[RED]]{0}\'\'\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 \u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08.
|
||||
Commands.mcremove.Success=[[GREEN]]{0} \u0e08\u0e30\u0e16\u0e39\u0e01\u0e25\u0e1a\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08!
|
||||
Commands.mctop.Tip=[[GOLD]]Tip: \u0e43\u0e0a\u0e49 [[RED]]/mcrank[[GOLD]] \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e14\u0e39\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e02\u0e2d\u0e07\u0e1a\u0e38\u0e04\u0e04\u0e25!
|
||||
Commands.mmoedit=[player] <skill> <newvalue> [[RED]] - \u0e41\u0e01\u0e49\u0e44\u0e02\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22
|
||||
Commands.mmoedit.AllSkills.1=[[GREEN]]\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e17\u0e31\u0e01\u0e29\u0e30\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e16\u0e39\u0e01\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e47\u0e19 {0}!
|
||||
Commands.mmoedit.Modified.1=[[GREEN]]\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e40\u0e14\u0e34\u0e21\u0e04\u0e38\u0e13\u0e04\u0e37\u0e2d {0} \u0e16\u0e39\u0e01\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e40\u0e1b\u0e47\u0e19 {1}!
|
||||
Commands.mmoedit.Modified.2=[[RED]]{0} \u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e41\u0e01\u0e49\u0e44\u0e02\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a {1}.
|
||||
Commands.mmoupdate.Start=[[GRAY]]\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e01\u0e32\u0e23\u0e41\u0e1b\u0e25\u0e07 ...
|
||||
Commands.mmoupdate.Finish=[[GREEN]]\u0e01\u0e32\u0e23\u0e41\u0e1b\u0e25\u0e07\u0e40\u0e2a\u0e23\u0e47\u0e08!
|
||||
Commands.ModDescription=[[RED]]- \u0e2d\u0e48\u0e32\u0e19\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22
|
||||
Commands.NoConsole=\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\u0e08\u0e30\u0e44\u0e21\u0e48\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e04\u0e2d\u0e19\u0e42\u0e0b\u0e25.
|
||||
Commands.Notifications.Off=\u0e01\u0e32\u0e23\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e25\u0e31\u0e1a [[RED]]\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14
|
||||
Commands.Notifications.On=\u0e01\u0e32\u0e23\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e25\u0e31\u0e1a [[RED]]\u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14
|
||||
Commands.Offline=[[RED]]\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\u0e08\u0e30\u0e44\u0e21\u0e48\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19 Offline.
|
||||
Commands.Other=[[GREEN]]--\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e2d\u0e37\u0e48\u0e19\u0e46--
|
||||
Commands.Party.Header=[[RED]]-----[][[GREEN]]PARTY[[RED]][]-----
|
||||
Commands.Party.Status=[[DARK_GRAY]]\u0e0a\u0e37\u0e48\u0e2d: [[WHITE]]{0} {1}
|
||||
Commands.Party.ShareMode=[[DARK_GRAY]]\u0e42\u0e2b\u0e21\u0e14\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19:
|
||||
Commands.Party.ItemShare=[[GRAY]]\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07 [[DARK_AQUA]]({0})
|
||||
Commands.Party.ExpShare=[[GRAY]]EXP [[DARK_AQUA]]({0})
|
||||
Commands.Party.ItemShareCategories=[[DARK_GRAY]]\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07: [[GRAY]][[ITALIC]]{0}
|
||||
Commands.Party.MembersNear=[[DARK_GRAY]]\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e01\u0e25\u0e49\u0e04\u0e38\u0e13 [[DARK_AQUA]]{0}[[DARK_GRAY]]/[[DARK_AQUA]]{1}
|
||||
Commands.Party.Accept=[[RED]]- \u0e22\u0e34\u0e19\u0e22\u0e2d\u0e21\u0e04\u0e33\u0e40\u0e0a\u0e34\u0e0d
|
||||
Commands.Party.Chat.Off=Party Chat [[RED]]\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14
|
||||
Commands.Party.Chat.On=Party Chat [[GREEN]]\u0e40\u0e1b\u0e34\u0e14
|
||||
Commands.Party.Chat.Prefix=[[GREEN]]([[WHITE]]{0}[[GREEN]])
|
||||
Commands.Party.Commands=[[GREEN]]--\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 PARTY--
|
||||
Commands.Party.Invite.0=[[RED]]ALERT: [[GREEN]]\u0e04\u0e38\u0e13\u0e16\u0e39\u0e01\u0e40\u0e0a\u0e34\u0e0d\u0e40\u0e02\u0e49\u0e32 party {0} \u0e08\u0e32\u0e01 {1}
|
||||
Commands.Party.Invite.1=[[YELLOW]]\u0e43\u0e0a\u0e49 [[GREEN]]/party accept[[YELLOW]] \u0e40\u0e1e\u0e34\u0e48\u0e2d\u0e22\u0e2d\u0e21\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e23\u0e31\u0e1a\u0e40\u0e0a\u0e34\u0e0d
|
||||
Commands.Party.Invite=[[RED]]- \u0e2a\u0e48\u0e07\u0e04\u0e33\u0e40\u0e0a\u0e34\u0e0d Party
|
||||
Commands.Party.Join=[[GRAY]]\u0e44\u0e14\u0e49\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21 Party: {0}
|
||||
Commands.Party.Create=[[GRAY]]\u0e2a\u0e23\u0e49\u0e32\u0e07 Party: {0}
|
||||
Commands.Party.Rename=[[GRAY]]\u0e0a\u0e37\u0e48\u0e2d Party \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e40\u0e1b\u0e47\u0e19: [[WHITE]]{0}
|
||||
Commands.Party.SetSharing=[[GRAY]]Party {0} \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e16\u0e39\u0e01\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e47\u0e19: [[DARK_AQUA]]{1}
|
||||
Commands.Party.ToggleShareCategory=[[GRAY]]Party \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e43\u0e2b\u0e49 [[GOLD]]{0} [[GRAY]]\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a [[DARK_AQUA]]{1}
|
||||
Commands.Party.AlreadyExists=[[DARK_RED]]Party {0} \u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27!
|
||||
Commands.Party.Kick=[[RED]]\u0e04\u0e38\u0e13\u0e16\u0e39\u0e01\u0e19\u0e33\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01 party{0}!
|
||||
Commands.Party.Leave=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01 party
|
||||
Commands.Party.Members.Header=[[RED]]-----[][[GREEN]]\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01[[RED]][]-----
|
||||
Commands.Party.None=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 party.
|
||||
Commands.Party.Quit=[[RED]]- \u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e07\u0e32\u0e19 party \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e43\u0e19\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19
|
||||
Commands.Party.Teleport=<player> [[RED]]- Teleport to \u0e44\u0e1b\u0e2b\u0e32\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01 party
|
||||
Commands.Party.Toggle=[[RED]]- \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e42\u0e2b\u0e21\u0e14 Party Chat
|
||||
Commands.Party1=[[RED]]- \u0e2a\u0e23\u0e49\u0e32\u0e07 Party \u0e43\u0e2b\u0e21\u0e48
|
||||
Commands.Party2=[[RED]]- \u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21 Party \u0e02\u0e2d\u0e07\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19
|
||||
Commands.ptp.Enabled=Party teleporting [[GREEN]]\u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14
|
||||
Commands.ptp.Disabled=Party teleporting [[RED]]\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14
|
||||
Commands.ptp.NoRequests=[[RED]]\u0e04\u0e38\u0e13\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e21\u0e35\u0e01\u0e32\u0e23\u0e23\u0e49\u0e2d\u0e07\u0e02\u0e2d teleport \u0e43\u0e19\u0e40\u0e27\u0e25\u0e32\u0e19\u0e35\u0e49
|
||||
Commands.ptp.NoWorldPermissions=[[RED]][mcMMO] \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e43\u0e2b\u0e49 teleport \u0e43\u0e19\u0e42\u0e25\u0e01\u0e19\u0e35\u0e49 {0}.
|
||||
Commands.ptp.Request1=[[YELLOW]]{0} [[GREEN]]\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 teleport \u0e21\u0e32\u0e2b\u0e32\u0e04\u0e38\u0e13.
|
||||
Commands.ptp.Request2=[[GREEN]]\u0e40\u0e1e\u0e37\u0e48\u0e2d teleport \u0e43\u0e0a\u0e49 [[YELLOW]]/ptp accept. [[GREEN]]\u0e20\u0e32\u0e22\u0e43\u0e19 [[RED]]{0} [[GREEN]]\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35.
|
||||
Commands.ptp.AcceptAny.Enabled=Party teleport [[GREEN]]\u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14
|
||||
Commands.ptp.AcceptAny.Disabled=Party teleport [[RED]]\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14
|
||||
Commands.ptp.RequestExpired=[[RED]]Party teleport \u0e2b\u0e21\u0e14\u0e40\u0e27\u0e25\u0e32\u0e41\u0e25\u0e49\u0e27!
|
||||
Commands.PowerLevel.Leaderboard=[[YELLOW]]--mcMMO[[BLUE]] \u0e23\u0e30\u0e14\u0e31\u0e1a\u0e1e\u0e25\u0e31\u0e07 [[YELLOW]]Leaderboard--
|
||||
Commands.PowerLevel.Capped=[[DARK_RED]]\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e1e\u0e25\u0e31\u0e07: [[GREEN]]{0} [[DARK_RED]]\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e40\u0e15\u0e47\u0e21: [[YELLOW]]{1}
|
||||
Commands.PowerLevel=[[DARK_RED]]\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e1e\u0e25\u0e31\u0e07: [[GREEN]]{0}
|
||||
Commands.Reset.All=[[GREEN]]\u0e17\u0e31\u0e01\u0e29\u0e30\u0e17\u0e38\u0e01\u0e17\u0e31\u0e01\u0e29\u0e30\u0e16\u0e39\u0e01\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e43\u0e2b\u0e21\u0e48.
|
||||
Commands.Reset.Single=[[GREEN]]\u0e17\u0e31\u0e01\u0e29\u0e30 {0} \u0e23\u0e30\u0e14\u0e31\u0e1a\u0e17\u0e31\u0e01\u0e29\u0e30\u0e44\u0e14\u0e49\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e43\u0e2b\u0e21\u0e48\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22\u0e41\u0e25\u0e49\u0e27.
|
||||
Commands.Reset=[[RED]]\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e17\u0e31\u0e01\u0e29\u0e30\u0e43\u0e2b\u0e21\u0e48\u0e43\u0e2b\u0e49\u0e40\u0e1b\u0e47\u0e19 0
|
||||
Commands.Skill.Invalid=[[RED]]\u0e44\u0e21\u0e48\u0e21\u0e35\u0e0a\u0e37\u0e48\u0e2d\u0e17\u0e31\u0e01\u0e29\u0e30\u0e19\u0e35\u0e49!
|
||||
Commands.Skill.Leaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard--
|
||||
Commands.SkillInfo=/<skill> [[RED]]- \u0e14\u0e39\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e17\u0e31\u0e01\u0e29\u0e30
|
||||
Commands.Stats.Self=\u0e2a\u0e16\u0e34\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13
|
||||
Commands.Stats=[[RED]]- \u0e14\u0e39\u0e2a\u0e16\u0e34\u0e15\u0e34 mcMMO \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13
|
||||
Commands.ToggleAbility=[[RED]]- \u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e14\u0e22\u0e01\u0e32\u0e23\u0e04\u0e25\u0e34\u0e01\u0e02\u0e27\u0e32
|
||||
Commands.Usage.0=[[RED]]\u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49 /{0}
|
||||
Commands.Usage.1=[[RED]]\u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49 /{0} {1}
|
||||
Commands.Usage.2=[[RED]]\u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49 /{0} {1} {2}
|
||||
Commands.Usage.3=[[RED]]\u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49 /{0} {1} {2} {3}
|
||||
Commands.Usage.Level=\u0e23\u0e30\u0e14\u0e31\u0e1a
|
||||
Commands.Usage.Message=\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21
|
||||
Commands.Usage.Page=\u0e2b\u0e19\u0e49\u0e32
|
||||
Commands.Usage.PartyName=\u0e0a\u0e37\u0e48\u0e2d
|
||||
Commands.Usage.Password=\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19
|
||||
Commands.Usage.Player=\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19
|
||||
Commands.Usage.Rate=\u0e2d\u0e31\u0e15\u0e23\u0e32
|
||||
Commands.Usage.Skill=\u0e17\u0e31\u0e01\u0e29\u0e30
|
||||
Commands.Usage.XP=Exp
|
||||
mcMMO.NoInvites=[[RED]]\u0e04\u0e38\u0e13\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e16\u0e39\u0e01\u0e40\u0e0a\u0e34\u0e0d\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49
|
||||
mcMMO.NoPermission=[[DARK_RED]]\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c\u0e44\u0e21\u0e48\u0e40\u0e1e\u0e35\u0e22\u0e07\u0e1e\u0e2d.
|
||||
mcMMO.NoSkillNote=[[DARK_GRAY]]\u0e2b\u0e32\u0e01\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e17\u0e31\u0e01\u0e29\u0e30\u0e21\u0e31\u0e19\u0e08\u0e30\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e41\u0e2a\u0e14\u0e07\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48
|
||||
Party.Forbidden=[mcMMO] \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e1a\u0e19\u0e42\u0e25\u0e01\u0e19\u0e35\u0e49 (\u0e14\u0e39 Permissions)
|
||||
Party.Help.0=[[RED]]\u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0} <player> [password].
|
||||
Party.Help.1=[[RED]]\u0e2a\u0e23\u0e49\u0e32\u0e07 Party \u0e43\u0e2b\u0e21\u0e48\u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0} <name> [password].
|
||||
Party.Help.2=[[RED]]\u0e1b\u0e23\u0e36\u0e01\u0e29\u0e32 [[DARK_AQUA]]{0} [[RED]]\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21
|
||||
Party.Help.3=[[RED]]\u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0} <player> [password] [[RED]]\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32 [[DARK_AQUA]]{1} [[RED]]\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e2d\u0e01
|
||||
Party.Help.4=[[RED]]\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e25\u0e47\u0e2d\u0e04\u0e2b\u0e23\u0e37\u0e2d\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e04 Party \u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0}
|
||||
Party.Help.5=[[RED]]\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19 Party \u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0} <password>
|
||||
Party.Help.6=[[RED]]\u0e40\u0e15\u0e30\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e08\u0e32\u0e01 Party \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0} <player>
|
||||
Party.Help.7=[[RED]]\u0e43\u0e19\u0e01\u0e32\u0e23\u0e42\u0e2d\u0e19\u0e2b\u0e31\u0e27\u0e2b\u0e19\u0e49\u0e32\u0e02\u0e2d\u0e07 Party \u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0} <player>
|
||||
Party.Help.8=[[RED]]\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01 Party \u0e43\u0e0a\u0e49 [[DARK_AQUA]]{0}
|
||||
Party.InformedOnJoin={0} [[GREEN]]\u0e44\u0e14\u0e49\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21 Party \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13
|
||||
Party.InformedOnQuit={0} [[GREEN]]\u0e44\u0e14\u0e49\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01 Party \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13
|
||||
Party.InformedOnNameChange=[[GOLD]]{0} [[GREEN]]\u0e44\u0e14\u0e49\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e0a\u0e37\u0e48\u0e2d Party \u0e40\u0e1b\u0e47\u0e19 [[WHITE]]{1}
|
||||
Party.InvalidName=[[DARK_RED]]\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e0a\u0e37\u0e48\u0e2d party \u0e19\u0e35\u0e49.
|
||||
Party.Invite.Self=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e0a\u0e34\u0e0d\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07\u0e44\u0e14\u0e49!
|
||||
Party.IsLocked=[[RED]]Party \u0e16\u0e39\u0e01\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27!
|
||||
Party.IsntLocked=[[RED]]party \u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01!
|
||||
Party.Locked=[[RED]]Party \u0e16\u0e39\u0e01\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e27\u0e49 \u0e15\u0e49\u0e2d\u0e07\u0e43\u0e2b\u0e49\u0e2b\u0e31\u0e27\u0e2b\u0e19\u0e49\u0e32 Party \u0e40\u0e0a\u0e34\u0e0d\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19.
|
||||
Party.NotInYourParty=[[DARK_RED]]{0} \u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 party \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13
|
||||
Party.NotOwner=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e31\u0e27\u0e2b\u0e19\u0e49\u0e32 Party.
|
||||
Party.Owner.New=[[GREEN]]{0} \u0e44\u0e14\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e31\u0e27\u0e2b\u0e19\u0e49\u0e32 Party \u0e43\u0e2b\u0e21\u0e48.
|
||||
Party.Owner.NotLeader=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e08\u0e30\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e31\u0e27\u0e2b\u0e19\u0e49\u0e32 Party.
|
||||
Party.Owner.Player=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e31\u0e27\u0e2b\u0e19\u0e49\u0e32 Party.
|
||||
Party.Password.None=[[RED]]Party \u0e19\u0e35\u0e49\u0e21\u0e35\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19 \u0e42\u0e1b\u0e23\u0e14\u0e23\u0e30\u0e1a\u0e38\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21.
|
||||
Party.Password.Incorrect=[[RED]]\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19 Party \u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07.
|
||||
Party.Password.Set=[[GREEN]]\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19 Party \u0e16\u0e39\u0e01\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e47\u0e19 {0}
|
||||
Party.Password.Removed=[[GREEN]]\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19 Party \u0e16\u0e39\u0e01\u0e25\u0e49\u0e32\u0e07\u0e2d\u0e2d\u0e01.
|
||||
Party.Player.Invalid=[[RED]]\u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14.
|
||||
Party.NotOnline=[[DARK_RED]]{0} \u0e44\u0e21\u0e48\u0e44\u0e14\u0e49 Online!
|
||||
Party.Player.InSameParty=[[RED]]{0} \u0e44\u0e14\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 Party \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e41\u0e25\u0e49\u0e27!
|
||||
Party.PlayerNotInParty=[[DARK_RED]]{0} \u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 Party
|
||||
Party.Specify=[[RED]]\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e30\u0e1a\u0e38 Party.
|
||||
Party.Teleport.Dead=[[RED]]\u0e04\u0e39\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16 teleport \u0e44\u0e1b\u0e2b\u0e32\u0e1c\u0e39\u0e40\u0e25\u0e48\u0e19\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49.
|
||||
Party.Teleport.Hurt=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e1a\u0e32\u0e14\u0e40\u0e08\u0e47\u0e1a\u0e43\u0e19\u0e0a\u0e48\u0e27\u0e07 {0} \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35\u0e41\u0e25\u0e30\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16 teleport.
|
||||
Party.Teleport.Player=[[GREEN]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49 teleport \u0e44\u0e1b\u0e2b\u0e32 {0}.
|
||||
Party.Teleport.Self=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16 teleport \u0e44\u0e1b\u0e2b\u0e32\u0e04\u0e38\u0e13\u0e40\u0e2d\u0e07\u0e44\u0e14\u0e49
|
||||
Party.Teleport.Target=[[GREEN]]{0} \u0e44\u0e14\u0e49\u0e17\u0e33\u0e01\u0e32\u0e23 teleport \u0e21\u0e32\u0e2b\u0e32\u0e04\u0e38\u0e13.
|
||||
Party.Teleport.Disabled=[[RED]]{0} \u0e44\u0e21\u0e48\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e43\u0e2b\u0e49\u0e1a\u0e38\u0e04\u0e04\u0e25 teleport.
|
||||
Party.Rename.Same=[[RED]]\u0e0a\u0e37\u0e48\u0e2d\u0e19\u0e35\u0e49\u0e21\u0e35\u0e43\u0e19 Party \u0e41\u0e25\u0e49\u0e27!
|
||||
Party.Join.Self=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21\u0e14\u0e49\u0e27\u0e22\u0e15\u0e31\u0e27\u0e04\u0e38\u0e13\u0e40\u0e2d\u0e07!
|
||||
Party.Unlocked=[[GRAY]]Party \u0e16\u0e39\u0e01\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01
|
||||
Party.Disband=[[GRAY]]Party \u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e44\u0e27\u0e49
|
||||
Party.Status.Locked=[[DARK_RED]](\u0e40\u0e0a\u0e34\u0e0d\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27)
|
||||
Party.Status.Unlocked=[[DARK_GREEN]](\u0e40\u0e1b\u0e34\u0e14)
|
||||
Party.ShareType.Exp=EXP
|
||||
Party.ShareType.Item=\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07
|
||||
Party.ShareMode.None=NONE
|
||||
Party.ShareMode.Equal=\u0e40\u0e17\u0e48\u0e32\u0e01\u0e31\u0e19
|
||||
Party.ShareMode.Random=\u0e2a\u0e38\u0e48\u0e21
|
||||
Party.ExpShare.Disabled=[[RED]]Party \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14.
|
||||
Party.ItemShare.Disabled=[[RED]]Party \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14.
|
||||
Commands.XPGain.Acrobatics=Falling
|
||||
Commands.XPGain.Archery=\u0e17\u0e33\u0e01\u0e32\u0e23\u0e42\u0e08\u0e21\u0e15\u0e35 Monster
|
||||
Commands.XPGain.Axes=\u0e17\u0e33\u0e01\u0e32\u0e23\u0e42\u0e08\u0e21\u0e15\u0e35 Monster
|
||||
Commands.XPGain.Child=\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e23\u0e32\u0e07\u0e27\u0e31\u0e25\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30
|
||||
Commands.XPGain.Excavation=\u0e02\u0e38\u0e14\u0e41\u0e25\u0e30\u0e2b\u0e32\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34
|
||||
Commands.XPGain.Fishing=Fishing!
|
||||
Commands.XPGain.Herbalism=Harvesting Herbs
|
||||
Commands.XPGain.Mining=\u0e01\u0e32\u0e23\u0e17\u0e33\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e07\u0e41\u0e23\u0e48\u0e2b\u0e34\u0e19\u0e41\u0e25\u0e30\u0e41\u0e23\u0e48
|
||||
Commands.XPGain.Repair=Repairing
|
||||
Commands.XPGain.Swords=\u0e17\u0e33\u0e01\u0e32\u0e23\u0e42\u0e08\u0e21\u0e15\u0e35 Monster
|
||||
Commands.XPGain.Taming=\u0e2a\u0e31\u0e15\u0e27\u0e4c\u0e40\u0e25\u0e35\u0e49\u0e22\u0e07\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1d\u0e36\u0e01\u0e1d\u0e19\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e2a\u0e39\u0e49
|
||||
Commands.XPGain.Unarmed=\u0e17\u0e33\u0e01\u0e32\u0e23\u0e42\u0e08\u0e21\u0e15\u0e35 Monster
|
||||
Commands.XPGain.Woodcutting=\u0e2a\u0e31\u0e1a\u0e15\u0e49\u0e19\u0e44\u0e21\u0e49\u0e25\u0e49\u0e21\u0e25\u0e07
|
||||
Commands.XPGain=[[DARK_GRAY]]EXP \u0e17\u0e35\u0e48\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a: [[WHITE]]{0}
|
||||
Commands.xplock.locked=[[GOLD]]BAR EXP \u0e16\u0e39\u0e01\u0e1b\u0e14\u0e25\u0e47\u0e2d\u0e01 {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]EXP BAR \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e16\u0e39\u0e01 [[GREEN]]\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01[[GOLD]]!
|
||||
Commands.xprate.modified=[[RED]]\u0e2d\u0e31\u0e04\u0e23\u0e32 EXP \u0e16\u0e39\u0e01\u0e41\u0e01\u0e49\u0e44\u0e02\u0e40\u0e1b\u0e47\u0e19 {0}
|
||||
Commands.xprate.over=[[RED]]mcMMO \u0e2d\u0e31\u0e15\u0e23\u0e32EXP \u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e21\u0e32\u0e01\u0e02\u0e36\u0e49\u0e19!!
|
||||
Commands.xprate.proper.0=[[RED]]\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e2d\u0e31\u0e15\u0e23\u0e32 EXP \u0e40\u0e1b\u0e47\u0e19 /xprate <integer> <true/false>
|
||||
Commands.xprate.proper.1=[[RED]]\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01\u0e04\u0e37\u0e19\u0e2d\u0e31\u0e15\u0e23\u0e32 EXP \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e16\u0e39\u0e01\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e43\u0e2b\u0e21\u0e48 xprate /
|
||||
Commands.xprate.proper.2=[[RED]]\u0e42\u0e1b\u0e23\u0e14\u0e23\u0e30\u0e1a\u0e38\u0e08\u0e23\u0e34\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e17\u0e47\u0e08\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e41\u0e2a\u0e14\u0e07\u0e27\u0e48\u0e32\u0e19\u0e35\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e2b\u0e15\u0e38\u0e01\u0e32\u0e23\u0e13\u0e4c EXP \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48
|
||||
Commands.xprate.started.0=[[GOLD]]\u0e40\u0e2b\u0e15\u0e38\u0e01\u0e32\u0e23\u0e13\u0e4c EXP \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a mcMMO \u0e44\u0e14\u0e49\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19!
|
||||
Commands.xprate.started.1=[[GOLD]]mcMMO \u0e2d\u0e31\u0e15\u0e23\u0e32 EXP \u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49 {0}x!
|
||||
XPRate.Event=[[GOLD]]mcMMO \u0e02\u0e13\u0e30\u0e19\u0e35\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e40\u0e2b\u0e15\u0e38\u0e01\u0e32\u0e23\u0e13\u0e4c\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c! \u0e2d\u0e31\u0e15\u0e23\u0e32\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c \u0e40\u0e1b\u0e47\u0e19 {0} \u0e40\u0e17\u0e48\u0e32!
|
||||
Effects.Effects=EFFECTS
|
||||
Effects.Child=[[DARK_GRAY]]\u0e23\u0e30\u0e14\u0e31\u0e1a: [[GREEN]]{0}
|
||||
Effects.Level=[[DARK_GRAY]]\u0e23\u0e30\u0e14\u0e31\u0e1a: [[GREEN]]{0} [[DARK_AQUA]]EXP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Effects.Parent=[[GOLD]]{0} -
|
||||
Effects.Template=[[DARK_AQUA]]{0}: [[GREEN]]{1}
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=[[DARK_AQUA]]About Archery:\n[[YELLOW]]Archery is about shooting with your bow and arrow.\n[[YELLOW]]It provides various combat bonuses, such as a damage boost\n[[YELLOW]]that scales with your level and the ability to daze your\n[[YELLOW]]opponents in PvP. In addition to this, you can retrieve\n[[YELLOW]]some of your spent arrows from the corpses of your foes.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to shoot mobs or\n[[YELLOW]]other players.\n[[DARK_AQUA]]How does Skill Shot work?\n[[YELLOW]]Skill Shot provides additional damage to your shots.\n[[YELLOW]]The bonus damage from Skill Shot increases as you\n[[YELLOW]]level in Archery.\n[[YELLOW]]With the default settings, your archery damage increases 10%\n[[YELLOW]]every 50 levels, to a maximum of 200% bonus damage.\n[[DARK_AQUA]]How does Daze work?\n[[YELLOW]]You have a passive chance to daze other players when\n[[YELLOW]]you shoot them. When Daze triggers it forces your opponents\n[[YELLOW]]to look straight up for a short duration.\n[[YELLOW]]A Daze shot also deals an additional 4 damage (2 hearts).\n[[DARK_AQUA]]How does Arrow Retrieval work?\n[[YELLOW]]You have a passive chance to retrieve some of your arrows\n[[YELLOW]]when you kill a mob with your bow.\n[[YELLOW]]This chance increases as you level in Archery.\n[[YELLOW]]By default, this ability increases by 0.1% per level, up to 100%\n[[YELLOW]]at level 1000.
|
||||
Guides.Axes=[[DARK_AQUA]]About Axes:\n[[YELLOW]]With the Axes skill you can use your axe for much more then\n[[YELLOW]]just deforesting! You can hack and chop away at mobs\n[[YELLOW]]and players to gain XP, hitting mobs with the effect of\n[[YELLOW]]knockback and inflicting DEADLY criticals on mobs and players.\n[[YELLOW]]Your axe also becomes a hand-held woodchipper,\n[[YELLOW]]breaking down the enemy\'s armor with ease as your level\n[[YELLOW]]increases.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need hit other mobs or players\n[[YELLOW]]with an Axe.\n[[DARK_AQUA]]How does Skull Splitter work?\n[[YELLOW]]This ability allows you to deal an AoE (Area of Effect) hit.\n[[YELLOW]]This AoE hit will deal half as much damage as you did to the\n[[YELLOW]]main target, so it\'s great for clearing out large piles of mobs.\n[[DARK_AQUA]]How does Critical Strikes work?\n[[YELLOW]]Critical Strikes is a passive ability which gives players a\n[[YELLOW]]chance to deal additional damage.\n[[YELLOW]]With the default settings, every 2 skill levels in Axes awards a\n[[YELLOW]]0.1% chance to deal a Critical Strike, causing 2.0 times damage\n[[YELLOW]]to mobs or 1.5 times damage against other players.\n[[DARK_AQUA]]How does Axe Mastery work?\n[[YELLOW]]Axe Mastery is a passive ability that will add additional damage\n[[YELLOW]]to your hits when using Axes.\n[[YELLOW]]By default, the bonus damage increases by 1 every 50 levels,\n[[YELLOW]]up to a cap of 4 extra damage at level 200.\n[[DARK_AQUA]]How does Armor Impact work?\n[[YELLOW]]Strike with enough force to shatter armor!\n[[YELLOW]]Armor Impact has a passive chance to damage your\n[[YELLOW]]opponent\'s armor. This damage increases as you level in Axes.\n[[DARK_AQUA]]How does Greater Impact work?\n[[YELLOW]]You have a passive chance to achieve a greater impact when\n[[YELLOW]]hitting mobs or players with your axe.\n[[YELLOW]]By default this chance is 25%. This passive ability has an\n[[YELLOW]]extreme knockback effect, similar to the Knockback II\n[[YELLOW]]enchantment. In addition, it deals bonus damage to the target.
|
||||
Guides.Available=[[DARK_AQUA]]\u0e41\u0e19\u0e30\u0e19\u0e33 {0} \u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49 - \u0e0a\u0e19\u0e34\u0e14 /{1} ? [\u0e2b\u0e19\u0e49\u0e32]
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it\'s\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=[[DARK_AQUA]]About Fishing:\n[[YELLOW]]With the Fishing skill, Fishing is exciting again!\n[[YELLOW]]Find hidden treasures, and shake items off mobs.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]Catch fish.\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]This ability allows you to find treasure from fishing \n[[YELLOW]]with a small chance of the items being enchanted.\n[[YELLOW]]Every possible treasure for Fishing has its own\n[[YELLOW]]skill level requirement for it to drop.\n[[YELLOW]]The higher your Fishing skill is, the more\n[[YELLOW]]treasures that can be found.\n[[DARK_AQUA]]How does Shake work?\n[[YELLOW]]This active ability allows you to shake items loose from mobs\n[[YELLOW]]by hooking them with the fishing rod. \n[[YELLOW]]Mobs will drop items they would normally drop on death.\n[[YELLOW]]It is also possible to acquire mob skulls, which are normally \n[[YELLOW]]unobtainable in survival mode.\n[[DARK_AQUA]]How does Fisherman\'s Diet work?\n[[YELLOW]]This passive skill increases the amount of hunger restored \n[[YELLOW]]from eating fish.\n[[DARK_AQUA]]Notes about Fishing:\n[[YELLOW]]Fishing drops are completely customizable,\n[[YELLOW]]so results vary server to server.\n
|
||||
Guides.Header=[[GOLD]]-=[[GREEN]]{0} \u0e41\u0e19\u0e30\u0e19\u0e33[[GOLD]]=-
|
||||
Guides.Herbalism=[[DARK_AQUA]]About Herbalism:\n[[YELLOW]]Herbalism is about collecting herbs and plants.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]Collect plants and herbs.\n[[DARK_AQUA]]Compatible Blocks\n[[YELLOW]]Wheat, Potatoes, Carrots, Melons, \n[[YELLOW]]Pumpkins, Sugar Canes, Cocoa Beans, Flowers, Cacti, Mushrooms,\n[[YELLOW]]Nether Wart, Lily Pads, and Vines.\n[[DARK_AQUA]]How does Green Terra work?\n[[YELLOW]]Green Terra is an active ability, you can right-click\n[[YELLOW]]while holding a hoe to activate Green Terra.\n[[YELLOW]]Green Terra grants players a chance to get 3x drops from\n[[YELLOW]]harvesting plants. It also gives players the ability to\n[[YELLOW]]spread life into blocks and transform them using seeds\n[[YELLOW]]from your inventory.\n[[DARK_AQUA]]How does Green Thumb (Crops) work?\n[[YELLOW]]This passive ability will automatically replant crops when\n[[YELLOW]]harvesting.\n[[YELLOW]]Your chance of success depends on your Herbalism skill.\n[[DARK_AQUA]]How does Green Thumb (Cobble/Stone Brick/Dirt) work?\n[[YELLOW]]This active ability allows you to turn blocks into their\n[[YELLOW]]\"plant-related\" counterparts. You can do this by right-clicking\n[[YELLOW]]a block, while holding seeds. This will consume 1 seed.\n[[DARK_AQUA]]How does Farmer\'s Diet work?\n[[YELLOW]]This passive skill increases the amount of hunger restored \n[[YELLOW]]when eating Bread, Cookies, Melons, Mushroom Soup, Carrots,\n[[YELLOW]]and Potatoes.\n[[DARK_AQUA]]How does Hylian Luck work?\n[[YELLOW]]This passive ability gives you a chance to find rare items\n[[YELLOW]]when certain blocks are broken with a sword.\n[[DARK_AQUA]]How do Double Drops work?\n[[YELLOW]]This passive ability gives players more yield from their\n[[YELLOW]]harvests.
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]crouch and right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Page.Invalid=\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07!
|
||||
Guides.Page.OutOfRange=\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2b\u0e19\u0e49\u0e32\u0e19\u0e35\u0e2d\u0e22\u0e39\u0e48 \u0e21\u0e35\u0e40\u0e1e\u0e35\u0e22\u0e07 {0} \u0e2b\u0e19\u0e49\u0e32.
|
||||
Guides.Repair=[[DARK_AQUA]]About Repair:\n[[YELLOW]]Repair allows you to use an iron block to repair armor and\n[[YELLOW]]tools, or a gold block to salvage armor and tools.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]Repair tools or armor using the mcMMO Anvil. This is an\n[[YELLOW]]iron block by default and should not be confused with\n[[YELLOW]]the Vanilla Minecraft Anvil.\n[[DARK_AQUA]]How can I use Repair?\n[[YELLOW]]Place down a mcMMO Anvil and right-click to repair the item \n[[YELLOW]]you\'re currently holding. This consumes 1 item on every use.\n[[DARK_AQUA]]How does Repair Mastery work?\n[[YELLOW]]Repair Mastery increases the repair amount. The extra amount\n[[YELLOW]]repaired is influenced by your Repair skill level.\n[[DARK_AQUA]]How does Super Repair work?\n[[YELLOW]]Super Repair is a passive ability. When repairing an item,\n[[YELLOW]]it grants players a chance to repair an item with\n[[YELLOW]]double effectiveness.\n[[DARK_AQUA]]How does Arcane Forging work?\n[[YELLOW]]This passive ability allows you to repair items with a certain\n[[YELLOW]]chance of maintaining its enchantments. The enchants may be\n[[YELLOW]]kept at their existing levels, downgraded to a lower level,\n[[YELLOW]]or lost entirely.\n[[DARK_AQUA]]How does Salvage work?\n[[YELLOW]]Place down a mcMMO Salvage Anvil and right-click to salvage\n[[YELLOW]]the item you\'re currently holding.\n[[YELLOW]]This will break the item apart en give back the used ingots.\n[[YELLOW]]Note: You can only salvage fully repaired tools or armor.
|
||||
Guides.Swords=[[DARK_AQUA]]About Swords:\n[[YELLOW]]This skill awards combat bonuses to anyone fighting with a\n[[YELLOW]]sword.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]XP is gained based on the amount of damage dealt to mobs or \n[[YELLOW]]other players when wielding a sword.\n[[DARK_AQUA]]How does Serrated Strikes work?\n[[YELLOW]]Serrated Strikes is an active ability, you can activate it by\n[[YELLOW]]right-clicking with a sword. This ability allows you to deal \n[[YELLOW]]an AoE (Area of Effect) hit. This AoE will do a bonus 25%\n[[YELLOW]]damage and will inflict a bleed effect that lasts for 5 ticks.\n[[DARK_AQUA]]How does Counter Attack work?\n[[YELLOW]]Counter Attack is a passive ability. When taking hits from mobs,\n[[YELLOW]]you will have a chance to reflect 50% of the damage that was \n[[YELLOW]]taken.\n[[DARK_AQUA]]How does Bleed work?\n[[YELLOW]]Bleed causes enemies to take damage every two seconds. The \n[[YELLOW]]target will bleed until the effect wears off, or death, \n[[YELLOW]]whichever comes first.\n[[YELLOW]]The duration of the bleed is increased by your sword skill.
|
||||
Guides.Smelting=\u0e40\u0e23\u0e47\u0e27\u0e46\u0e19\u0e35\u0e49...
|
||||
Guides.Taming=[[DARK_AQUA]]About Taming:\n[[YELLOW]]Taming will give players various combat bonuses when using\n[[YELLOW]]tamed wolves.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you need to tame wolves/ocelots or\n[[YELLOW]]get into combat with your wolves.\n[[DARK_AQUA]]How does Call of the Wild work?\n[[YELLOW]]Call of the Wild is an active ability that will allow you to summon\n[[YELLOW]]a wolf or an ocelot by your side. You can do this by\n[[YELLOW]]left-clicking while holding bones or fish.\n[[DARK_AQUA]]How does Beast Lore work?\n[[YELLOW]]Beast Lore allows players to inspect pets and to check the\n[[YELLOW]]stats of wolves and ocelots. Left-click a wolf or ocelot to use\n[[YELLOW]]Beast Lore.\n[[DARK_AQUA]]How does Gore work?\n[[YELLOW]]Gore is a passive ability that has a chance of inflicting a\n[[YELLOW]]bleeding effect on your wolves\' targets.\n[[DARK_AQUA]]How does Sharpened Claws work?\n[[YELLOW]]Sharpened Claws provides a damage bonus to damage dealt\n[[YELLOW]]by wolves. The damage bonus depends on your Taming level.\n[[DARK_AQUA]]How does Environmentally Aware work?\n[[YELLOW]]This passive ability will allow wolves to teleport to you when\n[[YELLOW]]they get near hazards, such as Cacti/Lava. It will also give\n[[YELLOW]]wolves fall damage immunity.\n[[DARK_AQUA]]How does Thick Fur work?\n[[YELLOW]]This passive ability will reduce damage and make wolves\n[[YELLOW]]fire resistant.\n[[DARK_AQUA]]How does Shock Proof work?\n[[YELLOW]]This passive ability reduces damage done to wolves\n[[YELLOW]]from explosions.\n[[DARK_AQUA]]How does Fast Food Service work?\n[[YELLOW]]This passive ability gives wolves a chance to heal whenever\n[[YELLOW]]they perform an attack.
|
||||
Guides.Unarmed=[[DARK_AQUA]]About Unarmed:\n[[YELLOW]]Unarmed will give players various combat bonuses when using\n[[YELLOW]]your fists as a weapon. \n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]XP is gained based on the amount of damage dealt to mobs \n[[YELLOW]]or other players when unarmed.\n[[DARK_AQUA]]How does Berserk work?\n[[YELLOW]]Beserk is an active ability that is activated by\n[[YELLOW]]right-clicking. While in Beserk mode, you deal 50% more\n[[YELLOW]]damage and you can break weak materials instantly, such as\n[[YELLOW]]Dirt and Grass.\n[[DARK_AQUA]]How does Iron Arm work?\n[[YELLOW]]Iron Arm increases the damage dealt when hitting mobs or\n[[YELLOW]]players with your fists.\n[[DARK_AQUA]]How does Arrow Deflect work?\n[[YELLOW]]Arrow Deflect is a passive ability that gives you a chance\n[[YELLOW]]to deflect arrows shot by Skeletons or other players.\n[[YELLOW]]The arrow will fall harmlessly to the ground.\n[[DARK_AQUA]]How does Iron Grip work?\n[[YELLOW]]Iron Grip is a passive ability that counters disarm. As your\n[[YELLOW]]unarmed level increases, the chance of preventing a disarm increases.\n[[DARK_AQUA]]How does Disarm work?\n[[YELLOW]]This passive ability allows players to disarm other players,\n[[YELLOW]]causing the target\'s equipped item to fall to the ground.
|
||||
Guides.Usage=[[RED]] \u0e43\u0e0a\u0e49 /{0} ? [\u0e2b\u0e19\u0e49\u0e32]
|
||||
Guides.Woodcutting=[[DARK_AQUA]]About Woodcutting:\n[[YELLOW]]Woodcutting is all about chopping down trees.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]XP is gained whenever you break log blocks.\n[[DARK_AQUA]]How does Tree Feller work?\n[[YELLOW]]Tree Feller is an active ability, you can right-click\n[[YELLOW]]while holding an ax to activate Tree Feller. This will\n[[YELLOW]]cause the entire tree to break instantly, dropping all\n[[YELLOW]]of its logs at once.\n[[DARK_AQUA]]How does Leaf Blower work?\n[[YELLOW]]Leaf Blower is a passive ability that will cause leaf\n[[YELLOW]]blocks to break instantly when hit with an axe. By default,\n[[YELLOW]]this ability unlocks at level 100.\n[[DARK_AQUA]]How do Double Drops work?\n[[YELLOW]]This passive ability gives you a chance to obtain an extra\n[[YELLOW]]block for every log you chop.
|
||||
Inspect.Offline=[[RED]]\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c\u0e43\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19 Offline!
|
||||
Inspect.OfflineStats=mcMMO \u0e2a\u0e16\u0e34\u0e15\u0e34\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19 Offline [[YELLOW]]{0}
|
||||
Inspect.Stats=[[GREEN]]mcMMO \u0e2a\u0e16\u0e34\u0e15\u0e34\u0e02\u0e2d\u0e07 [[YELLOW]]{0}
|
||||
Inspect.TooFar=[[RED]]\u0e04\u0e38\u0e13\u0e2d\u0e22\u0e39\u0e48\u0e44\u0e01\u0e25\u0e40\u0e01\u0e34\u0e19\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e08\u0e30\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e17\u0e35\u0e48!
|
||||
Item.ChimaeraWing.Fail=**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 CHIMAERA WING \u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27!**
|
||||
Item.ChimaeraWing.Pass=**\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 CHIMAERA WING**
|
||||
Item.Injured.Wait=\u0e04\u0e39\u0e13\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22\u0e15\u0e48\u0e2d\u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e2d. [[YELLOW]]({0} \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35)
|
||||
Skills.Child=[[GOLD]](\u0e17\u0e31\u0e01\u0e29\u0e30 CHILD)
|
||||
Skills.Disarmed=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01!
|
||||
Skills.Header=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
|
||||
Skills.NeedMore=[[DARK_RED]]\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21 [[GRAY]]{0}
|
||||
Skills.Parents=PARENTS
|
||||
Skills.Stats=[[YELLOW]]{0}[[GREEN]]{1}[[DARK_AQUA]] EXP([[GRAY]]{2}[[DARK_AQUA]]/[[GRAY]]{3}[[DARK_AQUA]])
|
||||
Skills.TooTired=[[RED]]\u0e04\u0e38\u0e13\u0e40\u0e2b\u0e19\u0e37\u0e48\u0e2d\u0e22\u0e40\u0e01\u0e34\u0e19\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e19\u0e31\u0e49\u0e19\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07. [[YELLOW]]({0}s)
|
||||
Stats.Header.Combat=[[GOLD]]-=\u0e17\u0e31\u0e01\u0e29\u0e30\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e2a\u0e39\u0e49=-
|
||||
Stats.Header.Gathering=[[GOLD]]-=\u0e17\u0e31\u0e01\u0e29\u0e30 GATHERING=-
|
||||
Stats.Header.Misc=[[GOLD]]-=\u0e17\u0e31\u0e01\u0e29\u0e30 MISC=-
|
||||
Stats.Own.Stats=[[GREEN]][mcMMO] \u0e2a\u0e16\u0e34\u0e15\u0e34
|
||||
Perks.xp.name=\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c
|
||||
Perks.xp.desc=\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a {0}x EXP.
|
||||
Perks.lucky.name=\u0e42\u0e0a\u0e04
|
||||
Perks.lucky.desc=\u0e43\u0e2b\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 {0} \u0e41\u0e25\u0e30\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e21\u0e35\u0e42\u0e2d\u0e01\u0e32\u0e2a 33.3% \u0e14\u0e35\u0e01\u0e27\u0e48\u0e32\u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19
|
||||
Perks.lucky.bonus=[[GOLD]] ({0} \u0e14\u0e49\u0e27\u0e22 Lucky Perk)
|
||||
Perks.cooldowns.name=Fast Recovery
|
||||
Perks.cooldowns.desc=\u0e25\u0e14\u0e23\u0e30\u0e22\u0e30\u0e40\u0e27\u0e25\u0e32\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c {0}.
|
||||
Perks.activationtime.name=\u0e04\u0e27\u0e32\u0e21\u0e2d\u0e14\u0e17\u0e19
|
||||
Perks.activationtime.desc=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e27\u0e25\u0e32\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16 {0} \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35.
|
||||
Perks.activationtime.bonus=[[GOLD]] ({0}\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 \u0e14\u0e49\u0e27\u0e22 Endurance Perk)
|
||||
Hardcore.Player.Loss=[[GOLD]][mcMMO] [[DARK_RED]]\u0e04\u0e38\u0e13\u0e40\u0e2a\u0e35\u0e22\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e17\u0e31\u0e01\u0e29\u0e30 [[BLUE]]{0}[[DARK_RED]] \u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e15\u0e32\u0e22.
|
||||
Vampirism.Killer.Failure=[[GOLD]][mcMMO] [[YELLOW]]{0}[[GRAY]] \u0e40\u0e1b\u0e47\u0e19\u0e17\u0e31\u0e01\u0e29\u0e30\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e0a\u0e33\u0e19\u0e32\u0e0d.
|
||||
Vampirism.Killer.Success=[[GOLD]][mcMMO] [[DARK_AQUA]]\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e02\u0e42\u0e21\u0e22 [[BLUE]]{0}[[DARK_AQUA]] \u0e23\u0e30\u0e14\u0e31\u0e1a\u0e08\u0e32\u0e01 [[YELLOW]]{1}.
|
||||
Vampirism.Victim.Failure=[[GOLD]][mcMMO] [[YELLOW]]{0}[[GRAY]] \u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e35\u0e48\u0e08\u0e30\u0e02\u0e42\u0e21\u0e22\u0e04\u0e27\u0e32\u0e21\u0e23\u0e39\u0e49\u0e08\u0e32\u0e01\u0e04\u0e38\u0e13!
|
||||
Vampirism.Victim.Success=[[GOLD]][mcMMO] [[YELLOW]]{0}[[DARK_RED]] \u0e44\u0e14\u0e49\u0e16\u0e39\u0e01\u0e02\u0e42\u0e21\u0e22 [[BLUE]]{1}[[DARK_RED]] \u0e23\u0e30\u0e14\u0e31\u0e1a\u0e08\u0e32\u0e01\u0e04\u0e38\u0e13!
|
||||
Hardcore.Disabled=[[GOLD]][mcMMO] Hardcore mode \u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14.
|
||||
Hardcore.Enabled=[[GOLD]][mcMMO] Hardcore mode \u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14.
|
||||
Hardcore.PercentageChanged=[[GOLD]][mcMMO] \u0e23\u0e49\u0e2d\u0e22\u0e25\u0e30\u0e01\u0e32\u0e23\u0e2a\u0e39\u0e0d\u0e40\u0e2a\u0e35\u0e22 stat \u0e01\u0e47\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e44\u0e1b {0}.
|
||||
Vampirism.Disabled=[[GOLD]][mcMMO] Vampirism mode \u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14.
|
||||
Vampirism.Enabled=[[GOLD]][mcMMO] Vampirism mode \u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14.
|
||||
Vampirism.PercentageChanged=[[GOLD]][mcMMO] \u0e23\u0e49\u0e2d\u0e22\u0e25\u0e30 stat \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e44\u0e1b {0}.
|
||||
Spout.Donate=[[YELLOW]][mcMMO] \u0e1a\u0e23\u0e34\u0e08\u0e32\u0e04!
|
||||
Spout.LevelUp.1=[[GREEN]]\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19!
|
||||
Spout.LevelUp.2=[[YELLOW]]{0}[[DARK_AQUA]] ([[GREEN]]{1}[[DARK_AQUA]])
|
||||
Spout.Menu.Exit=[[GRAY]]\u0e01\u0e23\u0e38\u0e13\u0e32\u0e01\u0e14 ESCAPE \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2d\u0e2d\u0e01!
|
||||
Spout.Menu.ExitButton=EXIT
|
||||
Spout.Menu.HudButton.1=HUD \u0e0a\u0e19\u0e34\u0e14: {0}
|
||||
Spout.Menu.HudButton.2=\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13!
|
||||
Spout.Menu.Title=[[GOLD]]~mcMMO Menu~
|
||||
Spout.Title={0}\n[[YELLOW]]P[[GOLD]]lvl[[WHITE]].[[GREEN]]{1}
|
||||
MOTD.Donate=[[DARK_AQUA]]\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 Donation:
|
||||
MOTD.Hardcore.VampireOff=[[GOLD]][mcMMO] [[DARK_RED]]Hardcore & Vampirism \u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14.
|
||||
MOTD.Hardcore.Stats=[[GOLD]][mcMMO] [[DARK_AQUA]]\u0e17\u0e31\u0e01\u0e29\u0e30 Death Penalty: [[DARK_RED]]{0}%
|
||||
MOTD.Hardcore.VampireOn=[[GOLD]][mcMMO] [[DARK_RED]]Hardcore \u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14.
|
||||
MOTD.PerksPrefix=[[RED]][mcMMO Perks]
|
||||
MOTD.Vampire.Stats=[[GOLD]][mcMMO] [[DARK_AQUA]]\u0e16\u0e39\u0e01\u0e02\u0e42\u0e21\u0e22\u0e2a\u0e16\u0e34\u0e15\u0e34: [[DARK_RED]]{0}%
|
||||
MOTD.Version=[[GOLD]][mcMMO] \u0e43\u0e0a\u0e49 version [[DARK_AQUA]]{0}
|
||||
MOTD.Website=[[GOLD]][mcMMO] [[GREEN]]{0}[[YELLOW]] - mcMMO Website
|
||||
Smelting.Ability.FluxMining=[[RED]]Flux Mining \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Smelting.Ability.FuelEfficiency=[[RED]]Fuel Efficiency \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19: [[YELLOW]]{0}x
|
||||
Smelting.Ability.Locked.0=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (VANILLA XP BOOST)
|
||||
Smelting.Ability.Locked.1=\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e14\u0e31\u0e1a {0}+ (FLUX MINING)
|
||||
Smelting.Ability.SecondSmelt=[[RED]]Second Smelt \u0e42\u0e2d\u0e01\u0e32\u0e2a: [[YELLOW]]{0}
|
||||
Smelting.Ability.VanillaXPBoost=[[RED]]Vanilla EXP \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19: [[YELLOW]]{0}x
|
||||
Smelting.Effect.0=Fuel Efficiency
|
||||
Smelting.Effect.1=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e27\u0e25\u0e32\u0e01\u0e32\u0e23\u0e40\u0e1c\u0e32\u0e44\u0e2b\u0e21\u0e49\u0e02\u0e2d\u0e07\u0e40\u0e0a\u0e37\u0e49\u0e2d\u0e40\u0e1e\u0e25\u0e34\u0e07\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e40\u0e15\u0e32\u0e2b\u0e25\u0e2d\u0e21\u0e16\u0e25\u0e38\u0e07
|
||||
Smelting.Effect.2=Second Smelt
|
||||
Smelting.Effect.3=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e17\u0e23\u0e31\u0e1e\u0e22\u0e32\u0e01\u0e23\u0e17\u0e35\u0e48\u0e44\u0e14\u0e49\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e16\u0e25\u0e38\u0e07
|
||||
Smelting.Effect.4=Vanilla EXP \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19
|
||||
Smelting.Effect.5=\u0e40\u0e1e\u0e34\u0e48\u0e21 Vanilla EXP \u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e43\u0e19\u0e02\u0e13\u0e30\u0e17\u0e35\u0e48\u0e16\u0e25\u0e38\u0e07
|
||||
Smelting.Effect.6=Flux Mining
|
||||
Smelting.Effect.7=\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e41\u0e23\u0e48\u0e17\u0e35\u0e48\u0e08\u0e30\u0e16\u0e25\u0e38\u0e07\u0e17\u0e31\u0e19\u0e17\u0e35\u0e43\u0e19\u0e02\u0e13\u0e30\u0e17\u0e35\u0e48\u0e01\u0e32\u0e23\u0e17\u0e33\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e07\u0e41\u0e23\u0e48
|
||||
Smelting.FluxMining.Success=[[GREEN]]\u0e41\u0e23\u0e48\u0e16\u0e39\u0e01\u0e16\u0e25\u0e38\u0e07!
|
||||
Smelting.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Smelting:
|
||||
Smelting.SkillName=SMELTING
|
||||
Commands.Description.addlevels=\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49 mcMMO
|
||||
Commands.Description.adminchat=\u0e2a\u0e25\u0e31\u0e1a mcMMO \u0e1c\u0e39\u0e49\u0e14\u0e39\u0e41\u0e25\u0e23\u0e30\u0e1a\u0e1a\u0e41\u0e0a\u0e17\u0e1a\u0e19 on/off \u0e2b\u0e23\u0e37\u0e2d\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e19\u0e17\u0e19\u0e32\u0e1c\u0e39\u0e49\u0e14\u0e39\u0e41\u0e25\u0e23\u0e30\u0e1a\u0e1a
|
||||
Commands.Description.addxp=\u0e40\u0e1e\u0e34\u0e48\u0e21 mcMMO EXP \u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49
|
||||
Commands.Description.hardcore=\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e49\u0e2d\u0e22\u0e25\u0e30 Hardcore mcMMO \u0e2b\u0e23\u0e37\u0e2d\u0e42\u0e2b\u0e21\u0e14 Hardcore \u0e2a\u0e25\u0e31\u0e1a on/off
|
||||
Commands.Description.inspect=\u0e14\u0e39\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a mcMMO \u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e04\u0e19\u0e2d\u0e37\u0e48\u0e19
|
||||
Commands.Description.mcability=\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e25\u0e31\u0e1a mcMMO \u0e01\u0e32\u0e23\u0e40\u0e15\u0e23\u0e35\u0e22\u0e21\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e04\u0e25\u0e34\u0e01\u0e02\u0e27\u0e32 on/off
|
||||
Commands.Description.mcgod=\u0e2a\u0e25\u0e31\u0e1a mcMMO GodMode on/off
|
||||
Commands.Description.mchud=\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e2a\u0e44\u0e15\u0e25\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 mcMMO HUD
|
||||
Commands.Description.mcmmo=\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e2a\u0e31\u0e49\u0e19\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a mcMMO
|
||||
Commands.Description.mcnotify=\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e25\u0e31\u0e1a mcMMO \u0e2a\u0e19\u0e17\u0e19\u0e32\u0e01\u0e32\u0e23\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e01\u0e32\u0e23\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25 on/off
|
||||
Commands.Description.mcpurge=\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e30\u0e2d\u0e32\u0e14\u0e23\u0e30\u0e14\u0e31\u0e1a mcMMO \u0e41\u0e25\u0e30\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e35\u0e48\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e43\u0e19\u0e0a\u0e48\u0e27\u0e07\u0e2b\u0e25\u0e32\u0e22\u0e40\u0e14\u0e37\u0e2d\u0e19\u0e17\u0e35\u0e48 {0} \u0e08\u0e32\u0e01\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 mcMMO
|
||||
Commands.Description.mcrank=\u0e41\u0e2a\u0e14\u0e07\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e2d\u0e31\u0e19\u0e14\u0e31\u0e1a mcMMO \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19
|
||||
Commands.Description.mcrefresh=\u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a mcMMO
|
||||
Commands.Description.mcremove=\u0e25\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e08\u0e32\u0e01\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 mcMMO
|
||||
Commands.Description.mcstats=\u0e41\u0e2a\u0e14\u0e07\u0e23\u0e30\u0e14\u0e31\u0e1a mcMMO \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e41\u0e25\u0e30 EXP
|
||||
Commands.Description.mctop=\u0e41\u0e2a\u0e14\u0e07\u0e01\u0e23\u0e30\u0e14\u0e32\u0e19\u0e1c\u0e39\u0e49\u0e19\u0e33 mcMMO
|
||||
Commands.Description.mmoedit=\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e30\u0e14\u0e31\u0e1a mcMMO \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49
|
||||
Commands.Description.mmoupdate=\u0e01\u0e32\u0e23\u0e41\u0e1b\u0e25\u0e07\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e08\u0e32\u0e01 mcMMO Flatfile \u0e44\u0e1b\u0e22\u0e31\u0e07 MySQL
|
||||
Commands.Description.party=\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e15\u0e48\u0e32\u0e07\u0e46 Party
|
||||
Commands.Description.partychat=\u0e2a\u0e25\u0e31\u0e1a mcMMO Party \u0e01\u0e32\u0e23\u0e41\u0e0a\u0e17\u0e2b\u0e23\u0e37\u0e2d\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e19\u0e17\u0e19\u0e32\u0e02\u0e2d\u0e07\u0e1a\u0e38\u0e04\u0e04\u0e25
|
||||
Commands.Description.ptp=Teleport \u0e44\u0e1b\u0e2b\u0e32\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01 Party
|
||||
Commands.Description.Skill=\u0e41\u0e2a\u0e14\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e17\u0e31\u0e01\u0e29\u0e30 mcMMO {0}
|
||||
Commands.Description.skillreset=\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e23\u0e30\u0e14\u0e31\u0e1a mcMMO \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49
|
||||
Commands.Description.vampirism=\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e49\u0e2d\u0e22\u0e25\u0e30 vampirism mcMMO \u0e2b\u0e23\u0e37\u0e2d\u0e42\u0e2b\u0e21\u0e14\u0e2a\u0e25\u0e31\u0e1a vampirism on/off
|
||||
Commands.Description.xplock=\u0e25\u0e47\u0e2d\u0e04 mcMMO \u0e1a\u0e32\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 EXP \u0e17\u0e31\u0e01\u0e29\u0e30 mcMMO \u0e40\u0e09\u0e1e\u0e32\u0e30
|
||||
Commands.Description.xprate=\u0e41\u0e01\u0e49\u0e44\u0e02\u0e2d\u0e31\u0e15\u0e23\u0e32 mcMMO EXP \u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e40\u0e2b\u0e15\u0e38\u0e01\u0e32\u0e23\u0e13\u0e4c mcMMO EXP
|
||||
UpdateChecker.outdated=You are using an outdated version of mcMMO!
|
||||
UpdateChecker.newavailable=There is a new version available on BukkitDev.
|
||||
Salvage.Listener=\u0e17\u0e31\u0e01\u0e29\u0e30 Salvage:
|
||||
Salvage.SkillName=SALVAGE
|
||||
@@ -1,5 +1,5 @@
|
||||
Acrobatics.Ability.Proc=[[GREEN]]**\u5b8c\u7f8e\u8457\u9678**
|
||||
Acrobatics.Combat.Proc=[[GREEN]\u9583\u907f
|
||||
Acrobatics.Combat.Proc=[[GREEN]]**\u9583\u907f**
|
||||
Acrobatics.DodgeChance=[[RED]]\u8ff4\u907f\u6a5f\u7387: [[YELLOW]]{0}
|
||||
Acrobatics.Effect.0=\u7ffb\u6efe
|
||||
Acrobatics.Effect.1=\u6e1b\u5c11\u6216\u53d6\u6d88\u6389\u843d\u50b7\u5bb3
|
||||
@@ -124,7 +124,7 @@ Mining.Ability.Locked.0=\u9396\u5b9a \u76f4\u5230 {0}+ \u6280\u80fd (\u6316\u792
|
||||
Mining.Ability.Locked.1=\u9396\u5b9a \u76f4\u5230 {0}+ \u6280\u80fd (\u66f4\u5927\u7684\u70b8\u5f48)
|
||||
Mining.Ability.Locked.2=\u9396\u5b9a \u76f4\u5230 {0}+ \u6280\u80fd (\u7206\u7834\u5c08\u5bb6)
|
||||
Mining.Ability.Lower=[[GRAY]]**\u4f60\u653e\u4e0b\u4e86\u4f60\u7684\u7a3f\u5b50**
|
||||
Mining.Ability.Ready=[GREEN]**\u4f60\u63e1\u7dca\u4e86\u4f60\u7684\u93ac\u5b50**\\\n\\\n
|
||||
Mining.Ability.Ready=[[GREEN]]**\u4f60\u63e1\u7dca\u4e86\u4f60\u7684\u7a3f\u5b50**
|
||||
Mining.Effect.0=\u8d85\u7d1a\u5de5\u4eba (\u4e3b\u52d5\u6280\u80fd)
|
||||
Mining.Effect.1=\u901f\u5ea6+, 3\u500d\u6389\u843d\u7387
|
||||
Mining.Effect.2=\u96d9\u500d\u6389\u843d
|
||||
@@ -224,6 +224,7 @@ Swords.SS.Length=[[RED]]\u6c23\u7d55\u528d\u6301\u7e8c\u6642\u9593: [[YELLOW]]{0
|
||||
Taming.Ability.Bonus.0=\u8fc5\u9748\u654f\u6377
|
||||
Taming.Ability.Bonus.1=\u72fc\u6703\u907f\u958b\u5371\u96aa
|
||||
Taming.Ability.Bonus.2=\u539a\u5be6\u7684\u76ae\u6bdb
|
||||
Taming.Ability.Bonus.3=1/{0} \u50b7\u5bb3/\u706b\u7130\u50b7\u5bb3
|
||||
Taming.Ability.Bonus.4=\u885d\u64ca\u683c\u64cb
|
||||
Taming.Ability.Bonus.6=\u5229\u722a
|
||||
Taming.Ability.Bonus.7=+{0} \u50b7\u5bb3
|
||||
@@ -395,6 +396,7 @@ Commands.ptp.Disabled=\u968a\u4f0d\u50b3\u9001 [[RED]]\u4e0d\u5141\u8a31
|
||||
Commands.ptp.NoRequests=[[RED]]\u4f60\u73fe\u5728\u4e0d\u53ef\u4ee5\u50b3\u9001
|
||||
Commands.ptp.NoWorldPermissions=[[RED]] [mcMMO]\u60a8\u6c92\u6709\u6b0a\u9650\u50b3\u9001\u5230\u6b64\u4e16\u754c{0}\u3002
|
||||
Commands.ptp.Request1=[[YELLOW]]{0} [[GREEN]]\u5df2\u50b3\u9001\u81f3\u4f60\u65c1\u908a.
|
||||
Commands.ptp.Request2=[[GREEN]]\u4f60\u50b3\u9001\u7684\u8a71\u8acb\u8f38\u5165[[YELLOW]]/ptp accept. [[GREEN]]\u5728[[RED]]{0} [[GREEN]]\u79d2\u5167\u5fc5\u9808\u5b8c\u6210
|
||||
Commands.ptp.RequestExpired=[[RED]]\u968a\u4f0d\u50b3\u9001\u5df2\u6210\u529f!
|
||||
Commands.PowerLevel.Leaderboard=[[YELLOW]]--mcMMO[[BLUE]] \u80fd\u529b\u7b49\u7d1a [[YELLOW]]\u6392\u884c\u699c--
|
||||
Commands.PowerLevel.Capped=[[DARK_RED]]\u80fd\u529b\u7b49\u7d1a: [[GREEN]]{0} [[DARK_RED]]\u6700\u9ad8\u7b49\u7d1a: [[YELLOW]]{1}
|
||||
@@ -426,6 +428,7 @@ mcMMO.NoSkillNote=[[DARK_GRAY]]\u5982\u679c\u4f60\u7121\u6cd5\u4f7f\u7528\u90a3\
|
||||
Party.Forbidden=[mcMMO] \u968a\u4f0d\u529f\u80fd\u4e0d\u5141\u8a31\u5728\u9019\u4e16\u754c\u958b\u555f (\u8acb\u89c0\u770b\u6b0a\u9650\u8a2d\u5b9a)
|
||||
Party.Help.0=[RED]]\u6b63\u78ba\u4f7f\u7528[DARK_AQUA] {0} <player> [\u5bc6\u78bc]\u3002
|
||||
Party.Help.1=[RED]]\u8981\u5275\u5efa\u4e00\u500b\u968a\u4f0d\uff0c\u8acb\u4f7f\u7528[DARK_AQUA] {0} <\u540d\u7a31> [\u5bc6\u78bc]\u3002
|
||||
Party.Help.3=[[RED]]\u4f7f\u7528 [[DARK_AQUA]]{0} <player> [password] [[RED]]\u4f86\u52a0\u5165\u6216\u4f7f\u7528 [[DARK_AQUA]]{1} [[RED]]\u4f86\u96e2\u958b
|
||||
Party.Help.4=[RED]]\u8981\u9396\u5b9a\u6216\u89e3\u9396\u4f60\u7684\u968a\u4f0d\uff0c\u4f7f\u7528[DARK_AQUA]] {0}
|
||||
Party.Help.5=[[RED]]\u4f7f\u7528\u5bc6\u78bc\u4fdd\u8b77\u4f60\u7684\u968a\u4f0d\uff0c\u8acb\u4f7f\u7528[DARK_AQUA] {0}<\u5bc6\u78bc>
|
||||
Party.Help.6=[[RED]]\u8981\u8e22\u7684\u7403\u54e1\u5f9e\u968a\u4f0d\u4e2d\uff0c\u4f7f\u7528[DARK_AQUA] {0} <player>
|
||||
@@ -493,8 +496,12 @@ Commands.xprate.started.0=[[GOLD]] mcMMO \u7d93\u9a57\u52a0\u500d\u6642\u6bb5\u9
|
||||
Commands.xprate.started.1=[[GOLD]]mcMMO \u7d93\u9a57\u503c\u73fe\u5728\u52a0\u500d {0}x!
|
||||
XPRate.Event=[[GOLD]]mcMMO\u73fe\u6b63\u8655\u65bc\u7d93\u9a57\u503c\u52a0\u500d\u968e\u6bb5!\u7d93\u9a57\u503c\u500d\u6578\u70ba{0}\u500d!
|
||||
Effects.Effects=\u6548\u679c
|
||||
Effects.Child=[[DARK_GRAY]]\u7b49\u7d1a: [[GREEN]]{0}
|
||||
Effects.Level=[[DARK_GRAY]]\u7b49\u7d1a: [[GREEN]]{0} [[DARK_AQUA]]\u7d93\u9a57\u503c[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Effects.Parent=[[GOLD]]{0} -
|
||||
Effects.Template=[[DARK_AQUA]]{0}: [[GREEN]]{1}
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it\'s\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Header=[[GOLD]]-=[[GREEN]]{0} \u6307\u5357[[GOLD]]=-
|
||||
Guides.Page.Invalid=\u4e0d\u5b58\u5728\u7684\u9801\u6578
|
||||
Guides.Page.OutOfRange=\u9019\u9801\u78bc\u4e0d\u5b58\u5728,\u7e3d\u5171\u53ea\u6709{0} \u9801.
|
||||
Guides.Smelting=\u4e0b\u6b21\u9084\u6709...
|
||||
@@ -506,9 +513,11 @@ Inspect.TooFar=[[RED]]\u56e0\u8ddd\u96e2\u592a\u9060\u7121\u6cd5\u67e5\u770b\u90
|
||||
Item.ChimaeraWing.Fail=**\u5947\u7f8e\u62c9\u4e4b\u7ffc\u4f7f\u7528\u5931\u6557\u4e86!**
|
||||
Item.ChimaeraWing.Pass=**\u5947\u7f8e\u62c9\u4e4b\u7ffc**
|
||||
Item.Injured.Wait=\u4f60\u904e\u5ea6\u75b2\u52de\u5fc5\u9808\u7b49\u5f85\u4e00\u6bb5\u6642\u9593\u5f8c\u624d\u53ef\u4f7f\u7528. [[YELLOW]]({0}s)
|
||||
Skills.Child=[[GOLD]](\u5c0f\u5b69\u6280\u80fd)
|
||||
Skills.Disarmed=[[DARK_RED]]\u4f60\u7684\u6b66\u5668\u88ab\u63a0\u596a\u4e86!
|
||||
Skills.Header=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
|
||||
Skills.NeedMore=[[DARK_RED]]\u4f60\u9700\u8981\u66f4\u591a[[GRAY]]{0}
|
||||
Skills.Parents=\u7236\u6bcd
|
||||
Skills.Stats=[[YELLOW]]{0}[[GREEN]]{1}[[DARK_AQUA]] XP([[GRAY]]{2}[[DARK_AQUA]]/[[GRAY]]{3}[[DARK_AQUA]])
|
||||
Skills.TooTired=[[RED]]\u6b64\u6280\u80fd\u6b63\u8655\u65bc\u51b7\u537b\u6642\u9593. [[YELLOW]]({0}s)
|
||||
Stats.Header.Combat=[[GOLD]]-=\u683c\u9b25\u6280\u80fd=-
|
||||
@@ -542,15 +551,23 @@ MOTD.Version=[[GOLD]][mcMMO] \u6b63\u904b\u4f5c\u7684\u7248\u672c [[DARK_AQUA]]{
|
||||
MOTD.Website=[[GOLD]][mcMMO] [[GREEN]]{0}[[YELLOW]] - mcMMO \u9996\u9801
|
||||
Smelting.Ability.Locked.0=\u9396\u5b9a\u72c0\u614b\uff0c\u76f4\u5230{0} +\u6280\u80fd\uff08VANILLA XP BOOST\uff09
|
||||
Smelting.Ability.Locked.1=\u9396\u5b9a\u72c0\u614b\uff0c\u76f4\u5230{0} +\u6280\u80fd\uff08FLUX\u7926\u696d\uff09
|
||||
Smelting.Effect.6=Flux \u6316\u7926
|
||||
Commands.Description.addlevels=\u7d66\u4e88\u73a9\u5bb6McMMO\u7b49\u7d1a
|
||||
Commands.Description.adminchat=<FONT> <font class=\"\">\u5207\u63dbmcMMO\u7ba1\u7406\u804a\u5929\u958b/\u95dc\u6216\u767c\u9001\u7d66\u7ba1\u7406\u54e1\u7684\u804a\u5929\u6d88\u606f</ FONT> </ FONT>
|
||||
Commands.Description.addxp=\u7d66\u4e88\u73a9\u5bb6McMMO\u7d93\u9a57\u503c
|
||||
Commands.Description.mcgod=\u5207\u63db\u795e\u4e4b\u6a21\u5f0f on/off
|
||||
Commands.Description.mchud=\u66f4\u63db\u4f60\u7684McMMO HUD\u985e\u578b!
|
||||
Commands.Description.mcmmo=\u986f\u793a\u4e00\u500bmcMMO\u7684\u7c21\u55ae\u63cf\u8ff0
|
||||
Commands.Description.mcnotify=\u5207\u63dbmcMMO\u7684\u804a\u5929\u986f\u793a\u901a\u77e5 \u958b/\u95dc
|
||||
Commands.Description.mcrank=\u986f\u793a\u6240\u6709mcMMO\u7684\u6392\u540d
|
||||
Commands.Description.mcrefresh=\u5237\u65b0\u6240\u6709McMMO\u6280\u80fd\u51b7\u537b\u6642\u9593
|
||||
Commands.Description.mcremove=<font><font class=\"\">\u5f9emcMMO\u6578\u64da\u5eab\u4e2d\u522a\u9664\u7528\u6236</font></font>
|
||||
Commands.Description.mctop=<font><font>\u986f\u793amcMMO\u6392\u884c\u699c</font></font>
|
||||
Commands.Description.mmoedit=\u65b0\u589e\u73a9\u5bb6McMMO\u7b49\u7d1a
|
||||
Commands.Description.party=<FONT> <FONT>\u63a7\u5236\u5404\u7a2emcMMO\u968a\u4f0d\u7684\u8a2d\u7f6e</ FONT> </ FONT>
|
||||
Commands.Description.partychat=\u5207\u63dbmcMMO\u958b/\u95dc\u968a\u4f0d\u7684\u804a\u5929\u6216\u767c\u9001\u65b9\u7684\u804a\u5929\u4fe1\u606f
|
||||
Commands.Description.ptp=\u50b3\u9001\u5230\u4e00\u500bmcMMO\u968a\u4f0d\u6210\u54e1\u65c1
|
||||
Commands.Description.Skill=\u986f\u793a\u7684\u8a73\u7d30mcMMO\u6280\u80fd\u4fe1\u606f{0}
|
||||
Commands.Description.skillreset=\u91cd\u7f6e\u73a9\u5bb6McMMO\u7b49\u7d1a
|
||||
UpdateChecker.outdated=\u60a8\u4f7f\u7528\u7684\u662f\u904e\u6642\u7684\u7248\u672cmcMMO\uff01
|
||||
UpdateChecker.newavailable=\u6709\u65b0\u7684\u7248\u672cBukkitDev\u3002
|
||||
|
||||
@@ -104,6 +104,9 @@ commands:
|
||||
mcnotify:
|
||||
aliases: [notify]
|
||||
description: Toggle mcMMO abilities chat display notifications on/off
|
||||
mobhealth:
|
||||
aliases: [mcmobhealth]
|
||||
description: Change the style of the mob healthbar
|
||||
permissions:
|
||||
mcmmo.*:
|
||||
default: false
|
||||
@@ -251,6 +254,7 @@ permissions:
|
||||
children:
|
||||
mcmmo.ability.fishing.fishermansdiet: true
|
||||
mcmmo.ability.fishing.magic: true
|
||||
mcmmo.ability.fishing.masterangler: true
|
||||
mcmmo.ability.fishing.shakemob: true
|
||||
mcmmo.ability.fishing.treasures: true
|
||||
mcmmo.ability.fishing.vanillaxpboost: true
|
||||
@@ -258,6 +262,8 @@ permissions:
|
||||
description: Allows access to the Fishermans's Diet ability
|
||||
mcmmo.ability.fishing.magic:
|
||||
description: Allows enchanted drops from Fishing
|
||||
mcmmo.ability.fishing.masterangler:
|
||||
description: Allows access to the Master Angler ability
|
||||
mcmmo.ability.fishing.shakemob:
|
||||
description: Allows access to the Shake Mob ability
|
||||
mcmmo.ability.fishing.treasures:
|
||||
@@ -659,6 +665,7 @@ permissions:
|
||||
mcmmo.commands.mcstats: true
|
||||
mcmmo.commands.mctop.all: true
|
||||
mcmmo.commands.mining: true
|
||||
mcmmo.commands.mobhealth: true
|
||||
mcmmo.commands.party.all: true
|
||||
mcmmo.commands.ptp: true
|
||||
mcmmo.commands.ptp.accept: true
|
||||
@@ -875,6 +882,9 @@ permissions:
|
||||
mcmmo.commands.mmoupdate:
|
||||
default: false
|
||||
description: Allows access to the mmoupdate command
|
||||
mcmmo.commands.mobhealth:
|
||||
default: true
|
||||
description: Allows access to the mobhealth command
|
||||
mcmmo.commands.party.*:
|
||||
default: false
|
||||
description: Implies access to all mcmmo.commands.party permissions.
|
||||
@@ -954,12 +964,15 @@ permissions:
|
||||
description: Implies access to all mcmmo.commands.ptp permissions.
|
||||
children:
|
||||
mcmmo.commands.ptp: true
|
||||
mcmmo.commands.ptp.send: true
|
||||
mcmmo.commands.ptp.accept: true
|
||||
mcmmo.commands.ptp.acceptall: true
|
||||
mcmmo.commands.ptp.toggle: true
|
||||
mcmmo.commands.ptp.world.all: true
|
||||
mcmmo.commands.ptp:
|
||||
description: Allows access to the ptp command
|
||||
mcmmo.commands.ptp.send:
|
||||
description: Allows access to the ptp <player> command
|
||||
mcmmo.commands.ptp.accept:
|
||||
description: Allows access to the ptp accept command
|
||||
mcmmo.commands.ptp.acceptall:
|
||||
@@ -1176,6 +1189,7 @@ permissions:
|
||||
children:
|
||||
mcmmo.chat.partychat: true
|
||||
mcmmo.commands.defaults: true
|
||||
mcmmo.mobhealthdisplay: true
|
||||
mcmmo.motd: true
|
||||
mcmmo.skills.all: true
|
||||
mcmmo.defaultsop:
|
||||
@@ -1197,6 +1211,8 @@ permissions:
|
||||
mcmmo.item.chimaerawing: true
|
||||
mcmmo.item.chimaerawing:
|
||||
description: Allows use of Chimaera Wing item
|
||||
mcmmo.mobhealthdisplay:
|
||||
description: Allows viewing of mob health display during combat
|
||||
mcmmo.motd:
|
||||
description: Allows access to the motd
|
||||
mcmmo.party.*:
|
||||
|
||||
@@ -100,6 +100,62 @@ Hylian_Luck:
|
||||
- Diamond_Gem
|
||||
- Gold_Nuggets
|
||||
#
|
||||
# Settings for Shake
|
||||
###
|
||||
Shake:
|
||||
Treasure:
|
||||
- Blaze_Blaze_Rod
|
||||
- Cave_Spider_Cobweb
|
||||
- Cave_Spider_Potion
|
||||
- Cave_Spider_Spider_Eye
|
||||
- Cave_Spider_String
|
||||
- Spider_Spider_Eye
|
||||
- Spider_String
|
||||
- Chicken_Feather
|
||||
- Chicken_Raw_Chicken
|
||||
- Chicken_Egg
|
||||
- Cow_Milk_Bucket
|
||||
- Cow_Leather
|
||||
- Cow_Raw_Beef
|
||||
- Creeper_Skull
|
||||
- Creeper_Sulphur
|
||||
- Enderman_Ender_Pearl
|
||||
- Ghast_Sulphur
|
||||
- Ghast_Ghast_Tear
|
||||
- Iron_Golem_Pumpkin
|
||||
- Iron_Golem_Iron_Ingot
|
||||
- Iron_Golem_Red_Rose
|
||||
- Magma_Cube_Magma_Cream
|
||||
- Mushroom_Cow_Milk_Bucket
|
||||
- Mushroom_Cow_Mushroom_Soup
|
||||
- Mushroom_Cow_Leather
|
||||
- Mushroom_Cow_Raw_Beef
|
||||
- Mushroom_Cow_Red_Mushroom
|
||||
- Pig_Pork
|
||||
- Pig_Zombie_Rotten_Flesh
|
||||
- Pig_Zombie_Gold_Nugget
|
||||
- Sheep_Wool
|
||||
- Skeleton_Skull
|
||||
- Skeleton_Bone
|
||||
- Skeleton_Arrow
|
||||
- Slime_Slime_Ball
|
||||
- Snowman_Pumpkin
|
||||
- Snowman_Snowball
|
||||
- Squid_Ink_Sack
|
||||
- Witch_Heal_Potion
|
||||
- Witch_Fire_Potion
|
||||
- Witch_Speed_Potion
|
||||
- Witch_Glass_Bottle
|
||||
- Witch_Glowstone_Dust
|
||||
- Witch_Sulphur
|
||||
- Witch_Redstone
|
||||
- Witch_Spider_Eye
|
||||
- Witch_Stick
|
||||
- Witch_Sugar
|
||||
- Witch_Potion
|
||||
- Zombie_Skull
|
||||
- Zombie_Rotten_Flesh
|
||||
#
|
||||
# Configuration to define Treasures
|
||||
###
|
||||
Treasures:
|
||||
@@ -968,4 +1024,518 @@ Treasures:
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Pots: true
|
||||
Pots: true
|
||||
Blaze_Blaze_Rod:
|
||||
ID: 369
|
||||
Mob: BLAZE
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Cave_Spider_Spider_Eye:
|
||||
ID: 375
|
||||
Mob: CAVE_SPIDER
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Cave_Spider_String:
|
||||
ID: 287
|
||||
Mob: CAVE_SPIDER
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Cave_Spider_Cobweb:
|
||||
ID: 30
|
||||
Mob: CAVE_SPIDER
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Cave_Spider_Potion:
|
||||
ID: 373
|
||||
Mob: CAVE_SPIDER
|
||||
Potion_Type: POISON
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Spider_Spider_Eye:
|
||||
ID: 375
|
||||
Mob: SPIDER
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Spider_String:
|
||||
ID: 287
|
||||
Mob: SPIDER
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Chicken_Feather:
|
||||
ID: 288
|
||||
Mob: CHICKEN
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Chicken_Raw_Chicken:
|
||||
ID: 365
|
||||
Mob: CHICKEN
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Chicken_Egg:
|
||||
ID: 344
|
||||
Mob: CHICKEN
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Cow_Milk_Bucket:
|
||||
ID: 335
|
||||
Mob: COW
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Cow_Leather:
|
||||
ID: 334
|
||||
Mob: COW
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Cow_Raw_Beef:
|
||||
ID: 363
|
||||
Mob: COW
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Creeper_Skull:
|
||||
ID: 397
|
||||
Mob: CREEPER
|
||||
Data: 4
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Creeper_Sulphur:
|
||||
ID: 289
|
||||
Mob: CREEPER
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 99.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Enderman_Ender_Pearl:
|
||||
ID: 368
|
||||
Mob: ENDERMAN
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Ghast_Sulphur:
|
||||
ID: 289
|
||||
Mob: GHAST
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Ghast_Ghast_Tear:
|
||||
ID: 370
|
||||
Mob: GHAST
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Iron_Golem_Pumpkin:
|
||||
ID: 86
|
||||
Mob: IRON_GOLEM
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 3.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Iron_Golem_Iron_Ingot:
|
||||
ID: 265
|
||||
Mob: IRON_GOLEM
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 12.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Iron_Golem_Red_Rose:
|
||||
ID: 38
|
||||
Mob: IRON_GOLEM
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 85.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Magma_Cube_Magma_Cream:
|
||||
ID: 378
|
||||
Mob: MAGMA_CUBE
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Mushroom_Cow_Milk_Bucket:
|
||||
ID: 335
|
||||
Mob: MUSHROOM_COW
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 5.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Mushroom_Cow_Mushroom_Soup:
|
||||
ID: 282
|
||||
Mob: MUSHROOM_COW
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 5.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Mushroom_Cow_Leather:
|
||||
ID: 334
|
||||
Mob: MUSHROOM_COW
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Mushroom_Cow_Raw_Beef:
|
||||
ID: 363
|
||||
Mob: MUSHROOM_COW
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Mushroom_Cow_Red_Mushroom:
|
||||
ID: 40
|
||||
Mob: MUSHROOM_COW
|
||||
Data: 0
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Pig_Pork:
|
||||
ID: 319
|
||||
Mob: PIG
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Pig_Zombie_Rotten_Flesh:
|
||||
ID: 367
|
||||
Mob: PIG_ZOMBIE
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Pig_Zombie_Gold_Nugget:
|
||||
ID: 371
|
||||
Mob: PIG_ZOMBIE
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Sheep_Wool:
|
||||
ID: 35
|
||||
Mob: SHEEP
|
||||
Data: 0
|
||||
Amount: 3
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Skeleton_Skull:
|
||||
ID: 397
|
||||
Mob: SKELETON
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Skeleton_Bone:
|
||||
ID: 352
|
||||
Mob: SKELETON
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Skeleton_Arrow:
|
||||
ID: 262
|
||||
Mob: SKELETON
|
||||
Data: 0
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Slime_Slime_Ball:
|
||||
ID: 341
|
||||
Mob: SLIME
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Snowman_Pumpkin:
|
||||
ID: 86
|
||||
Mob: SNOWMAN
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 3.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Snowman_Snowball:
|
||||
ID: 341
|
||||
Mob: SNOWMAN
|
||||
Data: 0
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 97.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Squid_Ink_Sack:
|
||||
ID: 351
|
||||
Mob: SQUID
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Heal_Potion:
|
||||
ID: 373
|
||||
Mob: WITCH
|
||||
Potion_Type: INSTANT_HEAL
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Fire_Potion:
|
||||
ID: 373
|
||||
Mob: WITCH
|
||||
Potion_Type: FIRE_RESISTANCE
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Speed_Potion:
|
||||
ID: 373
|
||||
Mob: WITCH
|
||||
Potion_Type: SPEED
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Glass_Bottle:
|
||||
ID: 374
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 9.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Glowstone_Dust:
|
||||
ID: 348
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 13.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Sulphur:
|
||||
ID: 289
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 12.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Redstone:
|
||||
ID: 331
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 13.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Spider_Eye:
|
||||
ID: 375
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 12.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Stick:
|
||||
ID: 380
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 13.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Sugar:
|
||||
ID: 353
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 12.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Witch_Potion:
|
||||
ID: 373
|
||||
Mob: WITCH
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 13.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Zombie_Skull:
|
||||
ID: 397
|
||||
Mob: ZOMBIE
|
||||
Data: 2
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Zombie_Rotten_Flesh:
|
||||
ID: 367
|
||||
Mob: ZOMBIE
|
||||
Data: 0
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 98.0
|
||||
Drop_Level: 0
|
||||
Drops_From:
|
||||
Shake: true
|
||||
Reference in New Issue
Block a user