package com.laytonsmith.abstraction.bukkit.blocks; import com.laytonsmith.abstraction.MCEntity; import com.laytonsmith.abstraction.MCProjectile; import com.laytonsmith.PureUtilities.Vector3D; import com.laytonsmith.abstraction.blocks.MCBlock; import com.laytonsmith.abstraction.blocks.MCBlockProjectileSource; import com.laytonsmith.abstraction.bukkit.BukkitConvertor; import com.laytonsmith.abstraction.enums.MCProjectileType; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Projectile; import org.bukkit.projectiles.BlockProjectileSource; import org.bukkit.util.Vector; /** * * @author jb_aero */ public class BukkitMCBlockProjectileSource implements MCBlockProjectileSource { BlockProjectileSource bps; public BukkitMCBlockProjectileSource(BlockProjectileSource source) { bps = source; } @Override public MCProjectile launchProjectile(MCProjectileType projectile) { EntityType et = EntityType.valueOf(projectile.name()); Class<? extends Entity> c = et.getEntityClass(); Projectile proj = bps.launchProjectile(c.asSubclass(Projectile.class)); MCEntity e = BukkitConvertor.BukkitGetCorrectEntity(proj); if (e instanceof MCProjectile) { return (MCProjectile) e; } else { return null; } } @Override public MCProjectile launchProjectile(MCProjectileType projectile, Vector3D init) { EntityType et = EntityType.valueOf(projectile.name()); Class<? extends Entity> c = et.getEntityClass(); Vector vector = new Vector(init.X(), init.Y(), init.Z()); Projectile proj = bps.launchProjectile(c.asSubclass(Projectile.class), vector); MCEntity e = BukkitConvertor.BukkitGetCorrectEntity(proj); if (e instanceof MCProjectile) { return (MCProjectile) e; } else { return null; } } @Override public MCBlock getBlock() { return new BukkitMCBlock(bps.getBlock()); } @Override public Object getHandle() { return bps; } }