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

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

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

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

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

    Баллы:
    123
    Ладно, ясно, спасибо)[DOUBLEPOST=1426751376,1426623197][/DOUBLEPOST]Наверно очень дурацкий вопрос но все-же:
    Код:
        //Собираюсь реализовать отменение удара, если оба Player находяться в одном HashMap.
        @EventHandler
        public void TeamDamage(EntityDamageByEntityEvent edbee)
        {
            //Правильно ли реализована проверка, или надо еще что-то добавить?
            if (edbee.getDamager() instanceof Player)
            {
                //Как сюда получить того который дамажил?
                Player agree = ;
                //А сюда который был "дамаженным" :D ?
                Player disagree = ;
            }
        }
    
    Документацию читать не умею, а по названиям методов не слишком понял что к чему...
     
  2. Хостинг MineCraft
    <
  3. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Player p = (Player) e.getEntity(); // if(instanceof)
    Player damager = (Player) e.getDamager();
    if(map.containsKey(p.getName()) && map.containsKey(damager.getName()))
    ...

    На всякий случай предупрежу:
    НИКОГДА нигде не храните объект Player. Только ник или UUID.
     
  4. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ага, т.е. getEntity() это дамаженный, а getDamager() дамагующий.. спасибо!
    Ну и вопрос довольно интересный, а почему так плохо хранить в Player?
     
    Последнее редактирование: 19 мар 2015
  5. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Потому что объект игрока часто меняется, и, например, после смерти игрока его прежний объект уже не будет актуальным.
     
  6. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    УХ ТЫж етить как плохенько... А можно ли как-то получить игрока по нику?..
     
  7. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ложь и провокация. Проверено.
     
  8. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Теперь осталось выбрать кому мне поверить... :confused:
     
  9. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Но всё же лучше пользоваться каким-то более статичным ключом(вроде ууида или ника, как уже говорили), так надёжнее.
     
  10. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ладно, потом разберусь кому верить :D[DOUBLEPOST=1426919427,1426780129][/DOUBLEPOST]В общем, вопрос скорее не по Bukkit, а по Java, но сам сообразить не могу... Допустим у меня есть:
    1. Класс.
    2. Переменные класса.
    3. Переменная ArrayList<Этот_же_класс> list.
    4. Конструктор этого класса.
    Я хочу в конструкторе класса внести в АрраиЛист тот класс который сейчас создался, как это можно сделать?
     
  11. Mr_Grom

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

    Баллы:
    78
    Имя в Minecraft:
    Failer
  12. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Т.Е. просто имя.add(this) и все будет норм? Спасибо)[DOUBLEPOST=1427211579,1426920834][/DOUBLEPOST]Не работает плагинный чат.
    Код:
    package ua.roboman.plugin.WarForFlag;
    
    import org.bukkit.entity.Player;
    
    import java.util.ArrayList;
    
    public class Team
    {
        public String teamName;
        public int wins = 0;
        public Arena arena;
        public ArrayList<Player> playersInTeam = new ArrayList<Player>();
    
        public Team(String teamName, Arena arena)
        {
            if (teamName.equalsIgnoreCase("white")) this.teamName = "white";
            else if (teamName.equalsIgnoreCase("orange")) this.teamName = "orange";
            else if (teamName.equalsIgnoreCase("magenta")) this.teamName = "magenta";
            else if (teamName.equalsIgnoreCase("light_blue")) this.teamName = "light_blue";
            else if (teamName.equalsIgnoreCase("yellow")) this.teamName = "yellow";
            else if (teamName.equalsIgnoreCase("lime")) this.teamName = "lime";
            else if (teamName.equalsIgnoreCase("pink")) this.teamName = "pink";
            else if (teamName.equalsIgnoreCase("gray")) this.teamName = "gray";
            else if (teamName.equalsIgnoreCase("light_gray")) this.teamName = "light_gray";
            else if (teamName.equalsIgnoreCase("cyan")) this.teamName = "cyan";
            else if (teamName.equalsIgnoreCase("purple")) this.teamName = "purple";
            else if (teamName.equalsIgnoreCase("blue")) this.teamName = "blue";
            else if (teamName.equalsIgnoreCase("brown")) this.teamName = "brown";
            else if (teamName.equalsIgnoreCase("green")) this.teamName = "brown";
            else if (teamName.equalsIgnoreCase("red")) this.teamName = "red";
            else if (teamName.equalsIgnoreCase("black")) this.teamName = "black";
            else this.teamName = null;
            this.arena = arena;
        }
    
        public Team()
        {
    
        }
    
        public Team(String teamName)
        {
            this.teamName = teamName;
        }
    
        public Integer getTeamBlockId(String teamName)
        {
            if (teamName.equalsIgnoreCase("white")) return 0;
            else if (teamName.equalsIgnoreCase("orange")) return 1;
            else if (teamName.equalsIgnoreCase("magenta")) return 2;
            else if (teamName.equalsIgnoreCase("light_blue")) return 3;
            else if (teamName.equalsIgnoreCase("yellow")) return 4;
            else if (teamName.equalsIgnoreCase("lime")) return 5;
            else if (teamName.equalsIgnoreCase("pink")) return 6;
            else if (teamName.equalsIgnoreCase("gray")) return 7;
            else if (teamName.equalsIgnoreCase("light_gray")) return 8;
            else if (teamName.equalsIgnoreCase("cyan")) return 9;
            else if (teamName.equalsIgnoreCase("purple")) return 10;
            else if (teamName.equalsIgnoreCase("blue")) return 11;
            else if (teamName.equalsIgnoreCase("brown")) return 12;
            else if (teamName.equalsIgnoreCase("green")) return 13;
            else if (teamName.equalsIgnoreCase("red")) return 14;
            else if (teamName.equalsIgnoreCase("black")) return 15;
            else return null;
        }
    }
    Код:
        public void joinToFreeTeam(Player player)
        {
            if (readyArenas.size() >= 2)
            {
                for (Team team : readyArenas)
                {
                    for (int get = 0; get <= 32; get++)
                    {
                        if (team.playersInTeam.size() == get)
                        {
                            player.teleport(team.arena.positionSpawnOfArena);
                            team.playersInTeam.add(player);
                            playersInGame.add(player);
                            log.info("Игрок " + player.getName() + " вошел в игру.");
                            player.sendMessage(ChatColor.translateAlternateColorCodes('&', prefixPlugin + "Вы успешно вошли в игру."));
                            break;
                        }
                    }
                }
            }
            else player.sendMessage(ChatColor.translateAlternateColorCodes('&', prefixPlugin + "Не создано хотя-бы 2 арены&0! &cОбратитесь к администратору&0."));
        }
    
    Код:
        @EventHandler
        public void wffSpeak(PlayerChatEvent pce)
        {
            char[] messageChar = pce.getMessage().toCharArray();
            char firstChar = messageChar[0];
            if (firstChar == '!')
            {
                String newMessage = "";
                char[] chars = pce.getMessage().toCharArray();
                for (int get = 1; get <= pce.getMessage().length(); get++)
                {
                    newMessage += chars[get];
                }
                for (Team team : readyArenas)
                {
                    for (Player players : team.playersInTeam)
                    {
                        players.sendMessage(ChatColor.translateAlternateColorCodes('&', prefixPlugin + "&c[&2&lGlobal&5&lSpeak&c] &9" + pce.getPlayer().getName() + " &0: " + newMessage));
                    }
                }
            }
            else
            {
                for (Team team : readyArenas)
                {
                    if (team.playersInTeam.contains(pce.getPlayer()))
                    {
                        pce.setCancelled(true);
                        for (Player players : team.playersInTeam)
                        {
                            players.sendMessage(ChatColor.translateAlternateColorCodes('&', prefixPlugin + "&c[&1&lTeam&5&lSpeak&a] &9" + pce.getPlayer().getName() + " &0: &7" + pce.getMessage()));
                        }
                        break;
                    }
                }
            }
        }
    
    [DOUBLEPOST=1427211620][/DOUBLEPOST]Ну т.е. сообщение не редактируется.
     
  13. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Мои глаза..
     
  14. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ну, мой гавнокод - это совсем другая история![DOUBLEPOST=1427256796,1427214561][/DOUBLEPOST]Так подхелпуйте кто нить, а?[DOUBLEPOST=1427348038][/DOUBLEPOST]Ладно, тогда другой вопрос, как установить MOTD? Я нашел только getServer().getMotd() а что-то вроде setMotd() есть?
     
  15. Mr_Grom

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

    Баллы:
    78
    Имя в Minecraft:
    Failer
    @EventHandler
    public void onServerListPing(ServerListPingEvent event) {

    event.setMotd(ChatColor.GREEN + "MOTD");
    }
     
  16. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    А когда (как часто) Bukkit вызывает этот евент?
     
  17. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Каждый раз, когда сервер пингуется в списке серверов.
     
  18. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    "пингуеться"?.. Т.е. когда пользователь заходить в "сетевая игра" либо нажимает "обновить"? Спасибо.
     

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