mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-10-31 17:23:42 +01:00 
			
		
		
		
	Begin rework of Taming skill
This commit is contained in:
		| @@ -34,8 +34,8 @@ import com.gmail.nossr50.party.PartyManager; | |||||||
| import com.gmail.nossr50.runnables.BleedTimer; | import com.gmail.nossr50.runnables.BleedTimer; | ||||||
| import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager; | import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager; | ||||||
| import com.gmail.nossr50.skills.combat.Archery; | import com.gmail.nossr50.skills.combat.Archery; | ||||||
| import com.gmail.nossr50.skills.combat.Taming; |  | ||||||
| import com.gmail.nossr50.skills.gathering.BlastMining; | import com.gmail.nossr50.skills.gathering.BlastMining; | ||||||
|  | import com.gmail.nossr50.skills.taming.Taming; | ||||||
| import com.gmail.nossr50.util.Combat; | import com.gmail.nossr50.util.Combat; | ||||||
| import com.gmail.nossr50.util.Misc; | import com.gmail.nossr50.util.Misc; | ||||||
| import com.gmail.nossr50.util.Permissions; | import com.gmail.nossr50.util.Permissions; | ||||||
|   | |||||||
| @@ -33,10 +33,10 @@ import com.gmail.nossr50.events.chat.McMMOPartyChatEvent; | |||||||
| import com.gmail.nossr50.locale.LocaleLoader; | import com.gmail.nossr50.locale.LocaleLoader; | ||||||
| import com.gmail.nossr50.party.Party; | import com.gmail.nossr50.party.Party; | ||||||
| import com.gmail.nossr50.runnables.BleedTimer; | import com.gmail.nossr50.runnables.BleedTimer; | ||||||
| import com.gmail.nossr50.skills.combat.Taming; |  | ||||||
| import com.gmail.nossr50.skills.gathering.BlastMining; | import com.gmail.nossr50.skills.gathering.BlastMining; | ||||||
| import com.gmail.nossr50.skills.gathering.Fishing; | import com.gmail.nossr50.skills.gathering.Fishing; | ||||||
| import com.gmail.nossr50.skills.gathering.Herbalism; | import com.gmail.nossr50.skills.gathering.Herbalism; | ||||||
|  | import com.gmail.nossr50.skills.taming.Taming; | ||||||
| import com.gmail.nossr50.spout.SpoutStuff; | import com.gmail.nossr50.spout.SpoutStuff; | ||||||
| import com.gmail.nossr50.util.BlockChecks; | import com.gmail.nossr50.util.BlockChecks; | ||||||
| import com.gmail.nossr50.util.Item; | import com.gmail.nossr50.util.Item; | ||||||
|   | |||||||
| @@ -0,0 +1,27 @@ | |||||||
|  | package com.gmail.nossr50.skills.taming; | ||||||
|  |  | ||||||
|  | import org.bukkit.entity.Wolf; | ||||||
|  |  | ||||||
|  | public class FastFoodServiceEventHandler { | ||||||
|  |     private Wolf wolf; | ||||||
|  |  | ||||||
|  |     public FastFoodServiceEventHandler (Wolf wolf) { | ||||||
|  |         this.wolf = wolf; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void modifyHealth(int damage) { | ||||||
|  |         int health = wolf.getHealth(); | ||||||
|  |         int maxHealth = wolf.getMaxHealth(); | ||||||
|  |  | ||||||
|  |         if (health < maxHealth) { | ||||||
|  |             int newHealth = health + damage; | ||||||
|  |  | ||||||
|  |             if (newHealth <= maxHealth) { | ||||||
|  |                 wolf.setHealth(newHealth); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 wolf.setHealth(maxHealth); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,44 @@ | |||||||
|  | package com.gmail.nossr50.skills.taming; | ||||||
|  |  | ||||||
|  | import org.bukkit.entity.Entity; | ||||||
|  | import org.bukkit.entity.LivingEntity; | ||||||
|  | import org.bukkit.entity.Player; | ||||||
|  | import org.bukkit.event.entity.EntityDamageEvent; | ||||||
|  |  | ||||||
|  | import com.gmail.nossr50.locale.LocaleLoader; | ||||||
|  | import com.gmail.nossr50.runnables.BleedTimer; | ||||||
|  | import com.gmail.nossr50.util.Misc; | ||||||
|  |  | ||||||
|  | public class GoreEventHandler { | ||||||
|  |     private TamingManager manager; | ||||||
|  |     private EntityDamageEvent event; | ||||||
|  |     private Entity entity; | ||||||
|  |     protected int skillModifier; | ||||||
|  |  | ||||||
|  |     protected GoreEventHandler(TamingManager manager, EntityDamageEvent event) { | ||||||
|  |         this.manager = manager; | ||||||
|  |         this.event = event; | ||||||
|  |         this.entity = event.getEntity(); | ||||||
|  |         calculateSkillModifier(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void calculateSkillModifier() { | ||||||
|  |         this.skillModifier = Misc.skillCheck(manager.getSkillLevel(), Taming.GORE_MAX_BONUS_LEVEL); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void modifyEventDamage() { | ||||||
|  |         event.setDamage(event.getDamage() * Taming.GORE_MULTIPLIER); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void sendAbilityMessage() { | ||||||
|  |         if (entity instanceof Player) { | ||||||
|  |             ((Player) entity).sendMessage(LocaleLoader.getString("Combat.StruckByGore")); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         manager.getPlayer().sendMessage(LocaleLoader.getString("Combat.Gore")); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void applyBleed() { | ||||||
|  |         BleedTimer.add((LivingEntity) entity, Taming.GORE_BLEED_TICKS); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,15 @@ | |||||||
|  | package com.gmail.nossr50.skills.taming; | ||||||
|  |  | ||||||
|  | import org.bukkit.event.entity.EntityDamageEvent; | ||||||
|  |  | ||||||
|  | public class SharpenedClawsEventHandler { | ||||||
|  |     private EntityDamageEvent event; | ||||||
|  |  | ||||||
|  |     public SharpenedClawsEventHandler (EntityDamageEvent event) { | ||||||
|  |         this.event = event; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void modifyEventDamage() { | ||||||
|  |         event.setDamage(event.getDamage() + Taming.SHARPENED_CLAWS_BONUS); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| package com.gmail.nossr50.skills.combat; | package com.gmail.nossr50.skills.taming; | ||||||
| 
 | 
 | ||||||
| import java.util.Random; | import java.util.Random; | ||||||
| 
 | 
 | ||||||
| @@ -20,84 +20,25 @@ import org.bukkit.metadata.FixedMetadataValue; | |||||||
| 
 | 
 | ||||||
| import com.gmail.nossr50.mcMMO; | import com.gmail.nossr50.mcMMO; | ||||||
| import com.gmail.nossr50.config.Config; | import com.gmail.nossr50.config.Config; | ||||||
| import com.gmail.nossr50.datatypes.PlayerProfile; |  | ||||||
| import com.gmail.nossr50.datatypes.SkillType; | import com.gmail.nossr50.datatypes.SkillType; | ||||||
| import com.gmail.nossr50.locale.LocaleLoader; | import com.gmail.nossr50.locale.LocaleLoader; | ||||||
| import com.gmail.nossr50.runnables.BleedTimer; |  | ||||||
| import com.gmail.nossr50.util.Misc; | import com.gmail.nossr50.util.Misc; | ||||||
| import com.gmail.nossr50.util.Permissions; | import com.gmail.nossr50.util.Permissions; | ||||||
| import com.gmail.nossr50.util.Users; | import com.gmail.nossr50.util.Users; | ||||||
| 
 | 
 | ||||||
| public class Taming { | public class Taming { | ||||||
|  |     public static final int FAST_FOOD_SERVICE_ACTIVATION_CHANCE = 50; | ||||||
|  |     public static final int FAST_FOOD_SERVICE_ACTIVATION_LEVEL = 50; | ||||||
|  | 
 | ||||||
|  |     public static final int GORE_BLEED_TICKS = 2; | ||||||
|  |     public static final int GORE_MAX_BONUS_LEVEL = 1000; | ||||||
|  |     public static final int GORE_MULTIPLIER = 2; | ||||||
|  | 
 | ||||||
|  |     public static final int SHARPENED_CLAWS_ACTIVATION_LEVEL = 750; | ||||||
|  |     public static final int SHARPENED_CLAWS_BONUS = 2; | ||||||
|  | 
 | ||||||
|     private static Random random = new Random(); |     private static Random random = new Random(); | ||||||
| 
 | 
 | ||||||
|     /** |  | ||||||
|      * Apply the Fast Food Service ability. |  | ||||||
|      * |  | ||||||
|      * @param PPo The PlayerProfile of the wolf's owner |  | ||||||
|      * @param theWolf The wolf using the ability |  | ||||||
|      * @param damage The damage being absorbed by the wolf |  | ||||||
|      */ |  | ||||||
|     public static void fastFoodService (PlayerProfile PPo, Wolf theWolf, int damage) { |  | ||||||
|         final int SKILL_ACTIVATION_LEVEL = 50; |  | ||||||
|         final int ACTIVATION_CHANCE = 50; |  | ||||||
| 
 |  | ||||||
|         int health = theWolf.getHealth(); |  | ||||||
|         int maxHealth = theWolf.getMaxHealth(); |  | ||||||
| 
 |  | ||||||
|         if (PPo.getSkillLevel(SkillType.TAMING) >= SKILL_ACTIVATION_LEVEL) { |  | ||||||
|             if (health < maxHealth) { |  | ||||||
|                 if (random.nextInt(100) < ACTIVATION_CHANCE) { |  | ||||||
|                     if (health + damage <= maxHealth) { |  | ||||||
|                         theWolf.setHealth(health + damage); |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         theWolf.setHealth(maxHealth); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Apply the Sharpened Claws ability. |  | ||||||
|      * |  | ||||||
|      * @param PPo The PlayerProfile of the wolf's owner |  | ||||||
|      * @param event The event to modify |  | ||||||
|      */ |  | ||||||
|     public static void sharpenedClaws(PlayerProfile PPo, EntityDamageEvent event) { |  | ||||||
|         final int SKILL_ACTIVATION_LEVEL = 750; |  | ||||||
|         final int SHARPENED_CLAWS_BONUS = 2; |  | ||||||
| 
 |  | ||||||
|         if (PPo.getSkillLevel(SkillType.TAMING) >= SKILL_ACTIVATION_LEVEL) { |  | ||||||
|             event.setDamage(event.getDamage() + SHARPENED_CLAWS_BONUS); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Apply the Gore ability. |  | ||||||
|      * |  | ||||||
|      * @param PPo The PlayerProfile of the wolf's owner |  | ||||||
|      * @param event The event to modify |  | ||||||
|      * @param master The wolf's master |  | ||||||
|      */ |  | ||||||
|     public static void gore(PlayerProfile PPo, EntityDamageEvent event, Player master) { |  | ||||||
|         final int GORE_MULTIPLIER = 2; |  | ||||||
| 
 |  | ||||||
|         if (random.nextInt(1000) <= PPo.getSkillLevel(SkillType.TAMING)) { |  | ||||||
|             Entity entity = event.getEntity(); |  | ||||||
|             event.setDamage(event.getDamage() * GORE_MULTIPLIER); |  | ||||||
| 
 |  | ||||||
|             if (entity instanceof Player) { |  | ||||||
|                 ((Player) entity).sendMessage(LocaleLoader.getString("Combat.StruckByGore")); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             BleedTimer.add((LivingEntity) entity, 2); |  | ||||||
| 
 |  | ||||||
|             master.sendMessage(LocaleLoader.getString("Combat.Gore")); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |     /** | ||||||
|      * Get the name of a tameable animal's owner. |      * Get the name of a tameable animal's owner. | ||||||
|      * |      * | ||||||
| @@ -284,4 +225,8 @@ public class Taming { | |||||||
|             inspector.sendMessage(message); |             inspector.sendMessage(message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public static Random getRandom() { | ||||||
|  |         return random; | ||||||
|  |     } | ||||||
| } | } | ||||||
| @@ -0,0 +1,88 @@ | |||||||
|  | package com.gmail.nossr50.skills.taming; | ||||||
|  |  | ||||||
|  | import org.bukkit.entity.Player; | ||||||
|  | import org.bukkit.entity.Wolf; | ||||||
|  | import org.bukkit.event.entity.EntityDamageEvent; | ||||||
|  |  | ||||||
|  | import com.gmail.nossr50.datatypes.PlayerProfile; | ||||||
|  | import com.gmail.nossr50.datatypes.SkillType; | ||||||
|  | import com.gmail.nossr50.util.Permissions; | ||||||
|  | import com.gmail.nossr50.util.Users; | ||||||
|  |  | ||||||
|  | public class TamingManager { | ||||||
|  |     private Player player; | ||||||
|  |     private PlayerProfile profile; | ||||||
|  |     private int skillLevel; | ||||||
|  |     private Permissions permissionsInstance; | ||||||
|  |  | ||||||
|  |     public TamingManager (Player player) { | ||||||
|  |         this.player = player; | ||||||
|  |         this.profile = Users.getProfile(player); | ||||||
|  |         this.skillLevel = profile.getSkillLevel(SkillType.TAMING); | ||||||
|  |         this.permissionsInstance = Permissions.getInstance(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Apply the Fast Food Service ability. | ||||||
|  |      * | ||||||
|  |      * @param wolf The wolf using the ability | ||||||
|  |      * @param damage The damage being absorbed by the wolf | ||||||
|  |      */ | ||||||
|  |     public void fastFoodService(Wolf wolf, int damage) { | ||||||
|  |         if (!permissionsInstance.fastFoodService(player)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (skillLevel >= Taming.FAST_FOOD_SERVICE_ACTIVATION_LEVEL) { | ||||||
|  |             if (Taming.getRandom().nextInt(100) < Taming.FAST_FOOD_SERVICE_ACTIVATION_CHANCE) { | ||||||
|  |                 FastFoodServiceEventHandler eventHandler = new FastFoodServiceEventHandler(wolf); | ||||||
|  |  | ||||||
|  |                 eventHandler.modifyHealth(damage); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Apply the Sharpened Claws ability. | ||||||
|  |      * | ||||||
|  |      * @param event The event to modify | ||||||
|  |      */ | ||||||
|  |     public void sharpenedClaws(EntityDamageEvent event) { | ||||||
|  |         if (!permissionsInstance.sharpenedClaws(player)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (skillLevel >= Taming.SHARPENED_CLAWS_ACTIVATION_LEVEL) { | ||||||
|  |             SharpenedClawsEventHandler eventHandler = new SharpenedClawsEventHandler(event); | ||||||
|  |  | ||||||
|  |             eventHandler.modifyEventDamage(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Apply the Gore ability. | ||||||
|  |      * | ||||||
|  |      * @param event The event to modify | ||||||
|  |      */ | ||||||
|  |     public void gore(EntityDamageEvent event) { | ||||||
|  |         if (!permissionsInstance.gore(player)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         GoreEventHandler eventHandler = new GoreEventHandler(this, event); | ||||||
|  |  | ||||||
|  |         if (Taming.getRandom().nextInt(1000) <= eventHandler.skillModifier) { | ||||||
|  |             eventHandler.modifyEventDamage(); | ||||||
|  |             eventHandler.applyBleed(); | ||||||
|  |             eventHandler.sendAbilityMessage(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected int getSkillLevel() { | ||||||
|  |         return skillLevel; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected Player getPlayer() { | ||||||
|  |         return player; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -33,8 +33,9 @@ import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager; | |||||||
| import com.gmail.nossr50.skills.combat.Archery; | import com.gmail.nossr50.skills.combat.Archery; | ||||||
| import com.gmail.nossr50.skills.combat.Axes; | import com.gmail.nossr50.skills.combat.Axes; | ||||||
| import com.gmail.nossr50.skills.combat.Swords; | import com.gmail.nossr50.skills.combat.Swords; | ||||||
| import com.gmail.nossr50.skills.combat.Taming; |  | ||||||
| import com.gmail.nossr50.skills.combat.Unarmed; | import com.gmail.nossr50.skills.combat.Unarmed; | ||||||
|  | import com.gmail.nossr50.skills.taming.Taming; | ||||||
|  | import com.gmail.nossr50.skills.taming.TamingManager; | ||||||
|  |  | ||||||
| public class Combat { | public class Combat { | ||||||
|     private static Config configInstance = Config.getInstance(); |     private static Config configInstance = Config.getInstance(); | ||||||
| @@ -154,7 +155,6 @@ public class Combat { | |||||||
|  |  | ||||||
|             if (wolf.isTamed() && wolf.getOwner() instanceof Player) { |             if (wolf.isTamed() && wolf.getOwner() instanceof Player) { | ||||||
|                 Player master = (Player) wolf.getOwner(); |                 Player master = (Player) wolf.getOwner(); | ||||||
|                 PlayerProfile PPo = Users.getProfile(master); |  | ||||||
|  |  | ||||||
|                 if (!configInstance.getTamingPVP()) { |                 if (!configInstance.getTamingPVP()) { | ||||||
|                     if (targetIsPlayer || targetIsTamedPet) { |                     if (targetIsPlayer || targetIsTamedPet) { | ||||||
| @@ -168,21 +168,13 @@ public class Combat { | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 if (permInstance.fastFoodService(master)) { |                 TamingManager tamingManager = new TamingManager(master); | ||||||
|                     Taming.fastFoodService(PPo, wolf, event.getDamage()); |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 if (permInstance.sharpenedClaws(master)) { |                 tamingManager.fastFoodService(wolf, event.getDamage()); | ||||||
|                     Taming.sharpenedClaws(PPo, event); |                 tamingManager.sharpenedClaws(event); | ||||||
|                 } |                 tamingManager.gore(event); | ||||||
|  |  | ||||||
|                 if (permInstance.gore(master)) { |                 startGainXp(master, Users.getProfile(master), target, SkillType.TAMING); | ||||||
|                     Taming.gore(PPo, event, master); |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 if (permInstance.taming(master)) { |  | ||||||
|                     startGainXp(master, PPo, target, SkillType.TAMING); |  | ||||||
|                 } |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         else if (damager instanceof Arrow) { |         else if (damager instanceof Arrow) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 GJ
					GJ