Assorted cleanup.

This commit is contained in:
GJ 2012-03-13 14:09:32 -04:00
parent a3da6b7df5
commit dc6a2b654e
13 changed files with 910 additions and 840 deletions

View File

@ -29,18 +29,16 @@ public class Item {
PlayerProfile PP = Users.getProfile(player); PlayerProfile PP = Users.getProfile(player);
ItemStack is = player.getItemInHand(); ItemStack is = player.getItemInHand();
Block block = player.getLocation().getBlock(); Block block = player.getLocation().getBlock();
int chimaeraID = LoadProperties.chimaeraId;
int itemsUsed = LoadProperties.feathersConsumedByChimaeraWing;
int amount = is.getAmount(); int amount = is.getAmount();
if (mcPermissions.getInstance().chimaeraWing(player) && is.getTypeId() == chimaeraID) { if (mcPermissions.getInstance().chimaeraWing(player) && is.getTypeId() == LoadProperties.chimaeraId) {
if (Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && amount >= itemsUsed) { if (Skills.cooldownOver(PP.getRecentlyHurt(), 60) && amount >= LoadProperties.feathersConsumedByChimaeraWing) {
player.setItemInHand(new ItemStack(chimaeraID, amount - itemsUsed)); player.setItemInHand(new ItemStack(LoadProperties.chimaeraId, amount - LoadProperties.feathersConsumedByChimaeraWing));
for (int blockY = block.getY(); blockY < player.getWorld().getMaxHeight(); blockY++) { for (int y = 0; block.getY() + y < player.getWorld().getMaxHeight(); y++) {
if (player.getLocation().getWorld().getBlockAt(block.getX(), blockY, block.getZ()).getType() != Material.AIR) { if (!block.getRelative(0, y, 0).getType().equals(Material.AIR)) {
player.sendMessage(mcLocale.getString("Item.ChimaeraWingFail")); player.sendMessage(mcLocale.getString("Item.ChimaeraWingFail"));
player.teleport(player.getLocation().getWorld().getBlockAt(block.getX(), (blockY - 1), block.getZ()).getLocation()); player.teleport(block.getRelative(0, y - 1, 0).getLocation());
return; return;
} }
} }
@ -54,10 +52,10 @@ public class Item {
player.sendMessage(mcLocale.getString("Item.ChimaeraWingPass")); player.sendMessage(mcLocale.getString("Item.ChimaeraWingPass"));
} }
else if (!Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= itemsUsed) { else if (!Skills.cooldownOver(PP.getRecentlyHurt(), 60) && is.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing) {
player.sendMessage(mcLocale.getString("Item.InjuredWait", new Object[] {Skills.calculateTimeLeft(player, PP.getRecentlyHurt(), 60)})); player.sendMessage(mcLocale.getString("Item.InjuredWait", new Object[] {Skills.calculateTimeLeft(PP.getRecentlyHurt(), 60)}));
} }
else if (is.getTypeId() == LoadProperties.chimaeraId && is.getAmount() <= itemsUsed) { else if (is.getAmount() <= LoadProperties.feathersConsumedByChimaeraWing) {
player.sendMessage(mcLocale.getString("Item.NeedFeathers")); player.sendMessage(mcLocale.getString("Item.NeedFeathers"));
} }
} }

View File

@ -239,6 +239,7 @@ public class BlastMining {
final byte SNOW = 78; final byte SNOW = 78;
final byte AIR = 0; final byte AIR = 0;
final int BLOCKS_AWAY = 100; final int BLOCKS_AWAY = 100;
final int TIME_CONVERSION_FACTOR = 1000;
PlayerProfile PP = Users.getProfile(player); PlayerProfile PP = Users.getProfile(player);
HashSet<Byte> transparent = new HashSet<Byte>(); HashSet<Byte> transparent = new HashSet<Byte>();
@ -253,8 +254,8 @@ public class BlastMining {
AbilityType ability = AbilityType.BLAST_MINING; AbilityType ability = AbilityType.BLAST_MINING;
/* Check Cooldown */ /* Check Cooldown */
if(!Skills.cooldownOver(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown())) { if(!Skills.cooldownOver(PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR, ability.getCooldown())) {
player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + Skills.calculateTimeLeft(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()) + "s)"); player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + Skills.calculateTimeLeft(PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR, ability.getCooldown()) + "s)");
return; return;
} }

View File

@ -20,519 +20,518 @@ import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.locale.mcLocale;
public class Repair { public class Repair {
private static int rGold = LoadProperties.rGold; private static int rGold = LoadProperties.rGold;
private static String nGold = LoadProperties.nGold; private static String nGold = LoadProperties.nGold;
private static int rStone = LoadProperties.rStone; private static int rStone = LoadProperties.rStone;
private static String nStone = LoadProperties.nStone; private static String nStone = LoadProperties.nStone;
private static int rWood = LoadProperties.rWood; private static int rWood = LoadProperties.rWood;
private static String nWood = LoadProperties.nWood; private static String nWood = LoadProperties.nWood;
private static int rDiamond = LoadProperties.rDiamond; private static int rDiamond = LoadProperties.rDiamond;
private static String nDiamond = LoadProperties.nDiamond; private static String nDiamond = LoadProperties.nDiamond;
private static int rIron = LoadProperties.rIron; private static int rIron = LoadProperties.rIron;
private static String nIron = LoadProperties.nIron; private static String nIron = LoadProperties.nIron;
private static int rString = LoadProperties.rString; private static int rString = LoadProperties.rString;
private static String nString = LoadProperties.nString; private static String nString = LoadProperties.nString;
private static int rLeather = LoadProperties.rLeather; private static int rLeather = LoadProperties.rLeather;
private static String nLeather = LoadProperties.nLeather; private static String nLeather = LoadProperties.nLeather;
private static int dLevel = LoadProperties.repairdiamondlevel; private static int dLevel = LoadProperties.repairdiamondlevel;
private static int iLevel = LoadProperties.repairIronLevel; private static int iLevel = LoadProperties.repairIronLevel;
private static int gLevel = LoadProperties.repairGoldLevel; private static int gLevel = LoadProperties.repairGoldLevel;
private static int sLevel = LoadProperties.repairStoneLevel; private static int sLevel = LoadProperties.repairStoneLevel;
private static boolean spout = LoadProperties.spoutEnabled; private static boolean spout = LoadProperties.spoutEnabled;
public static void repairCheck(Player player, ItemStack is, Block block){ public static void repairCheck(Player player, ItemStack is, Block block){
PlayerProfile PP = Users.getProfile(player); PlayerProfile PP = Users.getProfile(player);
short durabilityBefore = is.getDurability(); short durabilityBefore = is.getDurability();
PlayerInventory inventory = player.getInventory(); PlayerInventory inventory = player.getInventory();
int skillLevel = PP.getSkillLevel(SkillType.REPAIR); int skillLevel = PP.getSkillLevel(SkillType.REPAIR);
if(block != null && mcPermissions.getInstance().repair(player)){ if(block != null && mcPermissions.getInstance().repair(player)){
if(durabilityBefore > 0 && is.getAmount() < 2){ if(durabilityBefore > 0 && is.getAmount() < 2){
/* /*
* REPAIR ARMOR * REPAIR ARMOR
*/ */
if(isArmor(is) && LoadProperties.repairArmor){ if(isArmor(is) && LoadProperties.repairArmor){
//DIAMOND ARMOR //DIAMOND ARMOR
if(isDiamondArmor(is) && inventory.contains(rDiamond) && skillLevel >= dLevel){ if(isDiamondArmor(is) && inventory.contains(rDiamond) && skillLevel >= dLevel){
inventory.removeItem(new ItemStack(rDiamond, 1)); inventory.removeItem(new ItemStack(rDiamond, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 6, true); xpHandler(player, PP, is, durabilityBefore, 6, true);
} }
//IRON ARMOR //IRON ARMOR
else if (isIronArmor(is) && inventory.contains(rIron) && skillLevel >= iLevel){ else if (isIronArmor(is) && inventory.contains(rIron) && skillLevel >= iLevel){
inventory.removeItem(new ItemStack(rIron, 1)); inventory.removeItem(new ItemStack(rIron, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 2, true); xpHandler(player, PP, is, durabilityBefore, 2, true);
} }
//GOLD ARMOR //GOLD ARMOR
else if (isGoldArmor(is) && inventory.contains(rGold) && skillLevel >= gLevel){ else if (isGoldArmor(is) && inventory.contains(rGold) && skillLevel >= gLevel){
inventory.removeItem(new ItemStack(rGold, 1)); inventory.removeItem(new ItemStack(rGold, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 4, true); xpHandler(player, PP, is, durabilityBefore, 4, true);
} }
//LEATHER ARMOR //LEATHER ARMOR
else if (isLeatherArmor(is) && inventory.contains(rLeather)){ else if (isLeatherArmor(is) && inventory.contains(rLeather)){
inventory.removeItem(new ItemStack(rLeather, 1)); inventory.removeItem(new ItemStack(rLeather, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 1, true); xpHandler(player, PP, is, durabilityBefore, 1, true);
} }
//UNABLE TO REPAIR //UNABLE TO REPAIR
else { else {
needMoreVespeneGas(is, player); needMoreVespeneGas(is, player);
} }
} }
/* /*
* REPAIR TOOLS * REPAIR TOOLS
*/ */
if(isTools(is) && LoadProperties.repairTools){ if(isTools(is) && LoadProperties.repairTools){
//STONE TOOLS //STONE TOOLS
if(isStoneTools(is) && inventory.contains(rStone) && skillLevel >= sLevel){ if(isStoneTools(is) && inventory.contains(rStone) && skillLevel >= sLevel){
inventory.removeItem(new ItemStack(rStone, 1)); inventory.removeItem(new ItemStack(rStone, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 2, false); xpHandler(player, PP, is, durabilityBefore, 2, false);
} }
//WOOD TOOLS //WOOD TOOLS
else if(isWoodTools(is) && inventory.contains(rWood)){ else if(isWoodTools(is) && inventory.contains(rWood)){
inventory.removeItem(new ItemStack(rWood, 1)); inventory.removeItem(new ItemStack(rWood, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 2, false); xpHandler(player, PP, is, durabilityBefore, 2, false);
} }
//IRON TOOLS //IRON TOOLS
else if(isIronTools(is) && inventory.contains(rIron) && skillLevel >= iLevel){ else if(isIronTools(is) && inventory.contains(rIron) && skillLevel >= iLevel){
inventory.removeItem(new ItemStack(rIron, 1)); inventory.removeItem(new ItemStack(rIron, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 1, true); xpHandler(player, PP, is, durabilityBefore, 1, true);
} }
//DIAMOND TOOLS //DIAMOND TOOLS
else if (isDiamondTools(is) && inventory.contains(rDiamond) && skillLevel >= dLevel){ else if (isDiamondTools(is) && inventory.contains(rDiamond) && skillLevel >= dLevel){
inventory.removeItem(new ItemStack(rDiamond, 1)); inventory.removeItem(new ItemStack(rDiamond, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 1, true); xpHandler(player, PP, is, durabilityBefore, 1, true);
} }
//GOLD TOOLS //GOLD TOOLS
else if(isGoldTools(is) && inventory.contains(rGold) && skillLevel >= gLevel){ else if(isGoldTools(is) && inventory.contains(rGold) && skillLevel >= gLevel){
inventory.removeItem(new ItemStack(rGold, 1)); inventory.removeItem(new ItemStack(rGold, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 8, true); xpHandler(player, PP, is, durabilityBefore, 8, true);
} }
//BOW //BOW
else if(isBow(is) && inventory.contains(rString)){ else if(isBow(is) && inventory.contains(rString)){
inventory.removeItem(new ItemStack(rString, 1)); inventory.removeItem(new ItemStack(rString, 1));
repairItem(player, is); repairItem(player, is);
xpHandler(player, PP, is, durabilityBefore, 2, false); xpHandler(player, PP, is, durabilityBefore, 2, false);
} }
//UNABLE TO REPAIR //UNABLE TO REPAIR
else { else {
needMoreVespeneGas(is, player); needMoreVespeneGas(is, player);
} }
} }
} }
else { else {
player.sendMessage(mcLocale.getString("Skills.FullDurability")); player.sendMessage(mcLocale.getString("Skills.FullDurability"));
} }
/* /*
* GIVE SKILL IF THERE IS ENOUGH XP * GIVE SKILL IF THERE IS ENOUGH XP
*/ */
Skills.XpCheckSkill(SkillType.REPAIR, player); Skills.XpCheckSkill(SkillType.REPAIR, player);
} }
} }
public static void xpHandler(Player player, PlayerProfile PP, ItemStack is, short durabilityBefore, int modify, boolean boost) private static void xpHandler(Player player, PlayerProfile PP, ItemStack is, short durabilityBefore, int modify, boolean boost)
{ {
short durabilityAfter = is.getDurability(); short durabilityAfter = is.getDurability();
short dif = (short) (durabilityBefore - durabilityAfter); short dif = (short) (durabilityBefore - durabilityAfter);
if(boost) if(boost)
dif = (short) (dif * modify); dif = (short) (dif * modify);
if(!boost) if(!boost)
dif = (short) (dif / modify); dif = (short) (dif / modify);
if(ItemChecks.isShovel(is)) if(ItemChecks.isShovel(is))
dif = (short) (dif / 3); dif = (short) (dif / 3);
if(ItemChecks.isSword(is)) if(ItemChecks.isSword(is))
dif = (short) (dif / 2); dif = (short) (dif / 2);
if(ItemChecks.isHoe(is)) if(ItemChecks.isHoe(is))
dif = (short) (dif / 2); dif = (short) (dif / 2);
PP.addXP(SkillType.REPAIR, dif*10, player); PP.addXP(SkillType.REPAIR, dif*10, player);
//CLANG CLANG //CLANG CLANG
if(spout) if(spout)
SpoutStuff.playRepairNoise(player); SpoutStuff.playRepairNoise(player);
} }
/** /**
* Get current Arcane Forging rank. * Get current Arcane Forging rank.
* *
* @param skillLevel The skill level of the player whose rank is being checked * @param skillLevel The skill level of the player whose rank is being checked
* @return The player's current Arcane Forging rank * @return The player's current Arcane Forging rank
*/ */
public static int getArcaneForgingRank(int skillLevel) public static int getArcaneForgingRank(int skillLevel)
{ {
if(skillLevel >= LoadProperties.arcaneRank4) if(skillLevel >= LoadProperties.arcaneRank4)
return 4; return 4;
if (skillLevel >= LoadProperties.arcaneRank3) if (skillLevel >= LoadProperties.arcaneRank3)
return 3; return 3;
if(skillLevel >= LoadProperties.arcaneRank2) if(skillLevel >= LoadProperties.arcaneRank2)
return 2; return 2;
if (skillLevel >= LoadProperties.arcaneRank1) if (skillLevel >= LoadProperties.arcaneRank1)
return 1; return 1;
return 0; return 0;
} }
public static void addEnchants(Player player, ItemStack is) public static void addEnchants(Player player, ItemStack is)
{ {
Map<Enchantment, Integer> enchants = is.getEnchantments(); Map<Enchantment, Integer> enchants = is.getEnchantments();
if(enchants.size() == 0) if(enchants.size() == 0)
return; return;
int rank = getArcaneForgingRank(Users.getProfile(player).getSkillLevel(SkillType.REPAIR)); int rank = getArcaneForgingRank(Users.getProfile(player).getSkillLevel(SkillType.REPAIR));
if(rank == 0) if(rank == 0)
{ {
for(Enchantment x : enchants.keySet()) for(Enchantment x : enchants.keySet())
is.removeEnchantment(x); is.removeEnchantment(x);
player.sendMessage(mcLocale.getString("Repair.LostEnchants")); player.sendMessage(mcLocale.getString("Repair.LostEnchants"));
return; return;
} }
boolean downgraded = false; boolean downgraded = false;
for(Entry<Enchantment, Integer> enchant : enchants.entrySet()) for(Entry<Enchantment, Integer> enchant : enchants.entrySet())
{ {
if(Math.random() * 100 <= getEnchantChance(rank)) if(Math.random() * 100 <= getEnchantChance(rank))
{ {
int enchantLevel = enchant.getValue(); int enchantLevel = enchant.getValue();
if(LoadProperties.mayDowngradeEnchants && enchantLevel > 1) if(LoadProperties.mayDowngradeEnchants && enchantLevel > 1)
{ {
if(Math.random() * 100 <= getDowngradeChance(rank)) if(Math.random() * 100 <= getDowngradeChance(rank))
{ {
is.addEnchantment(enchant.getKey(), enchantLevel--); is.addEnchantment(enchant.getKey(), enchantLevel--);
downgraded = true; downgraded = true;
} }
} }
} }
else else
is.removeEnchantment(enchant.getKey()); is.removeEnchantment(enchant.getKey());
} }
Map<Enchantment, Integer> newEnchants = is.getEnchantments(); Map<Enchantment, Integer> newEnchants = is.getEnchantments();
if(newEnchants.isEmpty()) if(newEnchants.isEmpty())
player.sendMessage(mcLocale.getString("Repair.ArcaneFailed")); player.sendMessage(mcLocale.getString("Repair.ArcaneFailed"));
else if(downgraded || newEnchants.size() < enchants.size()) else if(downgraded || newEnchants.size() < enchants.size())
player.sendMessage(mcLocale.getString("Repair.Downgraded")); player.sendMessage(mcLocale.getString("Repair.Downgraded"));
else else
player.sendMessage(mcLocale.getString("Repair.ArcanePerfect")); player.sendMessage(mcLocale.getString("Repair.ArcanePerfect"));
} }
/** /**
* Gets chance of keeping enchantment during repair. * Gets chance of keeping enchantment during repair.
* *
* @param rank Arcane Forging rank * @param rank Arcane Forging rank
* @return The chance of keeping the enchantment * @return The chance of keeping the enchantment
*/ */
public static int getEnchantChance(int rank) public static int getEnchantChance(int rank)
{ {
switch(rank) switch(rank)
{ {
case 4: case 4:
return LoadProperties.keepEnchantsRank4; return LoadProperties.keepEnchantsRank4;
case 3: case 3:
return LoadProperties.keepEnchantsRank3; return LoadProperties.keepEnchantsRank3;
case 2: case 2:
return LoadProperties.keepEnchantsRank2; return LoadProperties.keepEnchantsRank2;
case 1: case 1:
return LoadProperties.keepEnchantsRank1; return LoadProperties.keepEnchantsRank1;
default: default:
return 0; return 0;
} }
} }
/** /**
* Gets chance of enchantment being downgraded during repair. * Gets chance of enchantment being downgraded during repair.
* *
* @param rank Arcane Forging rank * @param rank Arcane Forging rank
* @return The chance of the enchantment being downgraded * @return The chance of the enchantment being downgraded
*/ */
public static int getDowngradeChance(int rank) public static int getDowngradeChance(int rank)
{ {
switch(rank) switch(rank)
{ {
case 4: case 4:
return LoadProperties.downgradeRank4; return LoadProperties.downgradeRank4;
case 3: case 3:
return LoadProperties.downgradeRank3; return LoadProperties.downgradeRank3;
case 2: case 2:
return LoadProperties.downgradeRank2; return LoadProperties.downgradeRank2;
case 1: case 1:
return LoadProperties.downgradeRank1; return LoadProperties.downgradeRank1;
default: default:
return 100; return 100;
} }
} }
public static boolean isArmor(ItemStack is){ public static boolean isArmor(ItemStack is){
return isLeatherArmor(is) || isGoldArmor(is) || isIronArmor(is) || isDiamondArmor(is); return isLeatherArmor(is) || isGoldArmor(is) || isIronArmor(is) || isDiamondArmor(is);
} }
public static boolean isLeatherArmor(ItemStack is){ public static boolean isLeatherArmor(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case LEATHER_BOOTS: case LEATHER_BOOTS:
case LEATHER_CHESTPLATE: case LEATHER_CHESTPLATE:
case LEATHER_HELMET: case LEATHER_HELMET:
case LEATHER_LEGGINGS: case LEATHER_LEGGINGS:
return true; return true;
} }
return false; return false;
} }
public static boolean isGoldArmor(ItemStack is){ public static boolean isGoldArmor(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case GOLD_BOOTS: case GOLD_BOOTS:
case GOLD_CHESTPLATE: case GOLD_CHESTPLATE:
case GOLD_HELMET: case GOLD_HELMET:
case GOLD_LEGGINGS: case GOLD_LEGGINGS:
return true; return true;
} }
return false; return false;
} }
public static boolean isIronArmor(ItemStack is){ public static boolean isIronArmor(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case IRON_BOOTS: case IRON_BOOTS:
case IRON_CHESTPLATE: case IRON_CHESTPLATE:
case IRON_HELMET: case IRON_HELMET:
case IRON_LEGGINGS: case IRON_LEGGINGS:
return true; return true;
} }
return false; return false;
} }
public static boolean isDiamondArmor(ItemStack is){ public static boolean isDiamondArmor(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case DIAMOND_BOOTS: case DIAMOND_BOOTS:
case DIAMOND_CHESTPLATE: case DIAMOND_CHESTPLATE:
case DIAMOND_HELMET: case DIAMOND_HELMET:
case DIAMOND_LEGGINGS: case DIAMOND_LEGGINGS:
return true; return true;
} }
return false; return false;
} }
public static boolean isTools(ItemStack is) public static boolean isTools(ItemStack is)
{ {
return isStoneTools(is) || isWoodTools(is) || isGoldTools(is) || isIronTools(is) || isDiamondTools(is) || isBow(is); return isStoneTools(is) || isWoodTools(is) || isGoldTools(is) || isIronTools(is) || isDiamondTools(is) || isBow(is);
} }
public static boolean isStoneTools(ItemStack is){ public static boolean isStoneTools(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case STONE_AXE: case STONE_AXE:
case STONE_HOE: case STONE_HOE:
case STONE_PICKAXE: case STONE_PICKAXE:
case STONE_SPADE: case STONE_SPADE:
case STONE_SWORD: case STONE_SWORD:
return true; return true;
} }
return false; return false;
} }
public static boolean isWoodTools(ItemStack is){ public static boolean isWoodTools(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case WOOD_AXE: case WOOD_AXE:
case WOOD_HOE: case WOOD_HOE:
case WOOD_PICKAXE: case WOOD_PICKAXE:
case WOOD_SPADE: case WOOD_SPADE:
case WOOD_SWORD: case WOOD_SWORD:
return true; return true;
} }
return false; return false;
} }
public static boolean isGoldTools(ItemStack is){ public static boolean isGoldTools(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case GOLD_AXE: case GOLD_AXE:
case GOLD_HOE: case GOLD_HOE:
case GOLD_PICKAXE: case GOLD_PICKAXE:
case GOLD_SPADE: case GOLD_SPADE:
case GOLD_SWORD: case GOLD_SWORD:
return true; return true;
} }
return false; return false;
} }
public static boolean isIronTools(ItemStack is){ public static boolean isIronTools(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case IRON_AXE: case IRON_AXE:
case IRON_HOE: case IRON_HOE:
case IRON_PICKAXE: case IRON_PICKAXE:
case IRON_SPADE: case IRON_SPADE:
case IRON_SWORD: case IRON_SWORD:
case SHEARS: case SHEARS:
return true; return true;
} }
return false; return false;
} }
public static boolean isDiamondTools(ItemStack is){ public static boolean isDiamondTools(ItemStack is){
switch(is.getType()){ switch(is.getType()){
case DIAMOND_AXE: case DIAMOND_AXE:
case DIAMOND_HOE: case DIAMOND_HOE:
case DIAMOND_PICKAXE: case DIAMOND_PICKAXE:
case DIAMOND_SPADE: case DIAMOND_SPADE:
case DIAMOND_SWORD: case DIAMOND_SWORD:
return true; return true;
} }
return false; return false;
} }
public static boolean isBow(ItemStack is){ public static boolean isBow(ItemStack is){
return is.getType() == Material.BOW; return is.getType() == Material.BOW;
} }
/** /**
* Computes repair bonuses. * Computes repair bonuses.
* *
* @param player The player repairing an item * @param player The player repairing an item
* @param durability The durability of the item being repaired * @param durability The durability of the item being repaired
* @param ramt The base amount of durability repaired to the item * @param ramt The base amount of durability repaired to the item
* @return The final amount of durability repaired to the item * @return The final amount of durability repaired to the item
*/ */
public static short repairCalculate(Player player, short durability, int ramt){ public static short repairCalculate(Player player, short durability, int ramt){
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR); int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR);
float bonus = (float)(skillLevel/500); float bonus = (float)(skillLevel/500);
bonus = (ramt * bonus); bonus = (ramt * bonus);
ramt+=bonus; ramt+=bonus;
if(checkPlayerProcRepair(player)) if(checkPlayerProcRepair(player))
ramt = (short) (ramt * 2); ramt = (short) (ramt * 2);
durability-=ramt; durability-=ramt;
if(durability < 0) if(durability < 0)
durability = 0; durability = 0;
return durability; return durability;
} }
/** /**
* Gets the base durability amount to repair an item. * Gets the base durability amount to repair an item.
* *
* @param is The item being repaired * @param is The item being repaired
* @param player The player repairing the item * @param player The player repairing the item
* @return The final amount of durability repaired to the item * @return The final amount of durability repaired to the item
*/ */
public static short getRepairAmount(ItemStack is, Player player){ public static short getRepairAmount(ItemStack is, Player player){
short durability = is.getDurability(); short durability = is.getDurability();
short maxDurability = is.getType().getMaxDurability(); short maxDurability = is.getType().getMaxDurability();
int ramt = 0; int ramt = 0;
if(ItemChecks.isShovel(is)) if(ItemChecks.isShovel(is))
ramt = maxDurability; ramt = maxDurability;
else if(ItemChecks.isHoe(is) || ItemChecks.isSword(is) || is.getTypeId() == 359) else if(ItemChecks.isHoe(is) || ItemChecks.isSword(is) || is.getTypeId() == 359)
ramt = maxDurability / 2; ramt = maxDurability / 2;
else if(ItemChecks.isAxe(is) || ItemChecks.isMiningPick(is) || isBow(is)) else if(ItemChecks.isAxe(is) || ItemChecks.isMiningPick(is) || isBow(is))
ramt = maxDurability / 3; ramt = maxDurability / 3;
else if(ItemChecks.isBoots(is)) else if(ItemChecks.isBoots(is))
ramt = maxDurability / 4; ramt = maxDurability / 4;
else if(ItemChecks.isHelmet(is)) else if(ItemChecks.isHelmet(is))
ramt = maxDurability / 5; ramt = maxDurability / 5;
else if(ItemChecks.isPants(is)) else if(ItemChecks.isPants(is))
ramt = maxDurability / 7; ramt = maxDurability / 7;
else if(ItemChecks.isChestplate(is)) else if(ItemChecks.isChestplate(is))
ramt = maxDurability / 8; ramt = maxDurability / 8;
return repairCalculate(player, durability, ramt); return repairCalculate(player, durability, ramt);
} }
/** /**
* Informs a player that the repair has failed. * Informs a player that the repair has failed.
* *
* @param is The item being repaired * @param is The item being repaired
* @param player The player repairing the item * @param player The player repairing the item
*/ */
public static void needMoreVespeneGas(ItemStack is, Player player) public static void needMoreVespeneGas(ItemStack is, Player player)
{ {
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR); int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR);
if(is.getAmount() > 1) if(is.getAmount() > 1)
player.sendMessage(mcLocale.getString("Skills.StackedItems")); player.sendMessage(mcLocale.getString("Skills.StackedItems"));
else else
{ {
if(isDiamondTools(is) || isDiamondArmor(is)) if(isDiamondTools(is) || isDiamondArmor(is))
{ {
if(skillLevel < LoadProperties.repairdiamondlevel) if(skillLevel < LoadProperties.repairdiamondlevel)
player.sendMessage(mcLocale.getString("Skills.AdeptDiamond")); player.sendMessage(mcLocale.getString("Skills.AdeptDiamond"));
else else
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond); player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
} }
else if(isIronTools(is) || isIronArmor(is)) else if(isIronTools(is) || isIronArmor(is))
{ {
if(skillLevel < LoadProperties.repairIronLevel) if(skillLevel < LoadProperties.repairIronLevel)
player.sendMessage(mcLocale.getString("Skills.AdeptIron")); player.sendMessage(mcLocale.getString("Skills.AdeptIron"));
else else
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron); player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
} }
else if(isGoldTools(is) || isGoldArmor(is)) else if(isGoldTools(is) || isGoldArmor(is))
{ {
if(skillLevel < LoadProperties.repairGoldLevel) if(skillLevel < LoadProperties.repairGoldLevel)
player.sendMessage(mcLocale.getString("Skills.AdeptGold")); player.sendMessage(mcLocale.getString("Skills.AdeptGold"));
else else
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+nGold); player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+nGold);
} }
else if(isStoneTools(is)) else if(isStoneTools(is))
{ {
if(skillLevel < LoadProperties.repairStoneLevel) if(skillLevel < LoadProperties.repairStoneLevel)
player.sendMessage(mcLocale.getString("Skills.AdeptStone")); player.sendMessage(mcLocale.getString("Skills.AdeptStone"));
else else
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+nStone); player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+nStone);
} }
else if(isWoodTools(is)) else if(isWoodTools(is))
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.DARK_GREEN+ nWood); player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.DARK_GREEN+ nWood);
else if (isLeatherArmor(is)) else if (isLeatherArmor(is))
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nLeather); player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nLeather);
else if (isBow(is)) else if (isBow(is))
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nString); player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nString);
} }
} }
/** /**
* Checks for Super Repair bonus. * Checks for Super Repair bonus.
* *
* @param player The player repairing an item. * @param player The player repairing an item.
* @return true if bonus granted, false otherwise * @return true if bonus granted, false otherwise
*/ */
public static boolean checkPlayerProcRepair(Player player) public static boolean checkPlayerProcRepair(Player player)
{ {
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR); int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR);
if(skillLevel > 1000 || (Math.random() * 1000 <= skillLevel)) if(skillLevel > 1000 || (Math.random() * 1000 <= skillLevel))
{ {
player.sendMessage(mcLocale.getString("Skills.FeltEasy")); player.sendMessage(mcLocale.getString("Skills.FeltEasy"));
return true; return true;
} }
return false; return false;
} }
/** /**
* Repairs an item. * Repairs an item.
* *
* @param player The player repairing an item * @param player The player repairing an item
* @param enchants The enchantments on the item * @param enchants The enchantments on the item
* @param enchantsLevel The level of the enchantments on the item * @param enchantsLevel The level of the enchantments on the item
*/ */
public static void repairItem(Player player, ItemStack is) public static void repairItem(Player player, ItemStack is)
{ {
//Handle the enchantments //Handle the enchantments
if(LoadProperties.mayLoseEnchants && !mcPermissions.getInstance().repairArcaneBypass(player)) if(LoadProperties.mayLoseEnchants && !mcPermissions.getInstance().repairArcaneBypass(player))
addEnchants(player, is); addEnchants(player, is);
is.setDurability(getRepairAmount(is, player)); is.setDurability(getRepairAmount(is, player));
} }
} }

