Search in sources :

Example 1 with RideableMinecart

use of org.bukkit.entity.minecart.RideableMinecart in project BentoBox by BentoBoxWorld.

the class EntityInteractListener method onPlayerInteractEntity.

@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
    Player p = e.getPlayer();
    Location l = e.getRightClicked().getLocation();
    if (e.getRightClicked() instanceof Vehicle) {
        // Animal riding
        if (e.getRightClicked() instanceof Animals) {
            checkIsland(e, p, l, Flags.RIDING);
        } else // Minecart riding
        if (e.getRightClicked() instanceof RideableMinecart) {
            checkIsland(e, p, l, Flags.MINECART);
        } else // Boat riding
        if (e.getRightClicked() instanceof Boat) {
            checkIsland(e, p, l, Flags.BOAT);
        }
    } else // Villager trading
    if (e.getRightClicked() instanceof Villager || e.getRightClicked() instanceof WanderingTrader) {
        // Check naming and check trading
        checkIsland(e, p, l, Flags.TRADING);
        if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.NAME_TAG)) {
            checkIsland(e, p, l, Flags.NAME_TAG);
        }
    } else // Name tags
    if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.NAME_TAG)) {
        checkIsland(e, p, l, Flags.NAME_TAG);
    }
}
Also used : Vehicle(org.bukkit.entity.Vehicle) Player(org.bukkit.entity.Player) Animals(org.bukkit.entity.Animals) Villager(org.bukkit.entity.Villager) WanderingTrader(org.bukkit.entity.WanderingTrader) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) Location(org.bukkit.Location) Boat(org.bukkit.entity.Boat) EventHandler(org.bukkit.event.EventHandler)

Example 2 with RideableMinecart

use of org.bukkit.entity.minecart.RideableMinecart in project MyMaid2 by jaoafa.

the class Cmd_Ck method RUNTypeNearALL.

/**
 * 近く(※1)のトロッコに全てに対し、トロッコに誰も(Mob含む)乗っていなかったら削除。
 */
