Changed durability calculation to use Bukkit API function. Fixed bug where it was impossible to get the last possible loot item in each tier. Fixed bug where it was possible to get conflicting enchantments. Fixed bug where enchantments couldn't be any higher than level 1.

This commit is contained in:
gmcferrin 2012-01-19 14:29:03 -05:00
parent da9a4b80e4
commit aee71789f2

View File

@ -48,105 +48,6 @@ public class Fishing {
} }
} }
public static short getItemMaxDurability(Material mat)
{
switch(mat)
{
case LEATHER_BOOTS:
return (short) 40;
case LEATHER_LEGGINGS:
return (short) 46;
case LEATHER_HELMET:
return (short) 34;
case LEATHER_CHESTPLATE:
return (short) 49;
case CHAINMAIL_BOOTS:
return (short) 79;
case CHAINMAIL_LEGGINGS:
return (short) 92;
case CHAINMAIL_HELMET:
return (short) 67;
case CHAINMAIL_CHESTPLATE:
return (short) 96;
case GOLD_BOOTS:
return (short) 80;
case GOLD_LEGGINGS:
return (short) 92;
case GOLD_HELMET:
return (short) 68;
case GOLD_CHESTPLATE:
return (short) 96;
case IRON_BOOTS:
return (short) 160;
case IRON_LEGGINGS:
return (short) 184;
case IRON_HELMET:
return (short) 136;
case IRON_CHESTPLATE:
return (short) 192;
case DIAMOND_BOOTS:
return (short) 320;
case DIAMOND_LEGGINGS:
return (short) 368;
case DIAMOND_HELMET:
return (short) 272;
case DIAMOND_CHESTPLATE:
return (short) 384;
case GOLD_AXE:
return (short) 33;
case GOLD_SWORD:
return (short) 33;
case GOLD_HOE:
return (short) 33;
case GOLD_SPADE:
return (short) 33;
case GOLD_PICKAXE:
return (short) 33;
case WOOD_AXE:
return (short) 60;
case WOOD_SWORD:
return (short) 60;
case WOOD_HOE:
return (short) 60;
case WOOD_SPADE:
return (short) 60;
case WOOD_PICKAXE:
return (short) 60;
case STONE_AXE:
return (short) 132;
case STONE_SWORD:
return (short) 132;
case STONE_HOE:
return (short) 132;
case STONE_SPADE:
return (short) 132;
case STONE_PICKAXE:
return (short) 132;
case IRON_AXE:
return (short) 251;
case IRON_SWORD:
return (short) 251;
case IRON_HOE:
return (short) 251;
case IRON_SPADE:
return (short) 251;
case IRON_PICKAXE:
return (short) 251;
case DIAMOND_AXE:
return (short) 1562;
case DIAMOND_SWORD:
return (short) 1562;
case DIAMOND_HOE:
return (short) 1562;
case DIAMOND_SPADE:
return (short) 1562;
case DIAMOND_PICKAXE:
return (short) 1562;
default:
return (short) 0;
}
}
public static void getFishingResults(Player player, PlayerFishEvent event) public static void getFishingResults(Player player, PlayerFishEvent event)
{ {
switch(getFishingLootTier(Users.getProfile(player))) switch(getFishingLootTier(Users.getProfile(player)))
@ -174,7 +75,7 @@ public class Fishing {
private static void getFishingResultsTier1(Player player, PlayerFishEvent event) private static void getFishingResultsTier1(Player player, PlayerFishEvent event)
{ {
int randomNum = (int)(Math.random() * 14); int randomNum = (int)(Math.random() * 15);
CraftItem theCatch = (CraftItem)event.getCaught(); CraftItem theCatch = (CraftItem)event.getCaught();
if(Math.random() * 100 < 20) if(Math.random() * 100 < 20)
@ -229,13 +130,13 @@ public class Fishing {
theCatch.setItemStack(new ItemStack(Material.RAW_FISH)); theCatch.setItemStack(new ItemStack(Material.RAW_FISH));
} }
//Change durability to random value //Change durability to random value
theCatch.getItemStack().setDurability((short) (Math.random() * Fishing.getItemMaxDurability(theCatch.getItemStack().getType()))); //Change the damage value theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
} }
private static void getFishingResultsTier2(Player player, PlayerFishEvent event) private static void getFishingResultsTier2(Player player, PlayerFishEvent event)
{ {
int randomNum = (int)(Math.random() * 19); int randomNum = (int)(Math.random() * 20);
CraftItem theCatch = (CraftItem)event.getCaught(); CraftItem theCatch = (CraftItem)event.getCaught();
if(Math.random() * 100 < 25) if(Math.random() * 100 < 25)
@ -306,12 +207,12 @@ public class Fishing {
} }
//Change durability to random value //Change durability to random value
theCatch.getItemStack().setDurability((short) (Math.random() * Fishing.getItemMaxDurability(theCatch.getItemStack().getType()))); theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
} }
private static void getFishingResultsTier3(Player player, PlayerFishEvent event) private static void getFishingResultsTier3(Player player, PlayerFishEvent event)
{ {
int randomNum = (int)(Math.random() * 23); int randomNum = (int)(Math.random() * 24);
CraftItem theCatch = (CraftItem)event.getCaught(); CraftItem theCatch = (CraftItem)event.getCaught();
if(Math.random() * 100 < 30) if(Math.random() * 100 < 30)
@ -394,12 +295,12 @@ public class Fishing {
theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1)); theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
} }
//Change durability to random value //Change durability to random value
theCatch.getItemStack().setDurability((short) (Math.random() * Fishing.getItemMaxDurability(theCatch.getItemStack().getType()))); theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
} }
private static void getFishingResultsTier4(Player player, PlayerFishEvent event) private static void getFishingResultsTier4(Player player, PlayerFishEvent event)
{ {
int randomNum = (int)(Math.random() * 40); int randomNum = (int)(Math.random() * 41);
CraftItem theCatch = (CraftItem)event.getCaught(); CraftItem theCatch = (CraftItem)event.getCaught();
if(Math.random() * 100 < 35) if(Math.random() * 100 < 35)
@ -532,12 +433,12 @@ public class Fishing {
theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1)); theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
} }
//Change durability to random value //Change durability to random value
theCatch.getItemStack().setDurability((short) (Math.random() * Fishing.getItemMaxDurability(theCatch.getItemStack().getType()))); theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
} }
private static void getFishingResultsTier5(Player player, PlayerFishEvent event) private static void getFishingResultsTier5(Player player, PlayerFishEvent event)
{ {
int randomNum = (int)(Math.random() * 49); int randomNum = (int)(Math.random() * 50);
CraftItem theCatch = (CraftItem)event.getCaught(); CraftItem theCatch = (CraftItem)event.getCaught();
if(Math.random() * 100 < 40) if(Math.random() * 100 < 40)
@ -696,7 +597,7 @@ public class Fishing {
theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1)); theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
} }
//Change durability to random value //Change durability to random value
theCatch.getItemStack().setDurability((short) (Math.random() * Fishing.getItemMaxDurability(theCatch.getItemStack().getType()))); theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
} }
public static void processResults(PlayerFishEvent event) public static void processResults(PlayerFishEvent event)
{ {
@ -724,23 +625,45 @@ public class Fishing {
{ {
if(x.canEnchantItem(fishingResults)) if(x.canEnchantItem(fishingResults))
{ {
//Actual chance to have an enchantment is related to your fishing skill //Prevent impossible enchantment combinations
if(Math.random() * 15 < Fishing.getFishingLootTier(PP)) if((fishingResults.containsEnchantment(PROTECTION_ENVIRONMENTAL) || fishingResults.containsEnchantment(PROTECTION_EXPLOSIONS) ||
{ fishingResults.containsEnchantment(PROTECTION_FIRE) || fishingResults.containsEnchantment(PROTECTION_PROJECTILE)) &&
enchanted = true; (x.equals(PROTECTION_EXPLOSIONS) || x.equals(PROTECTION_PROJECTILE) || x.equals(PROTECTION_FIRE) || x.equals(PROTECTION_ENVIRONMENTAL))){
int randomEnchantLevel = (int) Math.random() * x.getMaxLevel(); return;
}
if(randomEnchantLevel == 0) //More impossible enchantment combinations
randomEnchantLevel = 1; else if((fishingResults.containsEnchantment(DAMAGE_ALL) || fishingResults.containsEnchantment(DAMAGE_ARTHROPODS) || fishingResults.containsEnchantment(DAMAGE_UNDEAD)) &&
if(randomEnchantLevel > x.getMaxLevel()) (x.equals(DAMAGE_ALL) || x.equals(DAMAGE_ARTHROPODS) || x.equals(DAMAGE_UNDEAD))){
randomEnchantLevel = x.getMaxLevel(); return;
}
fishingResults.addEnchantment(x, randomEnchantLevel); //Even more impossible enchantment combinations
else if((fishingResults.containsEnchantment(SILK_TOUCH) || fishingResults.containsEnchantment(LOOT_BONUS_BLOCKS)) &&
(x.equals(SILK_TOUCH) || x.equals(LOOT_BONUS_BLOCKS))){
return;
}
else{
//Actual chance to have an enchantment is related to your fishing skill
if(Math.random() * 15 < Fishing.getFishingLootTier(PP))
{
enchanted = true;
int randomEnchantLevel = (int)(Math.random() * x.getMaxLevel());
if(randomEnchantLevel == 0)
randomEnchantLevel = 1;
if(randomEnchantLevel > x.getMaxLevel())
randomEnchantLevel = x.getMaxLevel();
fishingResults.addEnchantment(x, randomEnchantLevel);
}
} }
} }
} }
} }
} }
//Inform the player of magical properties //Inform the player of magical properties
if(enchanted) if(enchanted)
{ {