View File

@ -23,242 +23,340 @@ import com.gmail.nossr50.datatypes.ToolType;
import com.gmail.nossr50.events.McMMOPlayerLevelUpEvent; import com.gmail.nossr50.events.McMMOPlayerLevelUpEvent;
import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.locale.mcLocale;
public class Skills public class Skills {
{
public static boolean cooldownOver(Player player, long oldTime, int cooldown){
long currentTime = System.currentTimeMillis();
if(currentTime - oldTime >= (cooldown * 1000))
return true;
else
return false;
}
public static int calculateTimeLeft(Player player, long deactivatedTimeStamp, int cooldown) private final static int TIME_CONVERSION_FACTOR = 1000;
{ private final static int MAX_DISTANCE_AWAY = 10;
return (int) (((deactivatedTimeStamp + (cooldown * 1000)) - System.currentTimeMillis())/1000);
/**
* Checks to see if the cooldown for an item or ability is expired.
*
* @param oldTime The time the ability or item was last used
* @param cooldown The amount of time that must pass between uses
* @return true if the cooldown is over, false otherwise
*/
public static boolean cooldownOver(long oldTime, int cooldown){
long currentTime = System.currentTimeMillis();
if (currentTime - oldTime >= (cooldown * TIME_CONVERSION_FACTOR)) {
return true;
}
else {
return false;
}
} }
public static void watchCooldown(Player player, PlayerProfile PP, long curTime, AbilityType ability) /**
{ * Calculate the time remaining until the cooldown expires.
if(!ability.getInformed(PP) && curTime - (PP.getSkillDATS(ability) * 1000) >= (ability.getCooldown() * 1000)) *
{ * @param deactivatedTimeStamp Time of deactivation
ability.setInformed(PP, true); * @param cooldown The length of the cooldown
player.sendMessage(ability.getAbilityRefresh()); * @return the number of seconds remaining before the cooldown expires
} */
public static int calculateTimeLeft(long deactivatedTimeStamp, int cooldown) {
return (int) (((deactivatedTimeStamp + (cooldown * TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / TIME_CONVERSION_FACTOR);
} }
public static void activationCheck(Player player, SkillType skill) /**
{ * Sends a message to the player when the cooldown expires.
if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking()) *
return; * @param player The player to send a message to
* @param PP The profile of the player
* @param curTime The current system time
* @param ability The ability to watch cooldowns for
*/
public static void watchCooldown(Player player, PlayerProfile PP, long curTime, AbilityType ability) {
if (!ability.getInformed(PP) && curTime - (PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR) >= (ability.getCooldown() * TIME_CONVERSION_FACTOR)) {
ability.setInformed(PP, true);
player.sendMessage(ability.getAbilityRefresh());
}
}
PlayerProfile PP = Users.getProfile(player); /**
AbilityType ability = skill.getAbility(); * Process activating abilities & readying the tool.
ToolType tool = skill.getTool(); *
* @param player The player using the ability
* @param skill The skill the ability is tied to
*/
public static void activationCheck(Player player, SkillType skill) {
if (LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking()) {
return;
}
if(!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode()) PlayerProfile PP = Users.getProfile(player);
return; AbilityType ability = skill.getAbility();
ToolType tool = skill.getTool();
ItemStack inHand = player.getItemInHand();
//Woodcutting & Axes need to be treated differently /* Check if any abilities are active */
//Basically the tool always needs to ready and we check to see if the cooldown is over when the user takes action if (!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode()) {
if(skill == SkillType.WOODCUTTING || skill == SkillType.AXES) return;
{ }
if(tool.inHand(player.getItemInHand()) && !tool.getToolMode(PP))
{ /* Woodcutting & Axes need to be treated differently.
if(LoadProperties.enableAbilityMessages) * Basically the tool always needs to ready and we check to see if the cooldown is over when the user takes action
*/
if (skill == SkillType.WOODCUTTING || skill == SkillType.AXES) {
if (tool.inHand(inHand) && !tool.getToolMode(PP)) {
if (LoadProperties.enableAbilityMessages) {
player.sendMessage(tool.getRaiseTool()); player.sendMessage(tool.getRaiseTool());
}
tool.setToolATS(PP, System.currentTimeMillis()); tool.setToolATS(PP, System.currentTimeMillis());
tool.setToolMode(PP, true); tool.setToolMode(PP, true);
} }
} else if(ability.getPermissions(player) && tool.inHand(player.getItemInHand()) && !tool.getToolMode(PP)) }
{ else if (ability.getPermissions(player) && tool.inHand(inHand) && !tool.getToolMode(PP)) {
if(!ability.getMode(PP) && !cooldownOver(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown())) if (!ability.getMode(PP) && !cooldownOver(PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR, ability.getCooldown())) {
{ player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + calculateTimeLeft(PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR, ability.getCooldown()) + "s)");
player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + calculateTimeLeft(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()) + "s)"); return;
return; }
}
if(LoadProperties.enableAbilityMessages) if (LoadProperties.enableAbilityMessages) {
player.sendMessage(tool.getRaiseTool()); player.sendMessage(tool.getRaiseTool());
}
tool.setToolATS(PP, System.currentTimeMillis()); tool.setToolATS(PP, System.currentTimeMillis());
tool.setToolMode(PP, true); tool.setToolMode(PP, true);
} }
} }
public static void monitorSkill(Player player, PlayerProfile PP, long curTime, SkillType skill) /**
{ * Monitors various things relating to skill abilities.
ToolType tool = skill.getTool(); *
AbilityType ability = skill.getAbility(); * @param player The player using the skill
if(tool.getToolMode(PP) && curTime - (tool.getToolATS(PP) * 1000) >= 4000) * @param PP The profile of the player
{ * @param curTime The current system time
tool.setToolMode(PP, false); * @param skill The skill being monitored
player.sendMessage(tool.getLowerTool()); */
} public static void monitorSkill(Player player, PlayerProfile PP, long curTime, SkillType skill) {
final int FOUR_SECONDS = 4000;
if(ability.getPermissions(player)) ToolType tool = skill.getTool();
{ AbilityType ability = skill.getAbility();
if(ability.getMode(PP) && (PP.getSkillDATS(ability) * 1000) <= curTime)
{
ability.setMode(PP, false);
ability.setInformed(PP, false);
player.sendMessage(ability.getAbilityOff());
for(Player y : player.getWorld().getPlayers()) if (tool.getToolMode(PP) && curTime - (tool.getToolATS(PP) * TIME_CONVERSION_FACTOR) >= FOUR_SECONDS) {
{ tool.setToolMode(PP, false);
if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10)) player.sendMessage(tool.getLowerTool());
}
if (ability.getPermissions(player)) {
if (ability.getMode(PP) && (PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR) <= curTime) {
ability.setMode(PP, false);
ability.setInformed(PP, false);
player.sendMessage(ability.getAbilityOff());
for (Player y : player.getWorld().getPlayers()) {
if (y != player && m.isNear(player.getLocation(), y.getLocation(), MAX_DISTANCE_AWAY)) {
y.sendMessage(ability.getAbilityPlayerOff(player)); y.sendMessage(ability.getAbilityPlayerOff(player));
}
} }
} }
} }
}
public static void ProcessLeaderboardUpdate(SkillType skillType, Player player)
{
PlayerProfile PP = Users.getProfile(player);
PlayerStat ps = new PlayerStat();
if(skillType != SkillType.ALL)
ps.statVal = PP.getSkillLevel(skillType);
else
ps.statVal = m.getPowerLevel(player, PP);
ps.name = player.getName();
Leaderboard.updateLeaderboard(ps, skillType);
}
public static void XpCheckSkill(SkillType skillType, Player player)
{
PlayerProfile PP = Users.getProfile(player);
if(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
{
int skillups = 0;
while(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
{
if(skillType.getMaxLevel() >= PP.getSkillLevel(skillType) + 1)
{
skillups++;
PP.removeXP(skillType, PP.getXpToLevel(skillType));
PP.skillUp(skillType, 1);
McMMOPlayerLevelUpEvent eventToFire = new McMMOPlayerLevelUpEvent(player, skillType);
Bukkit.getPluginManager().callEvent(eventToFire);
} else
{
PP.removeXP(skillType, PP.getXpToLevel(skillType));
}
}
if(!LoadProperties.useMySQL)
{
ProcessLeaderboardUpdate(skillType, player);
ProcessLeaderboardUpdate(SkillType.ALL, player);
}
String capitalized = m.getCapitalized(skillType.toString());
//Contrib stuff
if(LoadProperties.spoutEnabled && player instanceof SpoutPlayer)
{
SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
if(sPlayer.isSpoutCraftEnabled())
{
SpoutStuff.levelUpNotification(skillType, sPlayer);
} else
{
player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
}
}
else
player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
}
if(LoadProperties.xpbar && LoadProperties.spoutEnabled)
{
SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
if(sPlayer.isSpoutCraftEnabled())
{
SpoutStuff.updateXpBar(sPlayer);
}
}
}
public static void XpCheckAll(Player player)
{
for(SkillType x : SkillType.values())
{
//Don't want to do anything with this one
if(x == SkillType.ALL)
continue;
XpCheckSkill(x, player);
}
}
public static SkillType getSkillType(String skillName)
{
for(SkillType x : SkillType.values())
{
if(x.toString().equals(skillName.toUpperCase()))
return x;
}
return null;
} }
public static boolean isSkill(String skillname){ /**
skillname = skillname.toUpperCase(); * Update the leaderboards.
for(SkillType x : SkillType.values()) *
{ * @param skillType The skill to update the leaderboards for
if(x.toString().equals(skillname)) * @param player The player whose skill to update
return true; */
} public static void ProcessLeaderboardUpdate(SkillType skillType, Player player) {
return false; PlayerProfile PP = Users.getProfile(player);
PlayerStat ps = new PlayerStat();
if (skillType != SkillType.ALL) {
ps.statVal = PP.getSkillLevel(skillType);
}
else {
ps.statVal = m.getPowerLevel(player, PP);
}
ps.name = player.getName();
Leaderboard.updateLeaderboard(ps, skillType);
} }
//We should probably rework this - it's a fairly ugly way to do this, compared to our other command formatting. /**
public static String getSkillStats(String skillname, Integer level, Integer XP, Integer XPToLevel) * Check the XP of a skill.
{ *
ChatColor parColor = ChatColor.DARK_AQUA; * @param skillType The skill to check
ChatColor xpColor = ChatColor.GRAY; * @param player The player whose skill to check
ChatColor LvlColor = ChatColor.GREEN; */
ChatColor skillColor = ChatColor.YELLOW; public static void XpCheckSkill(SkillType skillType, Player player) {
PlayerProfile PP = Users.getProfile(player);
return skillColor+skillname+LvlColor+level+parColor+" XP"+"("+xpColor+XP+parColor+"/"+xpColor+XPToLevel+parColor+")"; if (PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType)) {
int skillups = 0;
while (PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType)) {
if (skillType.getMaxLevel() >= PP.getSkillLevel(skillType) + 1) {
skillups++;
PP.removeXP(skillType, PP.getXpToLevel(skillType));
PP.skillUp(skillType, 1);
McMMOPlayerLevelUpEvent eventToFire = new McMMOPlayerLevelUpEvent(player, skillType);
Bukkit.getPluginManager().callEvent(eventToFire);
}
else {
PP.removeXP(skillType, PP.getXpToLevel(skillType));
}
}
if (!LoadProperties.useMySQL) {
ProcessLeaderboardUpdate(skillType, player);
ProcessLeaderboardUpdate(SkillType.ALL, player);
}
String capitalized = m.getCapitalized(skillType.toString());
/* Spout Stuff */
if (LoadProperties.spoutEnabled && player instanceof SpoutPlayer) {
SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
if (sPlayer.isSpoutCraftEnabled()) {
if (LoadProperties.xpbar) {
SpoutStuff.updateXpBar(sPlayer);
}
SpoutStuff.levelUpNotification(skillType, sPlayer);
}
else {
player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
}
}
else {
player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
}
}
} }
public static boolean hasCombatSkills(Player player) /**
{ * Check XP of all skills.
if(mcPermissions.getInstance().axes(player) || mcPermissions.getInstance().archery(player) || mcPermissions.getInstance().swords(player) || mcPermissions.getInstance().taming(player) || mcPermissions.getInstance().unarmed(player)) *
return true; * @param player The player to check XP for.
else */
return false; public static void XpCheckAll(Player player) {
for (SkillType x : SkillType.values()) {
//Don't want to do anything with this one
if (x == SkillType.ALL) {
continue;
}
XpCheckSkill(x, player);
}
} }
public static boolean hasGatheringSkills(Player player) /**
{ * Get the skill represented by the given string
if(mcPermissions.getInstance().excavation(player) || mcPermissions.getInstance().fishing(player) || mcPermissions.getInstance().herbalism(player) || mcPermissions.getInstance().mining(player) || mcPermissions.getInstance().woodcutting(player)) *
return true; * @param skillName The name of the skill
else * @return the SkillType if it exists, null otherwise
return false; */
public static SkillType getSkillType(String skillName) {
for (SkillType x : SkillType.values()) {
if (x.toString().equals(skillName.toUpperCase()))
return x;
}
return null;
} }
public static boolean hasMiscSkills(Player player) /**
{ * Checks if the given string represents a valid skill
if(mcPermissions.getInstance().acrobatics(player) || mcPermissions.getInstance().repair(player)) *
return true; * @param skillname The name of the skill to check
else * @return true if this is a valid skill, false otherwise
return false; */
public static boolean isSkill(String skillName) {
if (getSkillType(skillName) != null) {
return true;
}
else {
return false;
}
} }
public static void abilityDurabilityLoss(ItemStack inhand, int durabilityLoss) /**
{ * Get the format string for
if(LoadProperties.toolsLoseDurabilityFromAbilities) * @param skillname
{ * @param level
if(!inhand.containsEnchantment(Enchantment.DURABILITY)) * @param XP
{ * @param XPToLevel
inhand.setDurability((short)(inhand.getDurability()+durabilityLoss)); * @return
*/
public static String getSkillStats(String skillname, Integer level, Integer XP, Integer XPToLevel) {
//TODO: Ditch this function in favor of better locale setup.
ChatColor parColor = ChatColor.DARK_AQUA;
ChatColor xpColor = ChatColor.GRAY;
ChatColor LvlColor = ChatColor.GREEN;
ChatColor skillColor = ChatColor.YELLOW;
return skillColor + skillname + LvlColor + level + parColor +" XP" + "(" + xpColor + XP + parColor + "/" + xpColor + XPToLevel + parColor + ")";
}
/**
* Check if the player has any combat skill permissions.
*
* @param player The player to check permissions for
* @return true if the player has combat skills, false otherwise
*/
public static boolean hasCombatSkills(Player player) {
if (mcPermissions.getInstance().axes(player)
|| mcPermissions.getInstance().archery(player)
|| mcPermissions.getInstance().swords(player)
|| mcPermissions.getInstance().taming(player)
|| mcPermissions.getInstance().unarmed(player)) {
return true;
}
else {
return false;
}
}
/**
* Check if the player has any gathering skill permissions.
*
* @param player The player to check permissions for
* @return true if the player has gathering skills, false otherwise
*/
public static boolean hasGatheringSkills(Player player) {
if (mcPermissions.getInstance().excavation(player)
|| mcPermissions.getInstance().fishing(player)
|| mcPermissions.getInstance().herbalism(player)
|| mcPermissions.getInstance().mining(player)
|| mcPermissions.getInstance().woodcutting(player)) {
return true;
}
else {
return false;
}
}
/**
* Check if the player has any misc skill permissions.
*
* @param player The player to check permissions for
* @return true if the player has misc skills, false otherwise
*/
public static boolean hasMiscSkills(Player player) {
if (mcPermissions.getInstance().acrobatics(player) || mcPermissions.getInstance().repair(player)) {
return true;
}
else {
return false;
}
}
/**
* Handle tool durability loss from abilities.
*
* @param inhand The item to damage
* @param durabilityLoss The durability to remove from the item
*/
public static void abilityDurabilityLoss(ItemStack inhand, int durabilityLoss) {
if (LoadProperties.toolsLoseDurabilityFromAbilities) {
if (!inhand.containsEnchantment(Enchantment.DURABILITY)) {
inhand.setDurability((short) (inhand.getDurability() + durabilityLoss));
} }
} }
} }
@ -269,69 +367,79 @@ public class Skills
* @param player The player activating the ability * @param player The player activating the ability
* @param type The skill the ability is based on * @param type The skill the ability is based on
*/ */
public static void abilityCheck(Player player, SkillType type) public static void abilityCheck(Player player, SkillType type) {
{ PlayerProfile PP = Users.getProfile(player);
PlayerProfile PP = Users.getProfile(player); AbilityType ability = type.getAbility();
AbilityType ability = type.getAbility();
if(type.getTool().inHand(player.getItemInHand()))
{
if(type.getTool().getToolMode(PP))
type.getTool().setToolMode(PP, false);
//Axes and Woodcutting are odd because they share the same tool so we show them the too tired message when they take action if (type.getTool().inHand(player.getItemInHand())) {
if(type == SkillType.WOODCUTTING || type == SkillType.AXES) if (type.getTool().getToolMode(PP)) {
{ type.getTool().setToolMode(PP, false);
if(!ability.getMode(PP) && !cooldownOver(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown())) }
{
player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + calculateTimeLeft(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()) + "s)"); /* Axes and Woodcutting are odd because they share the same tool.
* We show them the too tired message when they take action.
*/
if (type == SkillType.WOODCUTTING || type == SkillType.AXES) {
if (!ability.getMode(PP) && !cooldownOver(PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR, ability.getCooldown())) {
player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + calculateTimeLeft(PP.getSkillDATS(ability) * TIME_CONVERSION_FACTOR, ability.getCooldown()) + "s)");
return; return;
} }
} }
int ticks = 2 + (PP.getSkillLevel(type) / 50); int ticks = 2 + (PP.getSkillLevel(type) / 50);
if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown()))
{ if (!ability.getMode(PP) && cooldownOver(PP.getSkillDATS(ability), ability.getCooldown())) {
player.sendMessage(ability.getAbilityOn()); player.sendMessage(ability.getAbilityOn());
for(Player y : player.getWorld().getPlayers())
{ for (Player y : player.getWorld().getPlayers()) {
if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10)) if (y != player && m.isNear(player.getLocation(), y.getLocation(), MAX_DISTANCE_AWAY)) {
y.sendMessage(ability.getAbilityPlayer(player)); y.sendMessage(ability.getAbilityPlayer(player));
} }
PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000)); }
ability.setMode(PP, true);
} PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks * TIME_CONVERSION_FACTOR));
} ability.setMode(PP, true);
}
}
} }
/**
* Check to see if ability should be triggered.
*
* @param player The player using the ability
* @param block The block modified by the ability
* @param ability The ability to check
* @return true if the ability should activate, false otherwise
*/
public static boolean triggerCheck(Player player, Block block, AbilityType ability) { public static boolean triggerCheck(Player player, Block block, AbilityType ability) {
boolean activate = true; boolean activate = true;
if (!ability.getPermissions(player)) { if (!ability.getPermissions(player)) {
activate = false; activate = false;
return activate; return activate;
} }
switch (ability) { switch (ability) {
case BERSERK: case BERSERK:
case GIGA_DRILL_BREAKER: case GIGA_DRILL_BREAKER:
case SUPER_BREAKER: case SUPER_BREAKER:
case LEAF_BLOWER: case LEAF_BLOWER:
if (!m.blockBreakSimulate(block, player, true)) { if (!m.blockBreakSimulate(block, player, true)) {
activate = false; activate = false;
break; break;
} }
case GREEN_TERRA: case GREEN_TERRA:
if (!ability.blockCheck(block.getType())) { if (!ability.blockCheck(block.getType())) {
activate = false; activate = false;
break; break;
} }
break;
default: default:
activate = false; activate = false;
break; break;
} }
return activate;
return activate;
} }
} }

