Java 类org.bukkit.entity.ShulkerBullet 实例源码

项目:StarQuestCode    文件:MissileMovement.java   
@SuppressWarnings("deprecation")
public static boolean activateMissile(Block ammoDispenserBlock, Sign s, final Player shooter, String type) {

    int detectionRange = SQSmoothCraft.config.getInt("weapons.heatseeking missile.detection range");
    int cooldown = SQSmoothCraft.config.getInt("weapons.heatseeking missile.cooldown");
    int fuelTime = SQSmoothCraft.config.getInt("weapons.heatseeking missile.fuelTime");

    final ShulkerBullet shulkerBullet = (ShulkerBullet) ammoDispenserBlock.getLocation().getWorld().spawnEntity(MissileDetection.inFrontOfDispenser(s.getBlock()).getLocation(), EntityType.SHULKER_BULLET);

    shulkerBullet.getLocation().setDirection(MissileDetection.getDirectionVector(s.getBlock()));

    shulkerBullet.setVelocity(MissileDetection.getDirectionVector(s.getBlock()).normalize().multiply(2));

    shulkerBullet.setMetadata("damage", new FixedMetadataValue(SQSmoothCraft.getPluginMain(), SQSmoothCraft.config.getInt("weapons.heatseeking missile.damage")));
    shulkerBullet.setMetadata("no_pickup", new FixedMetadataValue(SQSmoothCraft.getPluginMain(), true));
    shulkerBullet.setMetadata("carry_over", new FixedMetadataValue(SQSmoothCraft.getPluginMain(), SQSmoothCraft.config.getBoolean("weapons.heatseeking missile.carry over")));
    shulkerBullet.setMetadata("type", new FixedMetadataValue(SQSmoothCraft.getPluginMain(), type));

    shulkerBullet.setBounce(false);
    shulkerBullet.setShooter(shooter);

    Player target = Missile.getNearestPlayer(shooter);
    shulkerBullet.setTarget(target);

    if (shulkerBullet.getTarget() == null) {
        shulkerBullet.remove();
        shooter.sendMessage(ChatColor.RED + "Could not find any targets in a " + detectionRange + " block range.");
        return false;
    }

    final int updateshulkerBulletScheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(SQSmoothCraft.getPluginMain(), new Runnable() {
        @Override
        public void run() {

            shulkerBullet.setVelocity(shulkerBullet.getVelocity().multiply(2));
            // To make it go faster
        }
    }, 2, 10);

    Bukkit.getScheduler().scheduleSyncDelayedTask(SQSmoothCraft.getPluginMain(), new Runnable() {

        @Override
        public void run() {

            if (!shulkerBullet.isDead()) {
                shooter.sendMessage(ChatColor.RED + "The fuel of your heat seeking missile ran out.");
            }
            shulkerBullet.remove();
            Bukkit.getScheduler().cancelTask(updateshulkerBulletScheduler);
        }

    }, fuelTime * 20);

    Missile.missileCoolDownList.add(shooter);
    final Player cdPlayer = shooter;

    Bukkit.getScheduler().scheduleAsyncDelayedTask(SQSmoothCraft.getPluginMain(), new Runnable() {

        @Override
        public void run() {

            Missile.missileCoolDownList.remove(cdPlayer);

        }

    }, cooldown * 20);
    return true;

}