[Bleeding] Implement ProjectileSource API. Addresses BUKKIT-1038, BUKKIT-1156
By: t00thpick1 <t00thpick1dirko@gmail.com>
This commit is contained in:
@@ -7,6 +7,7 @@ import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
public class CraftArrow extends AbstractProjectile implements Arrow {
|
||||
|
||||
@@ -14,20 +15,6 @@ public class CraftArrow extends AbstractProjectile implements Arrow {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
public LivingEntity getShooter() {
|
||||
if (getHandle().shooter != null) {
|
||||
return (LivingEntity) getHandle().shooter.getBukkitEntity();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setShooter(LivingEntity shooter) {
|
||||
if (shooter instanceof CraftLivingEntity) {
|
||||
getHandle().shooter = ((CraftLivingEntity) shooter).getHandle();
|
||||
}
|
||||
}
|
||||
|
||||
public void setKnockbackStrength(int knockbackStrength) {
|
||||
Validate.isTrue(knockbackStrength >= 0, "Knockback cannot be negative");
|
||||
getHandle().a(knockbackStrength);
|
||||
@@ -45,6 +32,19 @@ public class CraftArrow extends AbstractProjectile implements Arrow {
|
||||
getHandle().a(critical);
|
||||
}
|
||||
|
||||
public ProjectileSource getShooter() {
|
||||
return getHandle().projectileSource;
|
||||
}
|
||||
|
||||
public void setShooter(ProjectileSource shooter) {
|
||||
if (shooter instanceof LivingEntity) {
|
||||
getHandle().shooter = ((CraftLivingEntity) shooter).getHandle();
|
||||
} else {
|
||||
getHandle().shooter = null;
|
||||
}
|
||||
getHandle().projectileSource = shooter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityArrow getHandle() {
|
||||
return (EntityArrow) entity;
|
||||
@@ -58,4 +58,17 @@ public class CraftArrow extends AbstractProjectile implements Arrow {
|
||||
public EntityType getType() {
|
||||
return EntityType.ARROW;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public LivingEntity _INVALID_getShooter() {
|
||||
if (getHandle().shooter == null) {
|
||||
return null;
|
||||
}
|
||||
return (LivingEntity) getHandle().shooter.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void _INVALID_setShooter(LivingEntity shooter) {
|
||||
getHandle().shooter = ((CraftLivingEntity) shooter).getHandle();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Fireball;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class CraftFireball extends AbstractProjectile implements Fireball {
|
||||
@@ -30,18 +31,17 @@ public class CraftFireball extends AbstractProjectile implements Fireball {
|
||||
getHandle().bukkitYield = yield;
|
||||
}
|
||||
|
||||
public LivingEntity getShooter() {
|
||||
if (getHandle().shooter != null) {
|
||||
return (LivingEntity) getHandle().shooter.getBukkitEntity();
|
||||
}
|
||||
|
||||
return null;
|
||||
public ProjectileSource getShooter() {
|
||||
return getHandle().projectileSource;
|
||||
}
|
||||
|
||||
public void setShooter(LivingEntity shooter) {
|
||||
public void setShooter(ProjectileSource shooter) {
|
||||
if (shooter instanceof CraftLivingEntity) {
|
||||
getHandle().shooter = (EntityLiving) ((CraftLivingEntity) shooter).entity;
|
||||
getHandle().shooter = ((CraftLivingEntity) shooter).getHandle();
|
||||
} else {
|
||||
getHandle().shooter = null;
|
||||
}
|
||||
getHandle().projectileSource = shooter;
|
||||
}
|
||||
|
||||
public Vector getDirection() {
|
||||
@@ -65,4 +65,17 @@ public class CraftFireball extends AbstractProjectile implements Fireball {
|
||||
public EntityType getType() {
|
||||
return EntityType.UNKNOWN;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void _INVALID_setShooter(LivingEntity shooter) {
|
||||
setShooter(shooter);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public LivingEntity _INVALID_getShooter() {
|
||||
if (getHandle().shooter != null) {
|
||||
return (LivingEntity) getHandle().shooter.getBukkitEntity();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Fish;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
public class CraftFish extends AbstractProjectile implements Fish {
|
||||
private double biteChance = -1;
|
||||
@@ -17,7 +18,7 @@ public class CraftFish extends AbstractProjectile implements Fish {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
public LivingEntity getShooter() {
|
||||
public ProjectileSource getShooter() {
|
||||
if (getHandle().owner != null) {
|
||||
return getHandle().owner.getBukkitEntity();
|
||||
}
|
||||
@@ -25,7 +26,7 @@ public class CraftFish extends AbstractProjectile implements Fish {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setShooter(LivingEntity shooter) {
|
||||
public void setShooter(ProjectileSource shooter) {
|
||||
if (shooter instanceof CraftHumanEntity) {
|
||||
getHandle().owner = (EntityHuman) ((CraftHumanEntity) shooter).entity;
|
||||
}
|
||||
@@ -61,4 +62,14 @@ public class CraftFish extends AbstractProjectile implements Fish {
|
||||
Validate.isTrue(chance >= 0 && chance <= 1, "The bite chance must be between 0 and 1.");
|
||||
this.biteChance = chance;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public LivingEntity _INVALID_getShooter() {
|
||||
return (LivingEntity) getShooter();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void _INVALID_setShooter(LivingEntity shooter) {
|
||||
setShooter(shooter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import net.minecraft.server.EntityEnderDragon;
|
||||
import net.minecraft.server.EntityEnderPearl;
|
||||
import net.minecraft.server.EntityFishingHook;
|
||||
import net.minecraft.server.EntityHuman;
|
||||
import net.minecraft.server.EntityFireball;
|
||||
import net.minecraft.server.EntityInsentient;
|
||||
import net.minecraft.server.EntityLargeFireball;
|
||||
import net.minecraft.server.EntityLiving;
|
||||
@@ -293,8 +294,12 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
return effects;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Projectile> T launchProjectile(Class<? extends T> projectile) {
|
||||
return launchProjectile(projectile, null);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Projectile> T launchProjectile(Class<? extends T> projectile, Vector velocity) {
|
||||
net.minecraft.server.World world = ((CraftWorld) getWorld()).getHandle();
|
||||
net.minecraft.server.Entity launch = null;
|
||||
|
||||
@@ -324,11 +329,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
launch = new EntityLargeFireball(world, getHandle(), direction.getX(), direction.getY(), direction.getZ());
|
||||
}
|
||||
|
||||
((EntityFireball) launch).projectileSource = this;
|
||||
launch.setPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
|
||||
}
|
||||
|
||||
Validate.notNull(launch, "Projectile not supported");
|
||||
|
||||
if (velocity != null) {
|
||||
((T) launch.getBukkitEntity()).setVelocity(velocity);
|
||||
}
|
||||
|
||||
world.addEntity(launch);
|
||||
return (T) launch.getBukkitEntity();
|
||||
}
|
||||
|
||||
@@ -2,30 +2,32 @@ package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import net.minecraft.server.EntityLiving;
|
||||
import net.minecraft.server.EntityProjectile;
|
||||
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
public abstract class CraftProjectile extends AbstractProjectile implements Projectile {
|
||||
public CraftProjectile(CraftServer server, net.minecraft.server.Entity entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
public LivingEntity getShooter() {
|
||||
if (getHandle().getShooter() != null) {
|
||||
return (LivingEntity) getHandle().getShooter().getBukkitEntity();
|
||||
}
|
||||
|
||||
return null;
|
||||
public ProjectileSource getShooter() {
|
||||
return getHandle().projectileSource;
|
||||
}
|
||||
|
||||
public void setShooter(LivingEntity shooter) {
|
||||
public void setShooter(ProjectileSource shooter) {
|
||||
if (shooter instanceof CraftLivingEntity) {
|
||||
getHandle().shooter = (EntityLiving) ((CraftLivingEntity) shooter).entity;
|
||||
if (shooter instanceof CraftHumanEntity) {
|
||||
getHandle().shooterName = ((CraftHumanEntity) shooter).getName();
|
||||
}
|
||||
} else {
|
||||
getHandle().shooter = null;
|
||||
getHandle().shooterName = null;
|
||||
}
|
||||
getHandle().projectileSource = shooter;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,4 +39,24 @@ public abstract class CraftProjectile extends AbstractProjectile implements Proj
|
||||
public String toString() {
|
||||
return "CraftProjectile";
|
||||
}
|
||||
|
||||
|
||||
@Deprecated
|
||||
public LivingEntity _INVALID_getShooter() {
|
||||
if (getHandle().shooter == null) {
|
||||
return null;
|
||||
}
|
||||
return (LivingEntity) getHandle().shooter.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void _INVALID_setShooter(LivingEntity shooter) {
|
||||
if (shooter == null) {
|
||||
return;
|
||||
}
|
||||
getHandle().shooter = ((CraftLivingEntity) shooter).getHandle();
|
||||
if (shooter instanceof CraftHumanEntity) {
|
||||
getHandle().shooterName = ((CraftHumanEntity) shooter).getName();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user