View File

@ -215,10 +215,6 @@ mcPlayerListener.GreenThumb=[[YELLOW]]**GRUENER DAUMEN**
mcPlayerListener.GreenThumbFail=[[DARK_RED]]**YELLOW THUMB FEHLGESCHLAGEN** mcPlayerListener.GreenThumbFail=[[DARK_RED]]**YELLOW THUMB FEHLGESCHLAGEN**
mcPlayerListener.HerbalismSkill=[[YELLOW]]Kraeuterkunde Skill [[DARK_AQUA]](Herbalism): mcPlayerListener.HerbalismSkill=[[YELLOW]]Kraeuterkunde Skill [[DARK_AQUA]](Herbalism):
mcPlayerListener.MiningSkill=[[YELLOW]]Bergbau Skill [[DARK_AQUA]](Mining): mcPlayerListener.MiningSkill=[[YELLOW]]Bergbau Skill [[DARK_AQUA]](Mining):
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn ist freigegeben
mcPlayerListener.MyspawnNotExist=[[RED]]Lege deinen myspawn erst mit einem Bett fest
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn wurde an deine aktuelle Position gesetzt
mcPlayerListener.MyspawnTimeNotice=Du musst {0}m {1}s warten um myspawn zu nutzen
mcPlayerListener.NoPermission=unzureichende mcPermissions. mcPlayerListener.NoPermission=unzureichende mcPermissions.
mcPlayerListener.NoSkillNote=[[DARK_AQUA]]Skills ohne Zugriff sind ausgeblendet mcPlayerListener.NoSkillNote=[[DARK_AQUA]]Skills ohne Zugriff sind ausgeblendet
mcPlayerListener.NotInParty=[[RED]]Du bist in keiner Gruppe. mcPlayerListener.NotInParty=[[RED]]Du bist in keiner Gruppe.

