Browse Source

Changed to have all alt-fire be a projectile. Need to implement on-hit
effects.

GJ 13 years ago
parent
commit
4965cb2b68

+ 26 - 0
src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java

@@ -20,6 +20,7 @@ import org.bukkit.event.entity.EntityExplodeEvent;
 import org.bukkit.event.entity.EntityTameEvent;
 import org.bukkit.event.entity.ExplosionPrimeEvent;
 import org.bukkit.event.entity.FoodLevelChangeEvent;
+import org.bukkit.event.entity.ProjectileHitEvent;
 import org.bukkit.metadata.FixedMetadataValue;
 
 import com.gmail.nossr50.Combat;
@@ -313,4 +314,29 @@ public class mcEntityListener implements Listener {
             Skills.XpCheckSkill(SkillType.TAMING, player);
         }
     }
+
+    /**
+     * Monitor ProjectileHit events.
+     *
+     * @param event The event to monitor
+     */
+    public void onProjectileHit(ProjectileHitEvent event) {
+        if (!event.getEntity().hasMetadata("mcmmoFiredFromStaff")) {
+            return;
+        }
+
+        switch (event.getEntityType()) {
+        case EGG:
+            break;
+
+        case FIREBALL:
+            break;
+
+        case SNOWBALL:
+            break;
+
+        default:
+            break;
+        }
+    }
 }

+ 2 - 2
src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java

@@ -242,7 +242,7 @@ public class mcPlayerListener implements Listener {
             }
 
             /* STAFF CHECKS */
-            Staves.altFire(is.getType(), player);
+            Staves.altFire(is.getType(), player, plugin);
 
             break;
 
@@ -268,7 +268,7 @@ public class mcPlayerListener implements Listener {
             }
 
             /* STAFF CHECKS */
-            Staves.altFire(is.getType(), player);
+            Staves.altFire(is.getType(), player, plugin);
 
             break;
 

+ 20 - 28
src/main/java/com/gmail/nossr50/skills/Staves.java

@@ -1,52 +1,44 @@
 package com.gmail.nossr50.skills;
 
-import org.bukkit.Location;
 import org.bukkit.Material;
-import org.bukkit.entity.ExperienceOrb;
+import org.bukkit.entity.Egg;
 import org.bukkit.entity.Fireball;
 import org.bukkit.entity.Player;
+import org.bukkit.entity.Projectile;
+import org.bukkit.entity.Snowball;
+import org.bukkit.metadata.FixedMetadataValue;
 
-import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
 
 public class Staves {
 
-    public static void altFire(Material type, Player attacker) {
+    /**
+     * Fire a projectile on alt-fire from a staff.
+     *
+     * @param type The type of staff
+     * @param attacker The attacking player
+     * @param plugin mcMMO plugin instance
+     */
+    public static void altFire(Material type, Player attacker, mcMMO plugin) {
+        Projectile projectile = null;
+
         switch (type) {
         case BLAZE_ROD:
-            attacker.launchProjectile(Fireball.class);
+            projectile = attacker.launchProjectile(Fireball.class);
             break;
 
         case BONE:
-            for (Player y : attacker.getWorld().getPlayers()) {
-                if (y != attacker && m.isNear(attacker.getLocation(), y.getLocation(), 10) && y.getLevel() > 0) {
-                    y.setLevel((int) (y.getLevel() * .75));
-                    attacker.sendMessage("You drained your opponent of XP!");
-                    y.sendMessage("You feel some of your power leave you...");
-
-                    for (int i = 0; i <= 100; i++) {
-                        Location dropLocation = y.getLocation();
-                        dropLocation.setX(dropLocation.getX() + (Math.random() * 2));
-                        dropLocation.setZ(dropLocation.getZ() + (Math.random() * 2));
-                        ExperienceOrb orb = y.getWorld().spawn(dropLocation, ExperienceOrb.class);
-                        orb.setExperience((int) (Math.random() * 5));
-                    }
-                }
-            }
+            projectile = attacker.launchProjectile(Snowball.class);
             break;
 
         case STICK:
-            for (Player y : attacker.getWorld().getPlayers()) {
-                if (y != attacker && m.isNear(attacker.getLocation(), y.getLocation(), 10)) {
-                    attacker.sendMessage("You slowed your opponent!");
-                    y.sendMessage("You were suddenly slowed...");
-
-                    y.setVelocity(y.getVelocity().multiply(0.5));
-                }
-            }
+            projectile = attacker.launchProjectile(Egg.class);
             break;
 
         default:
             break;
         }
+
+        projectile.setMetadata("mcmmoFiredFromStaff", new FixedMetadataValue(plugin, true));
     }
 }