private void RUNTypeNearALL(CommandSender sender, Command cmd, String commandLabel, String[] args, double MinecartDistance, boolean MobKillFlag) {
    // 実行者の座標
    Location loc = getSenderLocation(sender);
    if (loc == null) {
        SendMessage(sender, cmd, "現在地座標が取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者のワールドのエンティティを取得
    List<Entity> entitys = getSenderWorldEntity(sender);
    if (entitys == null) {
        SendMessage(sender, cmd, "ワールドのエンティティが取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者に近いトロッコすべてを取得
    List<Minecart> minecarts = new ArrayList<>();
    for (Iterator<Entity> i = entitys.iterator(); i.hasNext(); ) {
        Entity entity = i.next();
        if (!(entity instanceof RideableMinecart)) {
            // Minecartじゃなかったら次へ
            continue;
        }
        Minecart cart = (Minecart) entity;
        Location entityloc = entity.getLocation();
        if (!entityloc.getWorld().getUID().equals(loc.getWorld().getUID())) {
            // ありえないと思う(取得時にワールド指定してるから)けど、ワールド違ったら次へ
            continue;
        }
        // 距離を計算
        double dist = loc.distance(loc);
        if (dist >= MinecartDistance) {
            // トロッコへの距離がMinecartDistanceブロックよりも遠かったら次へ
            continue;
        }
        minecarts.add(cart);
    }
    // トロッコ取得終了
    // 削除したトロッコ数
    int removeCartCount = 0;
    // チェックしたトロッコ数
    int checkCartCount = 0;
    // トロッコチェック
    for (Minecart cart : minecarts) {
        // チェックするのでチェックトロッコ数増加
        checkCartCount++;
        // トロッコに一番近いプレイヤーを取得
        double player_closest = Double.MAX_VALUE;
        Player player = null;
        for (Player i : Bukkit.getOnlinePlayers()) {
            if (!i.getWorld().getUID().equals(loc.getWorld().getUID())) {
                continue;
            }
            // トロッコとプレイヤーの距離
            double dist = i.getLocation().distance(cart.getLocation());
            if (player_closest == Double.MAX_VALUE || dist < player_closest) {
                player_closest = dist;
                player = i;
            }
        }
        // 近くのプレイヤーが居なかったら次へ
        if (player == null)
            continue;
        // 誰か乗っていたら次へ
        if (!cart.getPassengers().isEmpty())
            continue;
        // Mobが乗っていてもスキップするので、Mobの削除は無視
        cart.remove();
        // 削除したので削除トロッコ数増加
        removeCartCount++;
    }
    SendMessage(sender, cmd, "トロッコを" + removeCartCount + " / " + checkCartCount + "個削除しました。");
    return;
}
Also used : Entity(org.bukkit.entity.Entity) Player(org.bukkit.entity.Player) Minecart(org.bukkit.entity.Minecart) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) ArrayList(java.util.ArrayList) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) Location(org.bukkit.Location)

Example 3 with RideableMinecart

use of org.bukkit.entity.minecart.RideableMinecart in project MyMaid2 by jaoafa.

the class Cmd_Ck method RUNTypeALL.

/**
 *  誰か乗っている・乗っていないに関わらず近く(※1)のトロッコを削除。危険
 */
private void RUNTypeALL(CommandSender sender, Command cmd, String commandLabel, String[] args, double MinecartDistance, boolean MobKillFlag) {
    // 実行者の座標
    Location loc = getSenderLocation(sender);
    if (loc == null) {
        SendMessage(sender, cmd, "現在地座標が取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者のワールドのエンティティを取得
    List<Entity> entitys = getSenderWorldEntity(sender);
    if (entitys == null) {
        SendMessage(sender, cmd, "ワールドのエンティティが取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者に近いトロッコすべてを取得
    List<Minecart> minecarts = new ArrayList<>();
    for (Iterator<Entity> i = entitys.iterator(); i.hasNext(); ) {
        Entity entity = i.next();
        if (!(entity instanceof RideableMinecart)) {
            // Minecartじゃなかったら次へ
            continue;
        }
        Minecart cart = (Minecart) entity;
        Location entityloc = entity.getLocation();
        if (!entityloc.getWorld().getUID().equals(loc.getWorld().getUID())) {
            // ありえないと思う(取得時にワールド指定してるから)けど、ワールド違ったら次へ
            continue;
        }
        // 距離を計算
        double dist = loc.distance(loc);
        if (dist >= MinecartDistance) {
            // トロッコへの距離がMinecartDistanceブロックよりも遠かったら次へ
            continue;
        }
        minecarts.add(cart);
    }
    // トロッコ取得終了
    // 削除したトロッコ数
    int removeCartCount = 0;
    // トロッコチェック
    for (Minecart cart : minecarts) {
        // Mobをキルする必要があるならプレイヤー以外をキルする
        if (MobKillFlag) {
            for (Entity passenger : cart.getPassengers()) {
                if (passenger.getType() == EntityType.PLAYER)
                    continue;
                // キル(削除)
                passenger.remove();
            }
        }
        cart.remove();
        // 削除したので削除トロッコ数増加
        removeCartCount++;
    }
    SendMessage(sender, cmd, "トロッコを" + removeCartCount + "個削除しました。");
    return;
}
Also used : Entity(org.bukkit.entity.Entity) Minecart(org.bukkit.entity.Minecart) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) ArrayList(java.util.ArrayList) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) Location(org.bukkit.Location)

Example 4 with RideableMinecart

use of org.bukkit.entity.minecart.RideableMinecart in project MyMaid2 by jaoafa.

the class Cmd_Ck method RUNTypeFalse.

/**
 * 一番近いプレイヤーが、一番近いトロッコに乗っていなかったら削除。(デフォルト)
 */
private void RUNTypeFalse(CommandSender sender, Command cmd, String commandLabel, String[] args, double MinecartDistance, boolean MobKillFlag) {
    // 実行者の座標
    Location loc = getSenderLocation(sender);
    if (loc == null) {
        SendMessage(sender, cmd, "現在地座標が取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者のワールドのエンティティを取得
    List<Entity> entitys = getSenderWorldEntity(sender);
    if (entitys == null) {
        SendMessage(sender, cmd, "ワールドのエンティティが取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者に一番近いトロッコを取得
    // トロッコ
    Minecart minecart = null;
    // 距離
    double cart_closest = Double.MAX_VALUE;
    for (Iterator<Entity> i = entitys.iterator(); i.hasNext(); ) {
        Entity entity = i.next();
        if (!(entity instanceof RideableMinecart)) {
            // Minecartじゃなかったら次へ
            continue;
        }
        Minecart cart = (Minecart) entity;
        Location entityloc = entity.getLocation();
        if (!entityloc.getWorld().getUID().equals(loc.getWorld().getUID())) {
            // ありえないと思う(取得時にワールド指定してるから)けど、ワールド違ったら次へ
            continue;
        }
        // 距離を計算
        double dist = loc.distance(loc);
        // Doubleの最大値か、すでに入力されている距離よりも近ければ代入
        if ((cart_closest == Double.MAX_VALUE || dist < cart_closest)) {
            cart_closest = dist;
            minecart = cart;
        }
    }
    if (cart_closest >= MinecartDistance) {
        // トロッコへの距離がMinecartDistanceブロックよりも遠かったら処理を終了
        SendMessage(sender, cmd, "トロッコへの距離が" + MinecartDistance + "ブロック以上あった為処理を終了します。(INFO: " + cart_closest + "Block)");
        return;
    }
    if (minecart == null) {
        SendMessage(sender, cmd, "トロッコが見つかりませんでした。");
        return;
    }
    // トロッコに一番近いプレイヤーを取得
    double player_closest = Double.MAX_VALUE;
    Player player = null;
    for (Player i : Bukkit.getOnlinePlayers()) {
        if (!i.getWorld().getUID().equals(loc.getWorld().getUID())) {
            continue;
        }
        // トロッコとプレイヤーの距離
        double dist = i.getLocation().distance(minecart.getLocation());
        if (player_closest == Double.MAX_VALUE || dist < player_closest) {
            player_closest = dist;
            player = i;
        }
    }
    if (player == null) {
        // プレイヤーが取得できなかった
        SendMessage(sender, cmd, "近くのプレイヤーが取得できませんでした。");
        return;
    }
    // トロッコ判定
    if (minecart.getPassengers().isEmpty()) {
        // 誰も乗ってない
        minecart.remove();
        SendMessage(sender, cmd, "トロッコ「" + minecart.getName() + "(UUID:" + minecart.getUniqueId() + ")」を削除しました。(DEBUG: 1)");
        return;
    }
    // トロッコに乗っているのは一番近いプレイヤーか?
    boolean minecartPlayerFlag = false;
    for (Entity passenger : minecart.getPassengers()) {
        if (!passenger.getUniqueId().equals(player.getUniqueId())) {
            continue;
        }
        minecartPlayerFlag = true;
        break;
    }
    if (!minecartPlayerFlag) {
        // 消すべきトロッコがない
        SendMessage(sender, cmd, "削除できるトロッコはありませんでした。");
        return;
    }
    // Mobをキルする必要があるならプレイヤー以外をキルする
    if (MobKillFlag) {
        for (Entity passenger : minecart.getPassengers()) {
            if (passenger.getType() == EntityType.PLAYER)
                continue;
            // キル(削除)
            passenger.remove();
        }
    }
    minecart.remove();
    SendMessage(sender, cmd, "トロッコ「" + minecart.getName() + "(UUID:" + minecart.getUniqueId() + ")」を削除しました。(DEBUG: 2)");
}
Also used : Entity(org.bukkit.entity.Entity) Player(org.bukkit.entity.Player) Minecart(org.bukkit.entity.Minecart) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) Location(org.bukkit.Location)

Example 5 with RideableMinecart

use of org.bukkit.entity.minecart.RideableMinecart in project MyMaid2 by jaoafa.

the class Cmd_Ck method RUNTypeNearCheck.

/**
 * 近く(※1)のトロッコ全てに対し、そのトロッコに一番近いプレイヤーが乗っているかを判定して乗っていなければ削除。
 */
private void RUNTypeNearCheck(CommandSender sender, Command cmd, String commandLabel, String[] args, double MinecartDistance, boolean MobKillFlag) {
    // 実行者の座標
    Location loc = getSenderLocation(sender);
    if (loc == null) {
        SendMessage(sender, cmd, "現在地座標が取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者のワールドのエンティティを取得
    List<Entity> entitys = getSenderWorldEntity(sender);
    if (entitys == null) {
        SendMessage(sender, cmd, "ワールドのエンティティが取得できませんでした。許可されていない実行者である場合があります。");
        return;
    }
    // 実行者に近いトロッコすべてを取得
    List<Minecart> minecarts = new ArrayList<>();
    for (Iterator<Entity> i = entitys.iterator(); i.hasNext(); ) {
        Entity entity = i.next();
        if (!(entity instanceof RideableMinecart)) {
            // Minecartじゃなかったら次へ
            continue;
        }
        Minecart cart = (Minecart) entity;
        Location entityloc = entity.getLocation();
        if (!entityloc.getWorld().getUID().equals(loc.getWorld().getUID())) {
            // ありえないと思う(取得時にワールド指定してるから)けど、ワールド違ったら次へ
            continue;
        }
        // 距離を計算
        double dist = loc.distance(loc);
        if (dist >= MinecartDistance) {
            // トロッコへの距離がMinecartDistanceブロックよりも遠かったら次へ
            continue;
        }
        minecarts.add(cart);
    }
    // トロッコ取得終了
    // 削除したトロッコ数
    int removeCartCount = 0;
    // チェックしたトロッコ数
    int checkCartCount = 0;
    // トロッコチェック
    for (Minecart cart : minecarts) {
        // チェックするのでチェックトロッコ数増加
        checkCartCount++;
        // トロッコに一番近いプレイヤーを取得
        double player_closest = Double.MAX_VALUE;
        Player player = null;
        for (Player i : Bukkit.getOnlinePlayers()) {
            if (!i.getWorld().getUID().equals(loc.getWorld().getUID())) {
                continue;
            }
            // トロッコとプレイヤーの距離
            double dist = i.getLocation().distance(cart.getLocation());
            if (player_closest == Double.MAX_VALUE || dist < player_closest) {
                player_closest = dist;
                player = i;
            }
        }
        // 近くのプレイヤーが居なかったら次へ
        if (player == null)
            continue;
        // トロッコに乗っているのは一番近いプレイヤーか?
        boolean minecartPlayerFlag = false;
        for (Entity passenger : cart.getPassengers()) {
            if (!passenger.getUniqueId().equals(player.getUniqueId())) {
                continue;
            }
            minecartPlayerFlag = true;
            break;
        }
        if (!minecartPlayerFlag) {
            // 消すべきトロッコがない
            continue;
        }
        // Mobをキルする必要があるならプレイヤー以外をキルする
        if (MobKillFlag) {
            for (Entity passenger : cart.getPassengers()) {
                if (passenger.getType() == EntityType.PLAYER)
                    continue;
                // キル(削除)
                passenger.remove();
            }
        }
        cart.remove();
        // 削除したので削除トロッコ数増加
        removeCartCount++;
    }
    SendMessage(sender, cmd, "トロッコを" + removeCartCount + " / " + checkCartCount + "個削除しました。");
    return;
}
Also used : Entity(org.bukkit.entity.Entity) Player(org.bukkit.entity.Player) Minecart(org.bukkit.entity.Minecart) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) ArrayList(java.util.ArrayList) RideableMinecart(org.bukkit.entity.minecart.RideableMinecart) Location(org.bukkit.Location)

Aggregations

Location (org.bukkit.Location)5 RideableMinecart (org.bukkit.entity.minecart.RideableMinecart)5 Entity (org.bukkit.entity.Entity)4 Minecart (org.bukkit.entity.Minecart)4 Player (org.bukkit.entity.Player)4 ArrayList (java.util.ArrayList)3 Animals (org.bukkit.entity.Animals)1 Boat (org.bukkit.entity.Boat)1 Vehicle (org.bukkit.entity.Vehicle)1 Villager (org.bukkit.entity.Villager)1 WanderingTrader (org.bukkit.entity.WanderingTrader)1 EventHandler (org.bukkit.event.EventHandler)1