View File

@ -217,10 +217,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]**GREEN THUMB**
mcPlayerListener.GreenThumbFail=[[RED]]**GREEN THUMB FAIL** mcPlayerListener.GreenThumbFail=[[RED]]**GREEN THUMB FAIL**
mcPlayerListener.HerbalismSkill=Herbalism: mcPlayerListener.HerbalismSkill=Herbalism:
mcPlayerListener.MiningSkill=Mining: mcPlayerListener.MiningSkill=Mining:
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn is now cleared.
mcPlayerListener.MyspawnNotExist=[[RED]]Configure your myspawn first with a bed.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn has been set to your current location.
mcPlayerListener.MyspawnTimeNotice=You must wait {0}m {1}s to use myspawn
mcPlayerListener.NoPermission=Insufficient mcPermissions. mcPlayerListener.NoPermission=Insufficient mcPermissions.
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]If you don't have access to a skill it will not be shown here. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]If you don't have access to a skill it will not be shown here.
mcPlayerListener.NotInParty=[[RED]]You are not in a party. mcPlayerListener.NotInParty=[[RED]]You are not in a party.

View File

@ -215,10 +215,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]**DEDOS VERDES**
mcPlayerListener.GreenThumbFail=[[RED]]**DEDOS VERDES FALLIDO** mcPlayerListener.GreenThumbFail=[[RED]]**DEDOS VERDES FALLIDO**
mcPlayerListener.HerbalismSkill=Herboristeria: mcPlayerListener.HerbalismSkill=Herboristeria:
mcPlayerListener.MiningSkill=Minar: mcPlayerListener.MiningSkill=Minar:
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn esta ahora limpio.
mcPlayerListener.MyspawnNotExist=[[RED]]Configura tu myspawn primero con una cama.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn ha sido establecido hacia tu localizacion actual.
mcPlayerListener.MyspawnTimeNotice=Tienes que esperar {0}min {1}seg para usar myspawn
mcPlayerListener.NoPermission=mcPermisos insuficientes mcPlayerListener.NoPermission=mcPermisos insuficientes
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si no tienes acceso a una habilidad no seras mostrado aqui. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si no tienes acceso a una habilidad no seras mostrado aqui.
mcPlayerListener.NotInParty=[[RED]]No estas en una fiesta. mcPlayerListener.NotInParty=[[RED]]No estas en una fiesta.

