Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

В разработке [WarForFlag] Захват флага.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mr_RoboMan, 26 фев 2015.

  1. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    И снова здравствуйте нормальные девелоперы :D
    Я тут решил разработать плагин, как всегда нужна помощь.
    Суть в том что не работает загрузка данных из конфигов.
    (Сообщение отладки не выводиться).
    Не работает все именно после стоп-запуск.
    Все остальное просьба не гадить, как умею так и пишу :D
    Код:
    package ru.roboman.plugin.WarForFlag;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    public class Solution extends JavaPlugin implements Listener
    {
    
        protected FileConfiguration config;
        private Location locationOfRedFlag;
        private Location locationOfBlueFlag;
        private Location locationOfGreenFlag;
        private Location locationOfYellowFlag;
        private int WinOfRed = 0;
        private int WinOfBlue = 0;
        private int WinOfGreen = 0;
        private int WinOfYellow = 0;
        String plugin = ChatColor.translateAlternateColorCodes('&', "&a&l[&c&lWar&1&lFor&2&lFlag&a&l] ");
    
        @Override
        public void onEnable()
        {
            getServer().getPluginManager().registerEvents(this, this);
            config = getConfig();
    
            locationOfRedFlag.setX((Double) config.get("Location.RedFlag.X"));
            locationOfRedFlag.setY((Double) config.get("Location.RedFlag.Y"));
            locationOfRedFlag.setZ((Double) config.get("Location.RedFlag.Z"));
            locationOfRedFlag.getBlock().setTypeIdAndData(35, (byte) 14, true);
    
            locationOfBlueFlag.setX((Double) config.get("Location.BlueFlag.X"));
            locationOfBlueFlag.setY((Double) config.get("Location.BlueFlag.Y"));
            locationOfBlueFlag.setZ((Double) config.get("Location.BlueFlag.Z"));
            locationOfBlueFlag.getBlock().setTypeIdAndData(35, (byte) 11, true);
    
            locationOfGreenFlag.setX((Double) config.get("Location.GreenFlag.X"));
            locationOfGreenFlag.setY((Double) config.get("Location.GreenFlag.Y"));
            locationOfGreenFlag.setZ((Double) config.get("Location.GreenFlag.Z"));
            locationOfGreenFlag.getBlock().setTypeIdAndData(35, (byte) 5, true);
    
            locationOfYellowFlag.setX((Double) config.get("Location.YellowFlag.X"));
            locationOfYellowFlag.setY((Double) config.get("Location.YellowFlag.Y"));
            locationOfYellowFlag.setZ((Double) config.get("Location.YellowFlag.Z"));
            locationOfYellowFlag.getBlock().setTypeIdAndData(35, (byte) 4, true);
        }
    
        @Override
        public void onDisable()
        {
            saveConfig();
        }
    
        public boolean isTeamString(String team)
        {
            ArrayList<String> list = new ArrayList<String>();
            Collections.addAll(list, "red", "blue", "green", "yellow");
            for (int i = 0; i < list.size(); i++)
            {
                if (team.equalsIgnoreCase(list.get(i)))
                {
                    return true;
                }
            }
            return false;
        }
    
        public int getRedWins() { return WinOfRed; }
    
        public int getBlueWins() { return WinOfBlue; }
    
        public int getGreenWins(){ return WinOfGreen; }
    
        public int getYellowWins() { return WinOfYellow; }
    
        public Location getLocationOfRedFlag() { return locationOfRedFlag; }
    
        public Location getLocationOfBlueFlag() { return locationOfBlueFlag; }
    
        public Location getLocationOfGreenFlag() { return locationOfGreenFlag; }
    
        public Location getLocationOfYellowFlag() { return locationOfYellowFlag; }
    
        public void setLocationOfRedFlag(Location location) { locationOfRedFlag = location; }
    
        public void setLocationOfBlueFlag(Location location) { locationOfBlueFlag = location; }
    
        public void setLocationOfGreenFlag(Location location) { locationOfGreenFlag = location; }
    
        public void setLocationOfYellowFlag(Location location) { locationOfYellowFlag = location; }
    
        @EventHandler
        public void onBlockPlaced(BlockPlaceEvent bpe)
        {
            Location locOfCheck = bpe.getBlock().getLocation();
            locOfCheck.setY(locOfCheck.getY()-1);
            if (locOfCheck.equals(locationOfRedFlag) || locOfCheck.equals(locationOfBlueFlag) || locOfCheck.equals(locationOfGreenFlag) || locOfCheck.equals(locationOfYellowFlag))
            {
                Bukkit.broadcastMessage("[ОТЛАДКА] Над флагом был поставлен блок.");
            }
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
        {
            Player player = null;
            if (sender instanceof Player)
            {
                player = (Player) sender;
    
                if (cmd.getName().equalsIgnoreCase("WFF"))
                {
    
                    if (args.length == 0)
                    {
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aИспользование команды&0: &5/WFF <команда> <аргументы>"));
                    }
    
                    else
                    {
    
                        if (args.length == 1 && isTeamString(args[0]))
                        {
                            if (args[0].equalsIgnoreCase("red"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfRed));
                            }
    
                            if (args[0].equalsIgnoreCase("blue"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfBlue));
                            }
    
                            if (args[0].equalsIgnoreCase("green"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfGreen));
                            }
    
                            if (args[0].equalsIgnoreCase("yellow"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfYellow));
                            }
    
                        }
    
                        if (args.length == 2 && isTeamString(args[0]) && player.hasPermission("warforflag.admin"))
                        {
    
                            if (args[1].equalsIgnoreCase("setFlag"))
                            {
    
                                if (args[0].equalsIgnoreCase("red"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 14, true);
                                    locationOfRedFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.RedFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.RedFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.RedFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                }
    
                                if (args[0].equalsIgnoreCase("blue"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 11, true);
                                    locationOfBlueFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.BlueFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.BlueFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.BlueFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                }
    
                                if (args[0].equalsIgnoreCase("green"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 5, true);
                                    locationOfGreenFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.GreenFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.GreenFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.GreenFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                }
    
                                if (args[0].equalsIgnoreCase("yellow"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 4, true);
                                    locationOfYellowFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.YellowFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.YellowFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.YellowFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                }
                                saveConfig();
                            }
                        }
                    }
                }
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    
     
  2. Хостинг MineCraft
    <
  3. Explorer_1991

    Explorer_1991 Старожил Пользователь

    Баллы:
    103
    Вы пытаетесь нулевым локациям задать координаты, надо использовать new Location(world, x, y ,z)
     
  4. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Т.Е. вот это убрать?... И как-то по другому делать?..
    Код:
        private Location locationOfRedFlag;
        private Location locationOfBlueFlag;
        private Location locationOfGreenFlag;
        private Location locationOfYellowFlag;
     
  5. Explorer_1991

    Explorer_1991 Старожил Пользователь

    Баллы:
    103
    Заменить строки setX, setY, setZ на строку new Location(world, x, y, z)
    P.S. world можно взять методом Bukkit.getWorld(name)
     
  6. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Кажись понял, но вечером кодить не охота, завтра проверю)[DOUBLEPOST=1424974674,1424968176][/DOUBLEPOST]
    Спасибо. Зароботалоооо :D
    *Типо под кота Матроскина кошу*.[DOUBLEPOST=1424975412][/DOUBLEPOST]UPD: надо сделать чтоб:
    Если игрок ломает блок, и Location этого блока совпадает с Location флага, выполнялся код BlockBreakEvent,
    сейчас это выполняется при поломке любого блока! Что я делаю не так?
    Код:
    package ru.roboman.plugin.WarForFlag;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    public class Solution extends JavaPlugin implements Listener
    {
    
        protected FileConfiguration config;
        private Location locationOfRedFlag;
        private Location locationOfBlueFlag;
        private Location locationOfGreenFlag;
        private Location locationOfYellowFlag;
        private int WinOfRed = 0;
        private int WinOfBlue = 0;
        private int WinOfGreen = 0;
        private int WinOfYellow = 0;
        String plugin = ChatColor.translateAlternateColorCodes('&', "&a&l[&c&lWar&1&lFor&2&lFlag&a&l] ");
    
        @Override
        public void onEnable()
        {
            getServer().getPluginManager().registerEvents(this, this);
            config = getConfig();
    
            locationOfRedFlag = new Location((World) Bukkit.getWorld((String) config.get("Location.RedFlag.World")), (Double) config.get("Location.RedFlag.X"), (Double) config.get("Location.RedFlag.Y"), (Double) config.get("Location.RedFlag.Z"));
            locationOfRedFlag.getBlock().setTypeIdAndData(35, (byte) 14, true);
    
            locationOfBlueFlag = new Location((World) Bukkit.getWorld((String) config.get("Location.BlueFlag.World")), (Double) config.get("Location.BlueFlag.X"), (Double) config.get("Location.BlueFlag.Y"), (Double) config.get("Location.BlueFlag.Z"));
            locationOfBlueFlag.getBlock().setTypeIdAndData(35, (byte) 11, true);
    
            locationOfGreenFlag = new Location((World) Bukkit.getWorld((String) config.get("Location.GreenFlag.World")), (Double) config.get("Location.GreenFlag.X"), (Double) config.get("Location.GreenFlag.Y"), (Double) config.get("Location.GreenFlag.Z"));
            locationOfGreenFlag.getBlock().setTypeIdAndData(35, (byte) 5, true);
    
            locationOfYellowFlag = new Location((World) Bukkit.getWorld((String) config.get("Location.YellowFlag.World")), (Double) config.get("Location.YellowFlag.X"), (Double) config.get("Location.YellowFlag.Y"), (Double) config.get("Location.YellowFlag.Z"));
            locationOfYellowFlag.getBlock().setTypeIdAndData(35, (byte) 4, true);
        }
    
        @Override
        public void onDisable()
        {
            saveConfig();
        }
    
        public boolean isTeamString(String team)
        {
            ArrayList<String> list = new ArrayList<String>();
            Collections.addAll(list, "red", "blue", "green", "yellow");
            for (int i = 0; i < list.size(); i++)
            {
                if (team.equalsIgnoreCase(list.get(i)))
                {
                    return true;
                }
            }
            return false;
        }
    
        public int getRedWins() { return WinOfRed; }
    
        public int getBlueWins() { return WinOfBlue; }
    
        public int getGreenWins(){ return WinOfGreen; }
    
        public int getYellowWins() { return WinOfYellow; }
    
        public Location getLocationOfRedFlag() { return locationOfRedFlag; }
    
        public Location getLocationOfBlueFlag() { return locationOfBlueFlag; }
    
        public Location getLocationOfGreenFlag() { return locationOfGreenFlag; }
    
        public Location getLocationOfYellowFlag() { return locationOfYellowFlag; }
    
        public void setLocationOfRedFlag(Location location) { locationOfRedFlag = location; }
    
        public void setLocationOfBlueFlag(Location location) { locationOfBlueFlag = location; }
    
        public void setLocationOfGreenFlag(Location location) { locationOfGreenFlag = location; }
    
        public void setLocationOfYellowFlag(Location location) { locationOfYellowFlag = location; }
    
        @EventHandler
        public void onFlagPlaced(BlockPlaceEvent bpe)
        {
            Location locOfCheck = bpe.getBlock().getLocation();
            locOfCheck.setY(locOfCheck.getY()-1);
            if (locationOfRedFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aКрасная команда принесла флаг на свою базу."));
                WinOfRed++;
            }
    
            if (locationOfBlueFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aСиняя команда принесла флаг на свою базу."));
                WinOfBlue++;
            }
    
            if (locationOfGreenFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aЗеленая команда принесла флаг на свою базу."));
                WinOfGreen++;
            }
    
            if (locationOfYellowFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aЖелтая команда принесла флаг на свою базу."));
                WinOfYellow++;
            }
        }
    
        //Туто надо помочь!)
        @EventHandler
        public void onFlagBreaked(BlockBreakEvent bbe)
        {
            if (bbe.getBlock().getLocation().equals(locationOfRedFlag) && !locationOfRedFlag.equals(null) || bbe.getBlock().getLocation().equals(locationOfBlueFlag) && !locationOfBlueFlag.equals(null) || bbe.getBlock().getLocation().equals(locationOfGreenFlag)  && !locationOfGreenFlag.equals(null)|| bbe.getBlock().getLocation().equals(locationOfYellowFlag) && !locationOfYellowFlag.equals(null));
            {
                bbe.setCancelled(true);
                bbe.getBlock().breakNaturally();
                if (bbe.getBlock().getLocation().equals(locationOfRedFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 14, true);
                if (bbe.getBlock().getLocation().equals(locationOfBlueFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 11, true);
                if (bbe.getBlock().getLocation().equals(locationOfGreenFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 5, true);
                if (bbe.getBlock().getLocation().equals(locationOfYellowFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 4, true);
            }
        }
    
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
        {
            Player player = null;
            if (sender instanceof Player)
            {
                player = (Player) sender;
    
                if (cmd.getName().equalsIgnoreCase("WFF"))
                {
    
                    if (args.length == 0)
                    {
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aИспользование команды&0: &5/WFF <команда> <аргументы>"));
                    }
    
                    else
                    {
    
                        if (args.length == 1 && isTeamString(args[0]))
                        {
    
                            if (args[0].equalsIgnoreCase("red"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfRed));
                            }
    
                            if (args[0].equalsIgnoreCase("blue"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfBlue));
                            }
    
                            if (args[0].equalsIgnoreCase("green"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfGreen));
                            }
    
                            if (args[0].equalsIgnoreCase("yellow"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfYellow));
                            }
    
                        }
    
                        if (args.length == 1 && args[0].equals("stats"))
                        {
                            Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aСтатистика: красная команда: [" + WinOfRed + "&a], синяя: [" + WinOfBlue + "&a], зеленая: [" + WinOfGreen + "&a], желтая: [" + WinOfYellow + "&a]."));
                        }
    
                        if (args.length == 2 && isTeamString(args[0]) && player.hasPermission("warforflag.admin"))
                        {
    
                            if (args[1].equalsIgnoreCase("setFlag"))
                            {
    
                                if (args[0].equalsIgnoreCase("red"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 14, true);
                                    locationOfRedFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.RedFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.RedFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.RedFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                    config.set("Location.RedFlag.World", player.getWorld().getName());
                                }
    
                                if (args[0].equalsIgnoreCase("blue"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 11, true);
                                    locationOfBlueFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.BlueFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.BlueFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.BlueFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                    config.set("Location.BlueFlag.World", player.getWorld().getName());
                                }
    
                                if (args[0].equalsIgnoreCase("green"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 5, true);
                                    locationOfGreenFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.GreenFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.GreenFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.GreenFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                    config.set("Location.GreenFlag.World", player.getWorld().getName());
                                }
    
                                if (args[0].equalsIgnoreCase("yellow"))
                                {
                                    player.getTargetBlock(null, 32).setTypeIdAndData(35, (byte) 4, true);
                                    locationOfYellowFlag = player.getTargetBlock(null, 32).getLocation();
                                    config.set("Location.YellowFlag.X", player.getTargetBlock(null, 32).getLocation().getX());
                                    config.set("Location.YellowFlag.Y", player.getTargetBlock(null, 32).getLocation().getY());
                                    config.set("Location.YellowFlag.Z", player.getTargetBlock(null, 32).getLocation().getZ());
                                    config.set("Location.YellowFlag.World", player.getWorld().getName());
                                }
                                saveConfig();
                            }
                        }
                    }
                }
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    
     
  7. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ну а... Как сравнивать локации?..
     
  8. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    @Mr_Grom врет, у класса Location переопределен метод equals значит его можно так сравнивать. Тут дело в чем-то другом...
     
  9. Mr_Grom

    Mr_Grom Активный участник Девелопер Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Failer
    Действительно бред написал, извиняюсь.[DOUBLEPOST=1425031494,1425030320][/DOUBLEPOST]
    bbe.getBlock().getLocation().equals(locationOfRedFlag)&&!locationOfRedFlag.equals(null)

    пока что могу сказать что проверка на нулл ой какая хреновая )
     
  10. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    И бессмысленная. В методе equals уже есть проверка на null, и если null, то возвращает false
     
  11. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ок, ок, ок, убрал проверку на null, я ее добавил после того как возник баг описанный выше, думал поможет...[DOUBLEPOST=1425040192,1425040090][/DOUBLEPOST]Код почти не поменялся, думаю выкладывать не стоит (только проверку на null убрал), баг как был так и остался.[DOUBLEPOST=1425056241][/DOUBLEPOST]UP
     
  12. aceJKE

    aceJKE Старожил Пользователь

    Баллы:
    123
    Код:
        @EventHandler
        private void onFlagBreak(BlockBreakEvent e) {
            Block b = e.getBlock();
            if (locationOfRedFlag == null) {
                Bukkit.getLogger().info("locationOfRedFlag is null!");
            }
            if (b.getLocation().equals(locationOfRedFlag)) {
                e.setCancelled(true);
                b.setType(Material.AIR);
                e.getPlayer().getInventory().setHelmet(new ItemStack(Material.WOOL));
            }
            //TODO: more else
        }
    попробуй...
     
  13. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Тут вроде почти тоже самое, только с блоком на голове..
     
  14. aceJKE

    aceJKE Старожил Пользователь

    Баллы:
    123
    У тебя написно что-то странное, двойная проверка блока + null через equals сравниваешь. По сути я убрал у тебя лишнии действия
     
  15. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    null я уже убрал (выше писал). Где двойная проверка не понял..
     
  16. aceJKE

    aceJKE Старожил Пользователь

    Баллы:
    123
     
  17. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ну так, сначало проверяю, чтоб хотя-бы одно из условий было верно, и не зависимо от того какой это флаг делаю что мне надо, а потом, уже проверяю какой именно блок (флаг) стоит, и строю его обратно..[DOUBLEPOST=1425104715,1425102074][/DOUBLEPOST]Блин, у меня бомбит... Ну почему этот код вызывается при ломании любого блока... Мой if тупо не пашет...
    Код:
        @EventHandler
        public void onFlagBreaked(BlockBreakEvent bbe)
        {
            if (bbe.getBlock().getLocation().equals(locationOfRedFlag)|| bbe.getBlock().getLocation().equals(locationOfBlueFlag)|| bbe.getBlock().getLocation().equals(locationOfGreenFlag)|| bbe.getBlock().getLocation().equals(locationOfYellowFlag));
            {
                bbe.setCancelled(true);
                bbe.getBlock().breakNaturally();
                if (bbe.getBlock().getLocation().equals(locationOfRedFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 14, true);
                if (bbe.getBlock().getLocation().equals(locationOfBlueFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 11, true);
                if (bbe.getBlock().getLocation().equals(locationOfGreenFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 5, true);
                if (bbe.getBlock().getLocation().equals(locationOfYellowFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 4, true);
            }
        }
    
     
  18. Sirse

    Sirse Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Попробуйте сравнивать координаты блоков, а не их локации.
     
  19. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Бред конечно, но попробую!)[DOUBLEPOST=1425119912,1425107501][/DOUBLEPOST]
    Нет, опять реагирует на все блоки..
     
  20. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Будет звучать довольно странно, но может сработать:
    Сделай все поля с location статичными(static)
     
  21. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Не прощла([DOUBLEPOST=1425125369,1425125306][/DOUBLEPOST]Блин это какой-то бред... Моего IF тупо не видно..[DOUBLEPOST=1425125961][/DOUBLEPOST]В коде изменений не много, но все-же залью, баг остался.
    Код:
    package ru.roboman.plugin.WarForFlag;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashSet;
    
    public class Solution extends JavaPlugin implements Listener
    {
    
        protected FileConfiguration config;
        private HashSet<Byte> unSeenBlocks = new HashSet<Byte>();
        private static Location locationOfRedFlag = null;
        private static Location locationOfBlueFlag = null;
        private static Location locationOfGreenFlag = null;
        private static Location locationOfYellowFlag = null;
        private int WinOfRed = 0;
        private int WinOfBlue = 0;
        private int WinOfGreen = 0;
        private int WinOfYellow = 0;
        private String plugin = ChatColor.translateAlternateColorCodes('&', "&a&l[&c&lWar&1&lFor&2&lFlag&a&l] ");
    
        @Override
        public void onEnable()
        {
            Collections.addAll(unSeenBlocks, (byte) 8, (byte) 9, (byte) 10, (byte) 11);
            getServer().getPluginManager().registerEvents(this, this);
            config = getConfig();
    
            locationOfRedFlag = new Location(Bukkit.getWorld((String) config.get("Location.RedFlag.World")), (Double) config.get("Location.RedFlag.X"), (Double) config.get("Location.RedFlag.Y"), (Double) config.get("Location.RedFlag.Z"));
            locationOfRedFlag.getBlock().setTypeIdAndData(35, (byte) 14, true);
    
            locationOfBlueFlag = new Location(Bukkit.getWorld((String) config.get("Location.BlueFlag.World")), (Double) config.get("Location.BlueFlag.X"), (Double) config.get("Location.BlueFlag.Y"), (Double) config.get("Location.BlueFlag.Z"));
            locationOfBlueFlag.getBlock().setTypeIdAndData(35, (byte) 11, true);
    
            locationOfGreenFlag = new Location(Bukkit.getWorld((String) config.get("Location.GreenFlag.World")), (Double) config.get("Location.GreenFlag.X"), (Double) config.get("Location.GreenFlag.Y"), (Double) config.get("Location.GreenFlag.Z"));
            locationOfGreenFlag.getBlock().setTypeIdAndData(35, (byte) 5, true);
    
            locationOfYellowFlag = new Location(Bukkit.getWorld((String) config.get("Location.YellowFlag.World")), (Double) config.get("Location.YellowFlag.X"), (Double) config.get("Location.YellowFlag.Y"), (Double) config.get("Location.YellowFlag.Z"));
            locationOfYellowFlag.getBlock().setTypeIdAndData(35, (byte) 4, true);
        }
    
        @Override
        public void onDisable()
        {
            saveConfig();
        }
    
        public boolean isTeamString(String team)
        {
            ArrayList<String> list = new ArrayList<String>();
            Collections.addAll(list, "red", "blue", "green", "yellow");
            for (int i = 0; i < list.size(); i++)
            {
                if (team.equalsIgnoreCase(list.get(i)))
                {
                    return true;
                }
            }
            return false;
        }
    
        public int getRedWins() { return WinOfRed; }
    
        public int getBlueWins() { return WinOfBlue; }
    
        public int getGreenWins(){ return WinOfGreen; }
    
        public int getYellowWins() { return WinOfYellow; }
    
        public Location getLocationOfRedFlag() { return locationOfRedFlag; }
    
        public Location getLocationOfBlueFlag() { return locationOfBlueFlag; }
    
        public Location getLocationOfGreenFlag() { return locationOfGreenFlag; }
    
        public Location getLocationOfYellowFlag() { return locationOfYellowFlag; }
    
        public void setLocationOfRedFlag(Location location) { locationOfRedFlag = location; }
    
        public void setLocationOfBlueFlag(Location location) { locationOfBlueFlag = location; }
    
        public void setLocationOfGreenFlag(Location location) { locationOfGreenFlag = location; }
    
        public void setLocationOfYellowFlag(Location location) { locationOfYellowFlag = location; }
    
        @EventHandler
        public void onFlagPlaced(BlockPlaceEvent bpe)
        {
            Location locOfCheck = bpe.getBlock().getLocation();
            locOfCheck.setY(locOfCheck.getY()-1);
            if (locationOfRedFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aКрасная команда принесла флаг на свою базу."));
                WinOfRed++;
            }
    
            if (locationOfBlueFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aСиняя команда принесла флаг на свою базу."));
                WinOfBlue++;
            }
    
            if (locationOfGreenFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aЗеленая команда принесла флаг на свою базу."));
                WinOfGreen++;
            }
    
            if (locationOfYellowFlag.equals(locOfCheck))
            {
                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aЖелтая команда принесла флаг на свою базу."));
                WinOfYellow++;
            }
        }
    
        @EventHandler
        public void onFlagBreaked(BlockBreakEvent bbe)
        {
            if (bbe.getBlock().getLocation().equals(locationOfRedFlag)|| bbe.getBlock().getLocation().equals(locationOfBlueFlag)|| bbe.getBlock().getLocation().equals(locationOfGreenFlag)|| bbe.getBlock().getLocation().equals(locationOfYellowFlag));
            {
                bbe.setCancelled(true);
                bbe.getBlock().breakNaturally();
                if (bbe.getBlock().getLocation().equals(locationOfRedFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 14, true);
                if (bbe.getBlock().getLocation().equals(locationOfBlueFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 11, true);
                if (bbe.getBlock().getLocation().equals(locationOfGreenFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 5, true);
                if (bbe.getBlock().getLocation().equals(locationOfYellowFlag)) bbe.getBlock().setTypeIdAndData(35, (byte) 4, true);
            }
        }
    
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
        {
            Player player = null;
            if (sender instanceof Player)
            {
                player = (Player) sender;
    
                if (cmd.getName().equalsIgnoreCase("WFF"))
                {
    
                    if (args.length == 0)
                    {
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aИспользование команды&0: &5/WFF <команда> <аргументы>"));
                    }
    
                    else
                    {
    
                        if (args.length == 1 && isTeamString(args[0]))
                        {
    
                            if (args[0].equalsIgnoreCase("red"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfRed));
                            }
    
                            if (args[0].equalsIgnoreCase("blue"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfBlue));
                            }
    
                            if (args[0].equalsIgnoreCase("green"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfGreen));
                            }
    
                            if (args[0].equalsIgnoreCase("yellow"))
                            {
                                Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aФлагов забрано&a: &c" + WinOfYellow));
                            }
    
                        }
    
                        if (args.length == 1 && args[0].equals("stats"))
                        {
                            Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin + "&aСтатистика: красная команда: [" + WinOfRed + "&a], синяя: [" + WinOfBlue + "&a], зеленая: [" + WinOfGreen + "&a], желтая: [" + WinOfYellow + "&a]."));
                        }
    
                        if (args.length == 2 && isTeamString(args[0]) && player.hasPermission("warforflag.admin"))
                        {
    
                            if (args[1].equalsIgnoreCase("setFlag"))
                            {
    
                                if (args[0].equalsIgnoreCase("red"))
                                {
                                    player.getTargetBlock(unSeenBlocks, 32).setTypeIdAndData(35, (byte) 14, true);
                                    locationOfRedFlag = player.getTargetBlock(unSeenBlocks, 32).getLocation();
                                    config.set("Location.RedFlag.X", player.getTargetBlock(unSeenBlocks, 32).getLocation().getX());
                                    config.set("Location.RedFlag.Y", player.getTargetBlock(unSeenBlocks, 32).getLocation().getY());
                                    config.set("Location.RedFlag.Z", player.getTargetBlock(unSeenBlocks, 32).getLocation().getZ());
                                    config.set("Location.RedFlag.World", player.getWorld().getName());
                                }
    
                                if (args[0].equalsIgnoreCase("blue"))
                                {
                                    player.getTargetBlock(unSeenBlocks, 32).setTypeIdAndData(35, (byte) 11, true);
                                    locationOfBlueFlag = player.getTargetBlock(unSeenBlocks, 32).getLocation();
                                    config.set("Location.BlueFlag.X", player.getTargetBlock(unSeenBlocks, 32).getLocation().getX());
                                    config.set("Location.BlueFlag.Y", player.getTargetBlock(unSeenBlocks, 32).getLocation().getY());
                                    config.set("Location.BlueFlag.Z", player.getTargetBlock(unSeenBlocks, 32).getLocation().getZ());
                                    config.set("Location.BlueFlag.World", player.getWorld().getName());
                                }
    
                                if (args[0].equalsIgnoreCase("green"))
                                {
                                    player.getTargetBlock(unSeenBlocks, 32).setTypeIdAndData(35, (byte) 5, true);
                                    locationOfGreenFlag = player.getTargetBlock(unSeenBlocks, 32).getLocation();
                                    config.set("Location.GreenFlag.X", player.getTargetBlock(unSeenBlocks, 32).getLocation().getX());
                                    config.set("Location.GreenFlag.Y", player.getTargetBlock(unSeenBlocks, 32).getLocation().getY());
                                    config.set("Location.GreenFlag.Z", player.getTargetBlock(unSeenBlocks, 32).getLocation().getZ());
                                    config.set("Location.GreenFlag.World", player.getWorld().getName());
                                }
    
                                if (args[0].equalsIgnoreCase("yellow"))
                                {
                                    player.getTargetBlock(unSeenBlocks, 32).setTypeIdAndData(35, (byte) 4, true);
                                    locationOfYellowFlag = player.getTargetBlock(unSeenBlocks, 32).getLocation();
                                    config.set("Location.YellowFlag.X", player.getTargetBlock(unSeenBlocks, 32).getLocation().getX());
                                    config.set("Location.YellowFlag.Y", player.getTargetBlock(unSeenBlocks, 32).getLocation().getY());
                                    config.set("Location.YellowFlag.Z", player.getTargetBlock(unSeenBlocks, 32).getLocation().getZ());
                                    config.set("Location.YellowFlag.World", player.getWorld().getName());
                                }
                                saveConfig();
                            }
                        }
                    }
                }
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    
    [DOUBLEPOST=1425126101][/DOUBLEPOST]Статики потом уберу, только сейчас заметил, но уже закрыл IDE :cry:[DOUBLEPOST=1425141775][/DOUBLEPOST]UP
     

Поделиться этой страницей