|
@@ -1,6 +1,7 @@
|
|
package com.gmail.nossr50.skills;
|
|
package com.gmail.nossr50.skills;
|
|
|
|
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Location;
|
|
|
|
+import org.bukkit.Material;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.ItemStack;
|
|
@@ -13,88 +14,112 @@ import com.gmail.nossr50.datatypes.SkillType;
|
|
import com.gmail.nossr50.locale.mcLocale;
|
|
import com.gmail.nossr50.locale.mcLocale;
|
|
import com.gmail.nossr50.party.Party;
|
|
import com.gmail.nossr50.party.Party;
|
|
|
|
|
|
-public class Archery
|
|
|
|
-{
|
|
|
|
- public static void trackArrows(mcMMO pluginx, Entity x, PlayerProfile PPa)
|
|
|
|
- {
|
|
|
|
- int skillLevel = PPa.getSkillLevel(SkillType.ARCHERY);
|
|
|
|
- if(!pluginx.misc.arrowTracker.containsKey(x))
|
|
|
|
- pluginx.misc.arrowTracker.put(x, 0);
|
|
|
|
- if(skillLevel > 1000 || (Math.random() * 1000 <= skillLevel))
|
|
|
|
- pluginx.misc.arrowTracker.put(x, 1);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void ignitionCheck(Entity x, Player attacker)
|
|
|
|
- {
|
|
|
|
- //Check to see if PVP for this world is disabled before executing
|
|
|
|
- if(!x.getWorld().getPVP())
|
|
|
|
- return;
|
|
|
|
-
|
|
|
|
- PlayerProfile PPa = Users.getProfile(attacker);
|
|
|
|
- if(Math.random() * 100 >= 75)
|
|
|
|
- {
|
|
|
|
- int ignition = 20;
|
|
|
|
- ignition += (PPa.getSkillLevel(SkillType.ARCHERY)/200)*20;
|
|
|
|
-
|
|
|
|
- if(ignition > 120)
|
|
|
|
- ignition = 120;
|
|
|
|
-
|
|
|
|
- if(x instanceof Player)
|
|
|
|
- {
|
|
|
|
- Player defender = (Player)x;
|
|
|
|
- if(!Party.getInstance().inSameParty(attacker, defender))
|
|
|
|
- {
|
|
|
|
- defender.setFireTicks(defender.getFireTicks() + ignition);
|
|
|
|
- attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
|
|
|
|
- defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit")); //$NON-NLS-1$
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- x.setFireTicks(x.getFireTicks() + ignition);
|
|
|
|
- attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void dazeCheck(Player defender, Player attacker)
|
|
|
|
- {
|
|
|
|
- int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY);
|
|
|
|
-
|
|
|
|
- Location loc = defender.getLocation();
|
|
|
|
- if(Math.random() * 10 > 5)
|
|
|
|
- loc.setPitch(90);
|
|
|
|
- else
|
|
|
|
- loc.setPitch(-90);
|
|
|
|
-
|
|
|
|
- if(skillLevel >= 1000)
|
|
|
|
- {
|
|
|
|
- if(Math.random() * 1000 <= 500)
|
|
|
|
- {
|
|
|
|
- defender.teleport(loc);
|
|
|
|
- defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
|
|
|
|
- attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else if(Math.random() * 2000 <= skillLevel)
|
|
|
|
- {
|
|
|
|
- defender.teleport(loc);
|
|
|
|
- defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
|
|
|
|
- attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void arrowRetrievalCheck(Entity entity, mcMMO plugin)
|
|
|
|
- {
|
|
|
|
- if(plugin.misc.arrowTracker.containsKey(entity))
|
|
|
|
- {
|
|
|
|
- Integer x = 0;
|
|
|
|
- while(x < plugin.misc.arrowTracker.get(entity))
|
|
|
|
- {
|
|
|
|
- m.mcDropItem(entity.getLocation(), new ItemStack(262, 1));
|
|
|
|
- x++;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- plugin.misc.arrowTracker.remove(entity);
|
|
|
|
|
|
+public class Archery {
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Track arrows fired for later retrieval.
|
|
|
|
+ *
|
|
|
|
+ * @param plugin mcMMO plugin instance
|
|
|
|
+ * @param entity Entity damaged by the arrow
|
|
|
|
+ * @param PPa PlayerProfile of the player firing the arrow
|
|
|
|
+ */
|
|
|
|
+ public static void trackArrows(mcMMO plugin, Entity entity, PlayerProfile PPa) {
|
|
|
|
+ final int MAX_BONUS_LEVEL = 1000;
|
|
|
|
+ int skillLevel = PPa.getSkillLevel(SkillType.ARCHERY);
|
|
|
|
+
|
|
|
|
+ if (!plugin.misc.arrowTracker.containsKey(entity)) {
|
|
|
|
+ plugin.misc.arrowTracker.put(entity, 0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (skillLevel > MAX_BONUS_LEVEL || (Math.random() * 1000 <= skillLevel)) {
|
|
|
|
+ plugin.misc.arrowTracker.put(entity, 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Check for ignition on arrow hit.
|
|
|
|
+ *
|
|
|
|
+ * @param entity Entity damaged by the arrow
|
|
|
|
+ * @param attacker Player who fired the arrow
|
|
|
|
+ */
|
|
|
|
+ public static void ignitionCheck(Entity entity, Player attacker) {
|
|
|
|
+
|
|
|
|
+ //Check to see if PVP for this world is disabled before executing
|
|
|
|
+ if (!entity.getWorld().getPVP()) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ final int IGNITION_CHANCE = 25;
|
|
|
|
+ final int MAX_IGNITION_TICKS = 120;
|
|
|
|
+
|
|
|
|
+ PlayerProfile PPa = Users.getProfile(attacker);
|
|
|
|
+
|
|
|
|
+ if (Math.random() * 100 <= IGNITION_CHANCE) {
|
|
|
|
+ int ignition = 20;
|
|
|
|
+ ignition += (PPa.getSkillLevel(SkillType.ARCHERY) / 200) * 20;
|
|
|
|
+
|
|
|
|
+ if (ignition > MAX_IGNITION_TICKS) {
|
|
|
|
+ ignition = MAX_IGNITION_TICKS;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (entity instanceof Player) {
|
|
|
|
+ Player defender = (Player) entity;
|
|
|
|
+
|
|
|
|
+ if (!Party.getInstance().inSameParty(attacker, defender)) {
|
|
|
|
+ defender.setFireTicks(defender.getFireTicks() + ignition);
|
|
|
|
+ attacker.sendMessage(mcLocale.getString("Combat.Ignition"));
|
|
|
|
+ defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ entity.setFireTicks(entity.getFireTicks() + ignition);
|
|
|
|
+ attacker.sendMessage(mcLocale.getString("Combat.Ignition"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Check for Daze.
|
|
|
|
+ *
|
|
|
|
+ * @param defender Defending player
|
|
|
|
+ * @param attacker Attacking player
|
|
|
|
+ */
|
|
|
|
+ public static void dazeCheck(Player defender, Player attacker) {
|
|
|
|
+ final int MAX_BONUS_LEVEL = 1000;
|
|
|
|
+
|
|
|
|
+ int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY);
|
|
|
|
+ Location loc = defender.getLocation();
|
|
|
|
+ int skillCheck = skillLevel;
|
|
|
|
+
|
|
|
|
+ if (Math.random() * 10 > 5) {
|
|
|
|
+ loc.setPitch(90);
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ loc.setPitch(-90);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (skillLevel > MAX_BONUS_LEVEL) {
|
|
|
|
+ skillCheck = MAX_BONUS_LEVEL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (Math.random() * 2000 <= skillCheck) {
|
|
|
|
+ defender.teleport(loc);
|
|
|
|
+ defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy"));
|
|
|
|
+ attacker.sendMessage(mcLocale.getString("Combat.TargetDazed"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Check for arrow retrieval.
|
|
|
|
+ *
|
|
|
|
+ * @param entity The entity hit by the arrows
|
|
|
|
+ * @param plugin mcMMO plugin instance
|
|
|
|
+ */
|
|
|
|
+ public static void arrowRetrievalCheck(Entity entity, mcMMO plugin) {
|
|
|
|
+ if (plugin.misc.arrowTracker.containsKey(entity)) {
|
|
|
|
+ m.mcDropItems(entity.getLocation(), new ItemStack(Material.ARROW), plugin.misc.arrowTracker.get(entity));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ plugin.misc.arrowTracker.remove(entity);
|
|
}
|
|
}
|
|
}
|
|
}
|