View File

@ -215,10 +215,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]**VIHERPEUKALO**
mcPlayerListener.GreenThumbFail=[[RED]]**VIHERPEUKALO EPÄONNISTUI** mcPlayerListener.GreenThumbFail=[[RED]]**VIHERPEUKALO EPÄONNISTUI**
mcPlayerListener.HerbalismSkill=[[YELLOW]]Yrttihoito: mcPlayerListener.HerbalismSkill=[[YELLOW]]Yrttihoito:
mcPlayerListener.MiningSkill=[[YELLOW]]Kaivanto: mcPlayerListener.MiningSkill=[[YELLOW]]Kaivanto:
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn on tyhjätty.
mcPlayerListener.MyspawnNotExist=[[RED]]Määrää myspawnisi ensin laittamalla sänky maahan.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn on asetettu tämänhetkiseen sijaintiisi.
mcPlayerListener.MyspawnTimeNotice=Sinun pitää odottaa {0}m {1}s käyttääksesi myspawnia
mcPlayerListener.NoPermission=Puutteelliset oikeudet (mcPermissions) mcPlayerListener.NoPermission=Puutteelliset oikeudet (mcPermissions)
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Jos sinulla ei ole käyttöoikeutta johonkin taitoon, sitä ei näytetä täällä. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Jos sinulla ei ole käyttöoikeutta johonkin taitoon, sitä ei näytetä täällä.
mcPlayerListener.NotInParty=[[RED]]Et ole ryhmässä. mcPlayerListener.NotInParty=[[RED]]Et ole ryhmässä.

