Taming.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*
  2. This file is part of mcMMO.
  3. mcMMO is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 3 of the License, or
  6. (at your option) any later version.
  7. mcMMO is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. package com.gmail.nossr50.skills;
  15. import org.bukkit.Material;
  16. import org.bukkit.World;
  17. import org.bukkit.entity.Entity;
  18. import org.bukkit.entity.EntityType;
  19. import org.bukkit.entity.LivingEntity;
  20. import org.bukkit.entity.Player;
  21. import org.bukkit.entity.Wolf;
  22. import org.bukkit.event.entity.EntityDamageEvent;
  23. import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
  24. import org.bukkit.inventory.ItemStack;
  25. import com.gmail.nossr50.Combat;
  26. import com.gmail.nossr50.Users;
  27. import com.gmail.nossr50.mcMMO;
  28. import com.gmail.nossr50.config.LoadProperties;
  29. import com.gmail.nossr50.datatypes.PlayerProfile;
  30. import com.gmail.nossr50.datatypes.SkillType;
  31. import com.gmail.nossr50.locale.mcLocale;
  32. public class Taming
  33. {
  34. public static void rewardXp(EntityDamageEvent event, mcMMO pluginx, Player master)
  35. {
  36. Entity entity = event.getEntity();
  37. if(!pluginx.misc.mobSpawnerList.contains(entity.getEntityId()))
  38. {
  39. int xp = Combat.getXp((LivingEntity) entity, event.getDamage());
  40. Users.getProfile(master).addXP(SkillType.TAMING, xp*10, master);
  41. if(entity instanceof Player)
  42. {
  43. xp = (event.getDamage() * 2);
  44. Users.getProfile(master).addXP(SkillType.TAMING, (int)((xp*10)*1.5), master);
  45. }
  46. Skills.XpCheckSkill(SkillType.TAMING, master);
  47. }
  48. }
  49. public static void fastFoodService(PlayerProfile PPo, Wolf theWolf, EntityDamageEvent event)
  50. {
  51. int health = theWolf.getHealth();
  52. int maxHealth = theWolf.getMaxHealth();
  53. int damage = event.getDamage();
  54. if(PPo.getSkillLevel(SkillType.TAMING) >= 50)
  55. {
  56. if(health < maxHealth)
  57. {
  58. if(Math.random() * 10 > 5)
  59. {
  60. if(health + damage <= maxHealth)
  61. theWolf.setHealth(health + damage);
  62. else
  63. theWolf.setHealth(maxHealth);
  64. }
  65. }
  66. }
  67. }
  68. public static void sharpenedClaws(PlayerProfile PPo, EntityDamageEvent event)
  69. {
  70. if(PPo.getSkillLevel(SkillType.TAMING) >= 750)
  71. {
  72. event.setDamage(event.getDamage() + 2);
  73. }
  74. }
  75. public static void gore(PlayerProfile PPo, EntityDamageEvent event, Player master, mcMMO pluginx)
  76. {
  77. if(Math.random() * 1000 <= PPo.getSkillLevel(SkillType.TAMING))
  78. {
  79. Entity entity = event.getEntity();
  80. event.setDamage(event.getDamage() * 2);
  81. if(entity instanceof Player)
  82. {
  83. Player target = (Player)entity;
  84. target.sendMessage(mcLocale.getString("Combat.StruckByGore")); //$NON-NLS-1$
  85. Users.getProfile(target).setBleedTicks(2);
  86. }
  87. else
  88. pluginx.misc.addToBleedQue((LivingEntity)entity);
  89. master.sendMessage(mcLocale.getString("Combat.Gore")); //$NON-NLS-1$
  90. }
  91. }
  92. public static String getOwnerName(Wolf theWolf)
  93. {
  94. Player owner = null;
  95. if (theWolf.getOwner() instanceof Player)
  96. {
  97. owner = (Player)theWolf.getOwner();
  98. return owner.getName();
  99. }
  100. else
  101. return "Offline Master";
  102. }
  103. public static void preventDamage(EntityDamageEvent event, mcMMO plugin)
  104. {
  105. DamageCause cause = event.getCause();
  106. Wolf wolf = (Wolf) event.getEntity();
  107. Player master = (Player) wolf.getOwner();
  108. int skillLevel = Users.getProfile(master).getSkillLevel(SkillType.TAMING);
  109. switch(cause)
  110. {
  111. //Environmentally Aware
  112. case CONTACT:
  113. case LAVA:
  114. case FIRE:
  115. if(skillLevel >= 100)
  116. {
  117. if(event.getDamage() >= wolf.getHealth())
  118. return;
  119. wolf.teleport(master.getLocation());
  120. master.sendMessage(mcLocale.getString("mcEntityListener.WolfComesBack")); //$NON-NLS-1$
  121. }
  122. break;
  123. case FALL:
  124. if(skillLevel >= 100)
  125. event.setCancelled(true);
  126. break;
  127. //Thick Fur
  128. case FIRE_TICK:
  129. if(skillLevel >= 250)
  130. wolf.setFireTicks(0);
  131. break;
  132. case ENTITY_ATTACK:
  133. case PROJECTILE:
  134. if(skillLevel >= 250)
  135. event.setDamage(event.getDamage() / 2);
  136. break;
  137. //Shock Proof
  138. case ENTITY_EXPLOSION:
  139. case BLOCK_EXPLOSION:
  140. if(skillLevel >= 500)
  141. event.setDamage(event.getDamage() / 6);
  142. break;
  143. }
  144. }
  145. public static void animalSummon(EntityType type, Player player)
  146. {
  147. ItemStack item = player.getItemInHand();
  148. Material summonItem = null;
  149. int summonAmount = 0;
  150. switch(type)
  151. {
  152. case WOLF:
  153. summonItem = Material.BONE;
  154. summonAmount = LoadProperties.bonesConsumedByCOTW;
  155. break;
  156. case OCELOT:
  157. summonItem = Material.RAW_FISH;
  158. summonAmount = LoadProperties.fishConsumedByCOTW;
  159. break;
  160. }
  161. if(item.getType().equals(summonItem) && item.getAmount() >= summonAmount)
  162. {
  163. for(Entity x : player.getNearbyEntities(40, 40, 40))
  164. {
  165. if(x.getType().equals(type))
  166. {
  167. player.sendMessage(mcLocale.getString("m.TamingSummonFailed"));
  168. return;
  169. }
  170. }
  171. World world = player.getWorld();
  172. world.spawnCreature(player.getLocation(), type);
  173. int amount = item.getAmount();
  174. amount = amount - summonAmount;
  175. player.setItemInHand(new ItemStack(summonItem, amount));
  176. player.sendMessage(mcLocale.getString("m.TamingSummon"));
  177. }
  178. }
  179. }