Search in sources :

Example 21 with BlockCommandSender

use of org.bukkit.command.BlockCommandSender in project MyMaid2 by jaoafa.

the class Cmd_jao method onCommand.

@SuppressWarnings("deprecation")
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (args.length >= 1 && args[0].equalsIgnoreCase("help")) {
        SendUsageMessage(sender, cmd);
        return true;
    }
    if (args.length == 1) {
        OfflinePlayer offplayer = Bukkit.getOfflinePlayer(args[0]);
        try {
            Pointjao Pjao = new Pointjao(offplayer);
            int now = Pjao.get();
            SendMessage(sender, cmd, "現在" + offplayer.getName() + "が所持しているポイント数は" + now + "ポイントです。");
            return true;
        } catch (UnsupportedOperationException e) {
            SendMessage(sender, cmd, "jaoポイントデータが存在しません。");
            return true;
        } catch (NullPointerException e) {
            SendMessage(sender, cmd, "プレイヤーが見つかりません。");
            return true;
        } catch (ClassNotFoundException | SQLException e) {
            BugReporter(e);
            SendMessage(sender, cmd, "操作に失敗しました。");
            SendMessage(sender, cmd, "詳しくはサーバコンソールをご確認ください");
            SendMessage(sender, cmd, "再度実行しなおすと動作するかもしれません。");
            return true;
        }
    } else if (args.length >= 4) {
        // /jao use player point reason
        if (args[0].equalsIgnoreCase("add")) {
            // /jao add player point reason
            OfflinePlayer offplayer = Bukkit.getOfflinePlayer(args[1]);
            if (offplayer == null) {
                SendMessage(sender, cmd, "プレイヤーが見つかりません。");
                return true;
            }
            int point;
            try {
                point = Integer.parseInt(args[2]);
            } catch (NumberFormatException e) {
                SendMessage(sender, cmd, "ポイントには数値を指定してください。");
                return true;
            }
            if (point <= 0) {
                SendMessage(sender, cmd, "ポイントは1以上を指定してください。");
                return true;
            }
            String reason = "";
            int c = 3;
            while (args.length > c) {
                reason += args[c];
                if (args.length != (c + 1)) {
                    reason += " ";
                }
                c++;
            }
            if (sender instanceof Player) {
                reason += " (Player: " + sender.getName() + ")";
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender bcs = (BlockCommandSender) sender;
                Block block = bcs.getBlock();
                reason += " (CmdBlock: " + block.getX() + " " + block.getY() + " " + block.getZ() + ")";
            } else if (sender instanceof CommandMinecart) {
                CommandMinecart cm = (CommandMinecart) sender;
                Location loc = cm.getLocation();
                reason += " (CmdCart: " + loc.getX() + " " + loc.getY() + " " + loc.getZ() + ")";
            } else if (sender instanceof RemoteConsoleCommandSender) {
                reason += " (Rcon)";
            } else if (sender instanceof ConsoleCommandSender) {
                reason += " (Console)";
            } else if (sender instanceof ProxiedCommandSender) {
                ProxiedCommandSender pcs = (ProxiedCommandSender) sender;
                // コマンドの呼び出しに使用されているCommandSenderを返します。(コマンド実行させられているCommandSender?)
                CommandSender Callee_sender = pcs.getCallee();
                // このプロキシされたコマンドをトリガしたCommandSenderを返します。(executeコマンドを実行したCommandSender?)
                CommandSender Caller_sender = pcs.getCaller();
                reason += " (Execute: " + Callee_sender.getName() + " [" + Callee_sender + "] => " + Caller_sender.getName() + " [" + Caller_sender + "])";
            } else {
                reason += " (実行元特定不能: " + sender.getName() + "|" + sender.toString() + ")";
            }
            try {
                Pointjao Pjao = new Pointjao(offplayer);
                boolean bool = Pjao.add(point, reason);
                if (bool) {
                    SendMessage(sender, cmd, "プレイヤー「" + offplayer.getName() + "」に" + point + "ポイントを追加しました。");
                } else {
                    SendMessage(sender, cmd, "プレイヤー「" + offplayer.getName() + "」に" + point + "ポイントを追加できませんでした。");
                }
                return true;
            } catch (UnsupportedOperationException e) {
                SendMessage(sender, cmd, "jaoポイントデータが存在しません。");
                return true;
            } catch (NullPointerException e) {
                SendMessage(sender, cmd, "プレイヤーが見つかりません。");
                return true;
            } catch (ClassNotFoundException | SQLException e) {
                BugReporter(e);
                SendMessage(sender, cmd, "操作に失敗しました。");
                SendMessage(sender, cmd, "詳しくはサーバコンソールをご確認ください");
                SendMessage(sender, cmd, "再度実行しなおすと動作するかもしれません。");
                return true;
            }
        } else if (args[0].equalsIgnoreCase("use")) {
            // /jao use player point reason
            OfflinePlayer offplayer = Bukkit.getOfflinePlayer(args[1]);
            if (offplayer == null) {
                SendMessage(sender, cmd, "プレイヤーが見つかりません。");
                return true;
            }
            int point;
            try {
                point = Integer.parseInt(args[2]);
            } catch (NumberFormatException e) {
                SendMessage(sender, cmd, "ポイントには数値を指定してください。");
                return true;
            }
            if (point <= 0) {
                SendMessage(sender, cmd, "ポイントは1以上を指定してください。");
                return true;
            }
            String reason = "";
            int c = 3;
            while (args.length > c) {
                reason += args[c];
                if (args.length != (c + 1)) {
                    reason += " ";
                }
                c++;
            }
            if (sender instanceof Player) {
                reason += " (Player: " + sender.getName() + ")";
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender bcs = (BlockCommandSender) sender;
                Block block = bcs.getBlock();
                reason += " (CmdBlock: " + block.getX() + " " + block.getY() + " " + block.getZ() + ")";
            } else if (sender instanceof CommandMinecart) {
                CommandMinecart cm = (CommandMinecart) sender;
                Location loc = cm.getLocation();
                reason += " (CmdCart: " + loc.getX() + " " + loc.getY() + " " + loc.getZ() + ")";
            } else if (sender instanceof RemoteConsoleCommandSender) {
                reason += " (Rcon)";
            } else if (sender instanceof ConsoleCommandSender) {
                reason += " (Console)";
            } else if (sender instanceof ProxiedCommandSender) {
                ProxiedCommandSender pcs = (ProxiedCommandSender) sender;
                // コマンドの呼び出しに使用されているCommandSenderを返します。(コマンド実行させられているCommandSender?)
                CommandSender Callee_sender = pcs.getCallee();
                // このプロキシされたコマンドをトリガしたCommandSenderを返します。(executeコマンドを実行したCommandSender?)
                CommandSender Caller_sender = pcs.getCaller();
                reason += " (Execute: " + Callee_sender.getName() + " [" + Callee_sender + "] => " + Caller_sender.getName() + " [" + Caller_sender + "])";
            } else {
                reason += " (実行元特定不能: " + sender.getName() + "|" + sender.toString() + ")";
            }
            try {
                Pointjao Pjao = new Pointjao(offplayer);
                boolean bool = Pjao.use(point, reason);
                if (bool) {
                    SendMessage(sender, cmd, "プレイヤー「" + offplayer.getName() + "」から" + point + "ポイントを減算しました。");
                } else {
                    SendMessage(sender, cmd, "プレイヤー「" + offplayer.getName() + "」から" + point + "ポイントを減算できませんでした。");
                }
                return true;
            } catch (UnsupportedOperationException e) {
                SendMessage(sender, cmd, "jaoポイントデータが存在しません。");
                return true;
            } catch (NullPointerException e) {
                SendMessage(sender, cmd, "プレイヤーが見つかりません。");
                return true;
            } catch (ClassNotFoundException | SQLException e) {
                BugReporter(e);
                SendMessage(sender, cmd, "操作に失敗しました。");
                SendMessage(sender, cmd, "詳しくはサーバコンソールをご確認ください");
                SendMessage(sender, cmd, "再度実行しなおすと動作するかもしれません。");
                return true;
            }
        } else if (args[0].equalsIgnoreCase("pay")) {
            // /jao pay player point reason
            if (!(sender instanceof Player)) {
                SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                return true;
            }
            Player player = (Player) sender;
            OfflinePlayer offplayer = Bukkit.getOfflinePlayer(args[1]);
            if (offplayer == null) {
                SendMessage(sender, cmd, "プレイヤーが見つかりません。");
                return true;
            }
            int point;
            try {
                point = Integer.parseInt(args[2]);
            } catch (NumberFormatException e) {
                SendMessage(sender, cmd, "ポイントには数値を指定してください。");
                return true;
            }
            if (point <= 0) {
                SendMessage(sender, cmd, "ポイントは1以上を指定してください。");
                return true;
            }
            String reason = "";
            int c = 3;
            while (args.length > c) {
                reason += args[c];
                if (args.length != (c + 1)) {
                    reason += " ";
                }
                c++;
            }
            String add_reason = "プレイヤー「" + offplayer.getName() + "」へ「" + reason + "」という理由での支払い。";
            String use_reason = "プレイヤー「" + player.getName() + "」から「" + reason + "」という理由での支払い。";
            try {
                Pointjao playerPjao = new Pointjao(player);
                Pointjao offplayerPjao = new Pointjao(offplayer);
                boolean use_bool = playerPjao.use(point, add_reason);
                if (use_bool) {
                    boolean add_bool = offplayerPjao.add(point, use_reason);
                    if (add_bool) {
                        SendMessage(sender, cmd, "プレイヤー「" + offplayer.getName() + "」に" + point + "ポイントを支払いました。");
                        if (!Achievementjao.getAchievement(player, new AchievementType(23))) {
                            player.sendMessage(AchievementAPI.getPrefix() + "実績の解除中に問題が発生しました。もう一度お試しください。");
                        }
                    } else {
                        SendMessage(sender, cmd, "プレイヤー「" + offplayer.getName() + "」に" + point + "ポイントを支払えませんでした。");
                        playerPjao.add(point, "『" + add_reason + "』の失敗による返却");
                    }
                } else {
                    SendMessage(sender, cmd, "プレイヤー「" + offplayer.getName() + "」から" + point + "ポイントを減算できませんでした。");
                }
                return true;
            } catch (UnsupportedOperationException e) {
                SendMessage(sender, cmd, "jaoポイントデータが存在しません。");
                return true;
            } catch (NullPointerException e) {
                SendMessage(sender, cmd, "プレイヤーが見つかりません。");
                return true;
            } catch (ClassNotFoundException | SQLException e) {
                BugReporter(e);
                SendMessage(sender, cmd, "操作に失敗しました。");
                SendMessage(sender, cmd, "詳しくはサーバコンソールをご確認ください");
                SendMessage(sender, cmd, "再度実行しなおすと動作するかもしれません。");
                return true;
            }
        }
    }
    if (!(sender instanceof Player)) {
        SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
        return true;
    }
    Player player = (Player) sender;
    try {
        Pointjao Pjao = new Pointjao(player);
        int now = Pjao.get();
        SendMessage(sender, cmd, "現在あなたが所持しているポイント数は" + now + "ポイントです。");
        return true;
    } catch (UnsupportedOperationException e) {
        SendMessage(sender, cmd, "jaoポイントデータが存在しません。");
        return true;
    } catch (NullPointerException e) {
        SendMessage(sender, cmd, "プレイヤーが見つかりません。");
        return true;
    } catch (ClassNotFoundException | SQLException e) {
        BugReporter(e);
        SendMessage(sender, cmd, "操作に失敗しました。");
        SendMessage(sender, cmd, "詳しくはサーバコンソールをご確認ください");
        SendMessage(sender, cmd, "再度実行しなおすと動作するかもしれません。");
        return true;
    }
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) RemoteConsoleCommandSender(org.bukkit.command.RemoteConsoleCommandSender) SQLException(java.sql.SQLException) Pointjao(com.jaoafa.MyMaid2.Lib.Pointjao) RemoteConsoleCommandSender(org.bukkit.command.RemoteConsoleCommandSender) ConsoleCommandSender(org.bukkit.command.ConsoleCommandSender) CommandMinecart(org.bukkit.entity.minecart.CommandMinecart) AchievementType(com.jaoafa.jaoSuperAchievement.jaoAchievement.AchievementType) ProxiedCommandSender(org.bukkit.command.ProxiedCommandSender) OfflinePlayer(org.bukkit.OfflinePlayer) Block(org.bukkit.block.Block) CommandSender(org.bukkit.command.CommandSender) RemoteConsoleCommandSender(org.bukkit.command.RemoteConsoleCommandSender) ConsoleCommandSender(org.bukkit.command.ConsoleCommandSender) ProxiedCommandSender(org.bukkit.command.ProxiedCommandSender) BlockCommandSender(org.bukkit.command.BlockCommandSender) BlockCommandSender(org.bukkit.command.BlockCommandSender) Location(org.bukkit.Location)