View File

@ -215,10 +215,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]**MAIN VERTE**
mcPlayerListener.GreenThumbFail=[[RED]]**MAIN VERTE A ECHOUÉ** mcPlayerListener.GreenThumbFail=[[RED]]**MAIN VERTE A ECHOUÉ**
mcPlayerListener.HerbalismSkill=[[YELLOW]]Herboriste (/Herbalism) : mcPlayerListener.HerbalismSkill=[[YELLOW]]Herboriste (/Herbalism) :
mcPlayerListener.MiningSkill=[[YELLOW]]Minage (/Mining): mcPlayerListener.MiningSkill=[[YELLOW]]Minage (/Mining):
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Votre point de spawn a été éffacé.
mcPlayerListener.MyspawnNotExist=[[RED]]Dormez dans un lit pour définir votre point de spawn.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Votre point de spawn a été enregistré ici.
mcPlayerListener.MyspawnTimeNotice=Vous devez attendre {0}m {1}s avant d'utiliser votre spawn
mcPlayerListener.NoPermission=Vous n'avez pas les permissions nécessaires. mcPlayerListener.NoPermission=Vous n'avez pas les permissions nécessaires.
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si vous n'avez pas accès à une compé, elle ne sera pas affichée ici. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si vous n'avez pas accès à une compé, elle ne sera pas affichée ici.
mcPlayerListener.NotInParty=[[RED]]Vous n'êtes pas dans un groupe. mcPlayerListener.NotInParty=[[RED]]Vous n'êtes pas dans un groupe.

