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);
}
}
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;
}
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;
}
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)");
}
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;
}
Aggregations