Added the concept of a projectile.

By: sunkid <sunkid@iminurnetz.com>
This commit is contained in:
Bukkit/Spigot 2011-06-18 08:09:41 -07:00
parent 2a62ac59bf
commit 31e3c65440
11 changed files with 83 additions and 16 deletions

View file

@ -2,7 +2,5 @@ package org.bukkit.entity;
/**
* Represents an arrow.
*
* @author sk89q
*/
public interface Arrow extends Entity {}
public interface Arrow extends Projectile {}

View file

@ -2,7 +2,5 @@ package org.bukkit.entity;
/**
* Represents an egg.
*
* @author sk89q
*/
public interface Egg extends Entity {}
public interface Egg extends Projectile {}

View file

@ -1,6 +1,24 @@
package org.bukkit.entity;
import org.bukkit.util.Vector;
/**
* Represents a Fireball.
*/
public interface Fireball extends Explosive {}
public interface Fireball extends Projectile, Explosive {
/**
* Fireballs fly straight and do not take setVelocity(...) well.
*
* @param direction
* the direction this fireball is flying toward
*/
public void setDirection(Vector direction);
/**
* Retrieve the direction this fireball is heading toward
*
* @return the direction
*/
public Vector getDirection();
}

View file

@ -2,7 +2,5 @@ package org.bukkit.entity;
/**
* Represents a Fish.
*
* @author Cogito
*/
public interface Fish extends Entity {}
public interface Fish extends Projectile {}

View file

@ -0,0 +1,23 @@
package org.bukkit.entity;
/**
* Represents a shootable entity
*/
public interface Projectile extends Entity {
/**
* Retrieve the shooter of this projectile. The returned value can be null
* for projectiles shot from a {@link Dispenser} for example.
*
* @return the {@link LivingEntity} that shot this projectile
*/
public LivingEntity getShooter();
/**
* Set the shooter of this projectile
*
* @param shooter
* the {@link LivingEntity} that shot this projectile
*/
public void setShooter(LivingEntity shooter);
}

View file

@ -2,7 +2,5 @@ package org.bukkit.entity;
/**
* Implements a snowball.
*
* @author sk89q
*/
public interface Snowball extends Entity {}
public interface Snowball extends Projectile {}

View file

@ -2,6 +2,8 @@ package org.bukkit.event;
import java.io.Serializable;
import org.bukkit.entity.Projectile;
/**
* Represents an event
*/
@ -618,6 +620,12 @@ public abstract class Event implements Serializable {
* @see org.bukkit.event.entity.EntityTameEvent
*/
ENTITY_TAME (Category.LIVING_ENTITY),
/**
* Called when a {@link Projectile} hits something
*
* @see org.bukkit.event.entity.ProjectileHitEvent
*/
PROJECTILE_HIT (Category.ENTITY),
/**
* Called when a LivingEntity is regains health

View file

@ -3,13 +3,18 @@ package org.bukkit.event.entity;
import java.util.Random;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Projectile;
public class EntityDamageByProjectileEvent extends EntityDamageByEntityEvent {
private Entity projectile;
private Projectile projectile;
private boolean bounce;
public EntityDamageByProjectileEvent(Entity damager, Entity damagee, Entity projectile, DamageCause cause, int damage) {
public EntityDamageByProjectileEvent(Entity damagee, Projectile projectile, DamageCause cause, int damage) {
this(projectile.getShooter(), damagee, projectile, cause, damage);
}
public EntityDamageByProjectileEvent(Entity damager, Entity damagee, Projectile projectile, DamageCause cause, int damage) {
super(damager, damagee, cause, damage);
this.projectile = projectile;
Random random = new Random();
@ -19,9 +24,10 @@ public class EntityDamageByProjectileEvent extends EntityDamageByEntityEvent {
/**
* The projectile used to cause the event
*
* @return the projectile
*/
public Entity getProjectile() {
public Projectile getProjectile() {
return projectile;
}

View file

@ -41,4 +41,6 @@ public class EntityListener implements Listener {
public void onEntityTame(EntityTameEvent event) {}
public void onEntityRegainHealth(EntityRegainHealthEvent event) {}
public void onProjectileHit(ProjectileHitEvent event) {}
}

View file

@ -0,0 +1,11 @@
package org.bukkit.event.entity;
import org.bukkit.entity.Projectile;
public class ProjectileHitEvent extends EntityEvent {
public ProjectileHitEvent(Projectile projectile) {
super(Type.PROJECTILE_HIT, projectile);
}
}

View file

@ -719,6 +719,13 @@ public final class JavaPluginLoader implements PluginLoader {
}
};
case PROJECTILE_HIT:
return new EventExecutor() {
public void execute(Listener listener, Event event) {
((EntityListener) listener).onProjectileHit((ProjectileHitEvent) event);
}
};
// Vehicle Events
case VEHICLE_CREATE:
return new EventExecutor() {