View File

@ -221,10 +221,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]**GROENE VINGERS**
mcPlayerListener.GreenThumbFail=[[RED]]**GROENE VINNGERS MISLUKT** mcPlayerListener.GreenThumbFail=[[RED]]**GROENE VINNGERS MISLUKT**
mcPlayerListener.HerbalismSkill=Landbouw: mcPlayerListener.HerbalismSkill=Landbouw:
mcPlayerListener.MiningSkill=Mijnbouw: mcPlayerListener.MiningSkill=Mijnbouw:
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn is verwijderd.
mcPlayerListener.MyspawnNotExist=[[RED]]Plaats Myspawn eerst door op een bed te drukken.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn is geplaatst op je huidige locatie.
mcPlayerListener.MyspawnTimeNotice=Je moet {0}m {1}s wachten voordat je myspawn kan gebruiken.
mcPlayerListener.NoPermission=Je hebt geen permissie. mcPlayerListener.NoPermission=Je hebt geen permissie.
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Als je geen toegang hebt tot een skill wordt hij hier niet weergegeven. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Als je geen toegang hebt tot een skill wordt hij hier niet weergegeven.
mcPlayerListener.NotInParty=[[RED]]Je zit niet in een party. mcPlayerListener.NotInParty=[[RED]]Je zit niet in een party.