Example 22 with BlockCommandSender

use of org.bukkit.command.BlockCommandSender in project MyMaid2 by jaoafa.

the class Event_Anti4BYTES method onCommandBlockCall.

@EventHandler
public void onCommandBlockCall(ServerCommandEvent event) {
    if (!(event.getSender() instanceof BlockCommandSender))
        return;
    BlockCommandSender sender = (BlockCommandSender) event.getSender();
    if (sender.getBlock() == null || !(sender.getBlock().getState() instanceof CommandBlock))
        return;
    CommandBlock cmdb = (CommandBlock) sender.getBlock().getState();
    String command = cmdb.getCommand();
    String world = cmdb.getWorld().getName();
    int x = cmdb.getX();
    int y = cmdb.getY();
    int z = cmdb.getZ();
    if (!check4bytechars(command)) {
        return;
    }
    if (sendedCmdb.contains(command)) {
        return;
    }
    Player nearestPlayer = getNearestPlayer(cmdb.getLocation());
    if (nearestPlayer == null) {
        return;
    }
    nearestPlayer.sendMessage("[4BYTESChecker] " + ChatColor.GREEN + "あなたの近くで実行されたコマンドブロック(" + world + " " + x + " " + y + " " + z + ")のコマンド内に絵文字などの4バイト文字が含まれています。Minecraftの仕様上、4バイト文字は表示されません。注意してください。");
    nearestPlayer.sendMessage("[4BYTESChecker] " + ChatColor.GREEN + "また、アイテム名やコマンドなどに4バイト文字列を含まれているとチャンク破損等を起こす可能性があります。出来る限り使用は避けてください。");
    DiscordSend("293856671799967744", "__**[4BYTESChecker]**__ " + "プレイヤー「" + nearestPlayer.getName() + "」の近くで実行されたコマンドブロック(" + world + " " + x + " " + y + " " + z + ")のコマンド内に4バイト文字が含まれていました。\nコマンド: ```" + command + "```\n判定された対象文字列: ```" + check4bytechars_MatchText(command) + "```");
    sendedCmdb.add(command);
}
Also used : Player(org.bukkit.entity.Player) CommandBlock(org.bukkit.block.CommandBlock) BlockCommandSender(org.bukkit.command.BlockCommandSender) EventHandler(org.bukkit.event.EventHandler)