View File

@ -215,10 +215,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]**UZYLES ZIELONEJ ZIEMI**
mcPlayerListener.GreenThumbFail=[[RED]]**UZYWANIE ZIELONEJ ZIEMI NIE POWIODLO SIE** mcPlayerListener.GreenThumbFail=[[RED]]**UZYWANIE ZIELONEJ ZIEMI NIE POWIODLO SIE**
mcPlayerListener.HerbalismSkill=Zielarstwo: mcPlayerListener.HerbalismSkill=Zielarstwo:
mcPlayerListener.MiningSkill=Gornictwo: mcPlayerListener.MiningSkill=Gornictwo:
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Twoj spawn zostal usuniety.
mcPlayerListener.MyspawnNotExist=[[RED]]Musisz ustawic swoj spawn za pomoca lozka.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Twoj spawn zostal ustawiony na twoje aktualne polozenie.
mcPlayerListener.MyspawnTimeNotice=Musisz zaczekac {0} minut i {1} sekund aby przeteleportowac sie na spawn.
mcPlayerListener.NoPermission=Brak mcPermissions. mcPlayerListener.NoPermission=Brak mcPermissions.
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Umiejetnosci, ktorych nie mozesz uzyc nie sa wyswietlane. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Umiejetnosci, ktorych nie mozesz uzyc nie sa wyswietlane.
mcPlayerListener.NotInParty=[[RED]]Nie jestes w grupie. mcPlayerListener.NotInParty=[[RED]]Nie jestes w grupie.

View File

@ -221,10 +221,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]*DEDOS VERDES*
mcPlayerListener.GreenThumbFail=[[RED]]*DEDOS VERDES FALHOU* mcPlayerListener.GreenThumbFail=[[RED]]*DEDOS VERDES FALHOU*
mcPlayerListener.HerbalismSkill=Herbalismo (Herbalism): mcPlayerListener.HerbalismSkill=Herbalismo (Herbalism):
mcPlayerListener.MiningSkill=Mineraçao (Mining): mcPlayerListener.MiningSkill=Mineraçao (Mining):
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Ponto de Spawn foi apagado.
mcPlayerListener.MyspawnNotExist=[[RED]]Primeiro crie um spawn durmindo na cama.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Spawn foi gravado neste local.
mcPlayerListener.MyspawnTimeNotice=Você precisa esperar {0}m {1}s para usar "myspawn"
mcPlayerListener.NoPermission=Nao tem permissao para realizar esta açao. mcPlayerListener.NoPermission=Nao tem permissao para realizar esta açao.
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Se você nao tem acesso a uma habilidade, ela nao será exibida aqui. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Se você nao tem acesso a uma habilidade, ela nao será exibida aqui.
mcPlayerListener.NotInParty=[[RED]]Você nao está em nenhuma equipe. mcPlayerListener.NotInParty=[[RED]]Você nao está em nenhuma equipe.

View File

@ -216,10 +216,6 @@ mcPlayerListener.GreenThumb=[[GREEN]]**"
mcPlayerListener.GreenThumbFail=[[RED]]**"Çåëåíûé ôåðìåð" íåóäàëñÿ** mcPlayerListener.GreenThumbFail=[[RED]]**"Çåëåíûé ôåðìåð" íåóäàëñÿ**
mcPlayerListener.HerbalismSkill=Òðàâîâåäåíèå: mcPlayerListener.HerbalismSkill=Òðàâîâåäåíèå:
mcPlayerListener.MiningSkill=Øàõò¸ðñòâî: mcPlayerListener.MiningSkill=Øàõò¸ðñòâî:
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Ваша кровать убрана.
mcPlayerListener.MyspawnNotExist=[[RED]]Сделайте вашу точку появления возле кровати, поспав на кровати.
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Моя точка появления сохранена в этой локации.
mcPlayerListener.MyspawnTimeNotice=Вы должны подождать {0}m {1}s чтобы использовать появление около кровати
mcPlayerListener.NoPermission=Íåäîñòàòî÷íûå ïðàâà. mcPlayerListener.NoPermission=Íåäîñòàòî÷íûå ïðàâà.
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Åñëè ó âàñ íåò äîñòóïà ê óìåíèþ, òî îíî çäåñü íå îòîáðàçèòñÿ. mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Åñëè ó âàñ íåò äîñòóïà ê óìåíèþ, òî îíî çäåñü íå îòîáðàçèòñÿ.
mcPlayerListener.NotInParty=[[RED]]Âû íå â ãðóïïå! mcPlayerListener.NotInParty=[[RED]]Âû íå â ãðóïïå!