Example 23 with BlockCommandSender

use of org.bukkit.command.BlockCommandSender in project MyMaid2 by jaoafa.

the class Cmd_Lead method onCommand.

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (args.length == 0 || args[0].equalsIgnoreCase("help")) {
        SendUsageMessage(sender, cmd);
        return true;
    }
    if (args.length == 1) {
        if (!(sender instanceof Player)) {
            SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
            return true;
        }
        Player player = (Player) sender;
        if (args[0].equalsIgnoreCase("leave")) {
            if (player.isLeashed()) {
                SendMessage(sender, cmd, "あなたはリードを付けられていません。");
                return true;
            }
            if (player.setLeashHolder(null)) {
                SendMessage(sender, cmd, "リードを外しました。");
            } else {
                SendMessage(sender, cmd, "リードを外せませんでした。");
            }
            return true;
        }
        Player p = Bukkit.getPlayerExact(args[0]);
        if (p != null) {
            Boolean bool = p.setLeashHolder(player);
            if (bool) {
                SendMessage(sender, cmd, "プレイヤー「" + p.getName() + "」にリードをつけました。");
            } else {
                SendMessage(sender, cmd, "プレイヤー「" + p.getName() + "」にリードをつけられませんでした。");
            }
        } else {
            LivingEntity e = null;
            List<Entity> NearEntitys = player.getNearbyEntities(15.0, 15.0, 15.0);
            for (Entity near : NearEntitys) {
                if (near.getType() == EntityType.PLAYER) {
                    continue;
                }
                if (!(near instanceof LivingEntity)) {
                    continue;
                }
                if (near.getName().equalsIgnoreCase(args[0])) {
                    e = (LivingEntity) near;
                    break;
                }
            }
            if (e == null) {
                SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                return true;
            }
            Boolean bool = e.setLeashHolder(player);
            if (bool) {
                SendMessage(sender, cmd, "エンティティ「" + e.getName() + "」にリードをつけました。");
            } else {
                SendMessage(sender, cmd, "エンティティ「" + e.getName() + "」にリードをつけられませんでした。");
            }
        }
        return true;
    } else if (args.length == 2) {
        if (args[0].equalsIgnoreCase("leave")) {
            LivingEntity rider = null;
            if (sender instanceof Player) {
                Player player = (Player) sender;
                List<Entity> WorldEntitys = player.getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    if (!(e instanceof LivingEntity)) {
                        continue;
                    }
                    double distance = e.getLocation().distance(player.getLocation());
                    if (d > distance) {
                        rider = (LivingEntity) e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender cmdb = (BlockCommandSender) sender;
                List<Entity> WorldEntitys = cmdb.getBlock().getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    if (!(e instanceof LivingEntity)) {
                        continue;
                    }
                    double distance = e.getLocation().distance(cmdb.getBlock().getLocation());
                    if (d > distance) {
                        rider = (LivingEntity) e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else {
                SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                return true;
            }
            if (rider.setLeashHolder(null)) {
                SendMessage(sender, cmd, "指定されたプレイヤー・エンティティ「" + rider.getName() + "」のリードを外しました。");
            } else {
                SendMessage(sender, cmd, "指定されたプレイヤー・エンティティ「" + rider.getName() + "」のリードを外しました。");
            }
            return true;
        }
        // 乗せる
        LivingEntity rider = null;
        LivingEntity riding = null;
        // 乗る人
        Player p_rider = Bukkit.getPlayerExact(args[0]);
        // 乗られる人
        Player p_riding = Bukkit.getPlayerExact(args[1]);
        if (p_rider != null) {
            rider = p_rider;
        } else {
            if (sender instanceof Player) {
                Player player = (Player) sender;
                List<Entity> WorldEntitys = player.getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[0])) {
                        continue;
                    }
                    if (!(e instanceof LivingEntity)) {
                        continue;
                    }
                    double distance = e.getLocation().distance(player.getLocation());
                    if (d > distance) {
                        rider = (LivingEntity) e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender cmdb = (BlockCommandSender) sender;
                List<Entity> WorldEntitys = cmdb.getBlock().getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[0])) {
                        continue;
                    }
                    if (!(e instanceof LivingEntity)) {
                        continue;
                    }
                    double distance = e.getLocation().distance(cmdb.getBlock().getLocation());
                    if (d > distance) {
                        rider = (LivingEntity) e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else {
                SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                return true;
            }
        }
        if (p_riding != null) {
            riding = p_riding;
        } else {
            if (sender instanceof Player) {
                Player player = (Player) sender;
                List<Entity> WorldEntitys = player.getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(player.getLocation());
                    if (d > distance) {
                        riding = (LivingEntity) e;
                        d = distance;
                    }
                }
                if (riding == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender cmdb = (BlockCommandSender) sender;
                List<Entity> WorldEntitys = cmdb.getBlock().getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(cmdb.getBlock().getLocation());
                    if (d > distance) {
                        riding = (LivingEntity) e;
                        d = distance;
                    }
                }
                if (riding == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else {
                SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                return true;
            }
        }
        String rider_type = "エンティティ", riding_type = "エンティティ";
        if (rider.getType() == EntityType.PLAYER) {
            rider_type = "プレイヤー";
        }
        if (riding.getType() == EntityType.PLAYER) {
            riding_type = "プレイヤー";
        }
        /*if(riding.getUniqueId().toString().equalsIgnoreCase(rider.getUniqueId().toString())){
				SendMessage(sender, cmd, "処理できません。");
				return true;
			}*/
        Boolean bool = riding.setLeashHolder(rider);
        if (bool) {
            SendMessage(sender, cmd, rider_type + "「" + rider.getName() + "」から" + riding_type + "「" + riding.getName() + "」にリードをつけました。");
        } else {
            SendMessage(sender, cmd, rider_type + "「" + rider.getName() + "」から" + riding_type + "「" + riding.getName() + "」にリードをつけました。");
        }
        return true;
    }
    SendUsageMessage(sender, cmd);
    return true;
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) Entity(org.bukkit.entity.Entity) LivingEntity(org.bukkit.entity.LivingEntity) Player(org.bukkit.entity.Player) List(java.util.List) BlockCommandSender(org.bukkit.command.BlockCommandSender)

Example 24 with BlockCommandSender

use of org.bukkit.command.BlockCommandSender in project MyMaid2 by jaoafa.

the class Cmd_Rider method onCommand.

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (args.length == 0 || args[0].equalsIgnoreCase("help")) {
        SendUsageMessage(sender, cmd);
        return true;
    }
    if (args.length == 1) {
        if (!(sender instanceof Player)) {
            SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
            return true;
        }
        Player player = (Player) sender;
        if (args[0].equalsIgnoreCase("leave")) {
            if (player.getPassengers().size() == 0) {
                SendMessage(sender, cmd, "あなたには誰も乗っていません。");
                return true;
            }
            for (Entity entity : player.getPassengers()) {
                if (player.removePassenger(entity)) {
                    SendMessage(sender, cmd, "プレイヤー・エンティティ「" + entity.getName() + "」を下ろしました。");
                } else {
                    if (entity.getVehicle().eject()) {
                        SendMessage(sender, cmd, "プレイヤー・エンティティ「" + entity.getName() + "」を下ろしました。");
                    } else {
                        SendMessage(sender, cmd, "プレイヤー・エンティティ「" + entity.getName() + "」を下ろせませんでした。");
                    }
                }
            }
            return true;
        }
        Player p = Bukkit.getPlayerExact(args[0]);
        if (p != null) {
            if (player.getUniqueId().toString().equals(p.getUniqueId().toString())) {
                SendMessage(sender, cmd, "処理できません。");
                return true;
            }
            Boolean bool = p.addPassenger(player);
            if (bool) {
                SendMessage(sender, cmd, "プレイヤー「" + p.getName() + "」に乗りました。");
            } else {
                SendMessage(sender, cmd, "プレイヤー「" + p.getName() + "」に乗れませんでした。");
            }
        } else {
            Entity e = null;
            List<Entity> NearEntitys = player.getNearbyEntities(15.0, 15.0, 15.0);
            for (Entity near : NearEntitys) {
                if (near.getType() == EntityType.PLAYER) {
                    continue;
                }
                if (near.getName().equalsIgnoreCase(args[0])) {
                    e = near;
                    break;
                }
            }
            if (e == null) {
                SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                return true;
            }
            Boolean bool = e.addPassenger(player);
            if (bool) {
                SendMessage(sender, cmd, "エンティティ「" + e.getName() + "」に乗りました。");
            } else {
                SendMessage(sender, cmd, "エンティティ「" + e.getName() + "」に乗れませんでした。");
            }
        }
        return true;
    } else if (args.length == 2) {
        if (args[0].equalsIgnoreCase("leave")) {
            Entity rider = null;
            if (sender instanceof Player) {
                Player player = (Player) sender;
                List<Entity> WorldEntitys = player.getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(player.getLocation());
                    if (d > distance) {
                        rider = e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender cmdb = (BlockCommandSender) sender;
                List<Entity> WorldEntitys = cmdb.getBlock().getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(cmdb.getBlock().getLocation());
                    if (d > distance) {
                        rider = e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else {
                SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                return true;
            }
            if (rider.getPassengers().size() == 0) {
                SendMessage(sender, cmd, "指定されたプレイヤー・エンティティ「" + rider.getName() + "」には誰も乗っていません。");
                return true;
            }
            for (Entity entity : rider.getPassengers()) {
                if (rider.removePassenger(entity)) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティ「" + rider.getName() + "」からプレイヤー・エンティティ「" + entity.getName() + "」を下ろしました。");
                } else {
                    if (entity.getVehicle().eject()) {
                        SendMessage(sender, cmd, "指定されたプレイヤー・エンティティ「" + rider.getName() + "」からプレイヤー・エンティティ「" + entity.getName() + "」を下ろしました。");
                    } else {
                        SendMessage(sender, cmd, "指定されたプレイヤー・エンティティ「" + rider.getName() + "」からプレイヤー・エンティティ「" + entity.getName() + "」を下ろせませんでした。");
                    }
                }
            }
            return true;
        }
        // 乗せる
        Entity rider = null;
        Entity riding = null;
        // 乗る人
        Player p_rider = Bukkit.getPlayerExact(args[0]);
        // 乗られる人
        Player p_riding = Bukkit.getPlayerExact(args[1]);
        if (p_rider != null) {
            rider = p_rider;
        } else {
            if (sender instanceof Player) {
                Player player = (Player) sender;
                List<Entity> WorldEntitys = player.getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[0])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(player.getLocation());
                    if (d > distance) {
                        rider = e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender cmdb = (BlockCommandSender) sender;
                List<Entity> WorldEntitys = cmdb.getBlock().getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[0])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(cmdb.getBlock().getLocation());
                    if (d > distance) {
                        rider = e;
                        d = distance;
                    }
                }
                if (rider == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else {
                SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                return true;
            }
        }
        if (p_riding != null) {
            riding = p_riding;
        } else {
            if (sender instanceof Player) {
                Player player = (Player) sender;
                List<Entity> WorldEntitys = player.getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(player.getLocation());
                    if (d > distance) {
                        riding = e;
                        d = distance;
                    }
                }
                if (riding == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else if (sender instanceof BlockCommandSender) {
                BlockCommandSender cmdb = (BlockCommandSender) sender;
                List<Entity> WorldEntitys = cmdb.getBlock().getWorld().getEntities();
                double d = Double.MAX_VALUE;
                for (Entity e : WorldEntitys) {
                    if (e.getType() == EntityType.PLAYER) {
                        continue;
                    }
                    if (!e.getName().equalsIgnoreCase(args[1])) {
                        continue;
                    }
                    double distance = e.getLocation().distance(cmdb.getBlock().getLocation());
                    if (d > distance) {
                        riding = e;
                        d = distance;
                    }
                }
                if (riding == null) {
                    SendMessage(sender, cmd, "指定されたプレイヤー・エンティティが見つかりませんでした。");
                    return true;
                }
            } else {
                SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                return true;
            }
        }
        String rider_type = "エンティティ", riding_type = "エンティティ";
        if (rider.getType() == EntityType.PLAYER) {
            rider_type = "プレイヤー";
        }
        if (riding.getType() == EntityType.PLAYER) {
            riding_type = "プレイヤー";
        }
        if (riding.getUniqueId().toString().equalsIgnoreCase(rider.getUniqueId().toString())) {
            SendMessage(sender, cmd, "処理できません。");
            return true;
        }
        Boolean bool = riding.addPassenger(rider);
        if (bool) {
            SendMessage(sender, cmd, rider_type + "「" + rider.getName() + "」を" + riding_type + "「" + riding.getName() + "」に乗せました。");
        } else {
            SendMessage(sender, cmd, rider_type + "「" + rider.getName() + "」を" + riding_type + "「" + riding.getName() + "」に乗せられませんでした。");
        }
        return true;
    }
    SendUsageMessage(sender, cmd);
    return true;
}
Also used : Entity(org.bukkit.entity.Entity) Player(org.bukkit.entity.Player) List(java.util.List) BlockCommandSender(org.bukkit.command.BlockCommandSender)

Example 25 with BlockCommandSender

use of org.bukkit.command.BlockCommandSender in project MyMaid2 by jaoafa.

the class Event_CommandBlockVariable method onCommandBlockCall.

@EventHandler
public void onCommandBlockCall(ServerCommandEvent event) {
    if (!(event.getSender() instanceof BlockCommandSender))
        return;
    BlockCommandSender sender = (BlockCommandSender) event.getSender();
    if (sender.getBlock() == null || !(sender.getBlock().getState() instanceof CommandBlock))
        return;
    CommandBlock cmdb = (CommandBlock) sender.getBlock().getState();
    String command = cmdb.getCommand();
    // 最初に$が入ってたら変数入りコマンド
    if (!command.startsWith("$"))
        return;
    // $を消す
    command = StringUtils.stripStart(command, "$");
    // /を消す
    command = StringUtils.stripStart(command, "/");
    // 「@p」のみ置き換える動作をする
    if (sender instanceof Player) {
        Player player = (Player) sender;
        NearestPlayer npr = new NearestPlayer(player.getLocation());
        if (npr.getStatus()) {
            command = command.replaceAll("@" + "p" + "", npr.getPlayer().getName());
        }
    } else if (sender instanceof BlockCommandSender) {
        NearestPlayer npr = new NearestPlayer(cmdb.getBlock().getLocation());
        if (npr.getStatus()) {
            command = command.replaceAll("@" + "p" + "", npr.getPlayer().getName());
        }
    }
    // ----- 事前定義(予約済み変数) ----- //
    SimpleDateFormat sdf_Year = new SimpleDateFormat("yyyy");
    command = command.replaceAll("\\$" + "DateTime_Year" + "\\$", sdf_Year.format(new Date()));
    SimpleDateFormat sdf_Month = new SimpleDateFormat("MM");
    command = command.replaceAll("\\$" + "DateTime_Month" + "\\$", sdf_Month.format(new Date()));
    SimpleDateFormat sdf_Day = new SimpleDateFormat("dd");
    command = command.replaceAll("\\$" + "DateTime_Day" + "\\$", sdf_Day.format(new Date()));
    SimpleDateFormat sdf_Hour = new SimpleDateFormat("HH");
    command = command.replaceAll("\\$" + "DateTime_Hour" + "\\$", sdf_Hour.format(new Date()));
    SimpleDateFormat sdf_Minute = new SimpleDateFormat("mm");
    command = command.replaceAll("\\$" + "DateTime_Minute" + "\\$", sdf_Minute.format(new Date()));
    SimpleDateFormat sdf_Second = new SimpleDateFormat("ss");
    command = command.replaceAll("\\$" + "DateTime_Second" + "\\$", sdf_Second.format(new Date()));
    command = command.replaceAll("\\$" + "PlayerCount" + "\\$", String.valueOf(Bukkit.getServer().getOnlinePlayers().size()));
    for (Player p : Bukkit.getOnlinePlayers()) {
        if (!command.contains("$" + "Damager_" + p.getName() + "$")) {
            continue;
        }
        EntityDamageEvent ede = p.getLastDamageCause();
        if (ede == null) {
            continue;
        }
        Entity e = ede.getEntity();
        if (e == null) {
            continue;
        }
        String name = e.getName();
        command = command.replaceAll("\\$" + "Damager_" + p.getName() + "\\$", name);
    }
    ScoreboardManager sbm = Bukkit.getScoreboardManager();
    Scoreboard sb = sbm.getMainScoreboard();
    for (Objective obj : sb.getObjectives()) {
        String regex = "\\$Score_" + obj.getName() + "_(.+?)\\$";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(command);
        while (m.find()) {
            Score i = obj.getScore(m.group(1));
            if (i == null) {
                continue;
            }
            command = command.replaceAll("\\$" + "Score_" + obj.getName() + "_" + m.group(1) + "\\$", "" + i.getScore());
        }
    }
    // ----- 事前定義(予約済み変数) ----- //
    Map<String, String> map = MyMaidVariable.listALL();
    for (Map.Entry<String, String> e : map.entrySet()) {
        command = command.replaceAll("\\$" + e.getKey() + "\\$", e.getValue());
    }
    Bukkit.dispatchCommand(sender, command);
}
Also used : Entity(org.bukkit.entity.Entity) Pattern(java.util.regex.Pattern) Player(org.bukkit.entity.Player) NearestPlayer(com.jaoafa.MyMaid2.Lib.NearestPlayer) NearestPlayer(com.jaoafa.MyMaid2.Lib.NearestPlayer) Matcher(java.util.regex.Matcher) CommandBlock(org.bukkit.block.CommandBlock) Date(java.util.Date) Objective(org.bukkit.scoreboard.Objective) Score(org.bukkit.scoreboard.Score) Scoreboard(org.bukkit.scoreboard.Scoreboard) ScoreboardManager(org.bukkit.scoreboard.ScoreboardManager) SimpleDateFormat(java.text.SimpleDateFormat) Map(java.util.Map) BlockCommandSender(org.bukkit.command.BlockCommandSender) EntityDamageEvent(org.bukkit.event.entity.EntityDamageEvent) EventHandler(org.bukkit.event.EventHandler)

Aggregations

BlockCommandSender (org.bukkit.command.BlockCommandSender)25 Player (org.bukkit.entity.Player)19 Location (org.bukkit.Location)13 Entity (org.bukkit.entity.Entity)10 ConsoleCommandSender (org.bukkit.command.ConsoleCommandSender)8 Block (org.bukkit.block.Block)5 CommandSender (org.bukkit.command.CommandSender)5 EventHandler (org.bukkit.event.EventHandler)5 ArrayList (java.util.ArrayList)4 World (org.bukkit.World)4 CommandBlock (org.bukkit.block.CommandBlock)4 CommandMinecart (org.bukkit.entity.minecart.CommandMinecart)4 CommandTarget (net.glowstone.command.CommandTarget)3 LivingEntity (org.bukkit.entity.LivingEntity)3 CastSourceLocation (com.elmakers.mine.bukkit.api.magic.CastSourceLocation)2 Mage (com.elmakers.mine.bukkit.api.magic.Mage)2 Spell (com.elmakers.mine.bukkit.api.spell.Spell)2 MCCommandSender (com.laytonsmith.abstraction.MCCommandSender)2 List (java.util.List)2 LocalizedStringImpl (net.glowstone.i18n.LocalizedStringImpl)2