1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Вопросы

Тема в разделе "Разработка плагинов для новичков", создана пользователем AxmeD, 22 май 2013.

Статус темы:
Закрыта.
  1. Автор темы
    AxmeD

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

    Баллы:
    103
    Как мне получить список онлайн игроков, находящихся в опред. группе? Пробовал много чего, но не получилось ничего.
    Разобрался

    Как сделать cooldown между ивентами? То есть, вот мой код
    Разобрался
     
  2. Автор темы
    AxmeD

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

    Баллы:
    103
    Появился ещё один вопрос. Как удалить предмет из инвентаря.
    Этот код удаляет все жезлы, которые лежат по-одиночке в инвентаре, нихарашо.
    А также
    Срабатывает даже если у меня больше 1 жезла в инвентаре.
     
  3. gamelax

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

    Баллы:
    103
    Имя в Minecraft:
    gamelax
    Здравствуйте.

    Зафиксируйте время окончания cooldown и в дальнейшем сверяйте с ним.

    По поводу остального, в Вашем коде генерируется ItemStack, который никогда не будет равен используемым. Пробегитесь по списку и найдите необходимые предметы по ID и Meta.
     
    AxmeD нравится это.
  4. Автор темы
    AxmeD

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

    Баллы:
    103
    Это-то я и не знаю как сделать :(
     
  5. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Способов множество. Можно запустить шедулер, можно записать время с последнего взаимодействия..
     
  6. Автор темы
    AxmeD

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

    Баллы:
    103
    Я новичок, я не знаю как это сделать...
    С первыми двумя разобрался, Спасибо Den_Abr и gamelax
    Делал плагин дальше и наткнулся на такое:
    Мне нужно было, чтобы при входе в игру, игроку в config.yml давался boolean cuffed: false
    Вот, что я сделал:
    Код:
    public class AxmeDRP extends JavaPlugin implements Listener {
        public static final Logger _log = Logger.getLogger("Minecraft");
        private EconomyResponse depositPlayer;
        @Override
        public void onEnable() {
            this.getServer().getPluginManager().registerEvents(new AxmeDRP(), this);
            _log.info("[AxmeD RP] enabled");
            File fileConf = new File(getDataFolder(), "config.yml");
            if(!fileConf.exists()){
                InputStream resourceAsStream = AxmeDRP.class.getResourceAsStream("/config.yml");
                getDataFolder().mkdirs();
                try {
                    FileOutputStream fos = new FileOutputStream(fileConf);
                    byte[] buff = new byte[65536];
                    int n;
                    while((n = resourceAsStream.read(buff)) > 0){
                        fos.write(buff, 0, n);
                        fos.flush();
                    }
                    fos.close();
                    buff = null;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            FileConfiguration conf = YamlConfiguration.loadConfiguration(fileConf);
        }
        @EventHandler
        public void onJoin(PlayerJoinEvent e){
            Player player = e.getPlayer();
            if(!this.getConfig().contains(player.getName() + ".cuffed")){
            this.getConfig().set(player.getName() + ".cuffed", false);
            this.saveConfig();
        }else{
            this.getConfig().set(player.getName() + ".cuffed", false);
            this.saveConfig();
        }
        }
    и так далее...
    Вроде всё нормально, в эклипсе ошибок нет, но консоль выдаёт следующее:
     
    ВремяПриключений нравится это.
  7. gamelax

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

    Баллы:
    103
    Имя в Minecraft:
    gamelax
    Зачем фиксировать и проверять "cuffed", если в любой ситуации оно примет значение false?:eek:
    Создайте отдельный class для Listener'a, а не создавайте еще один основной класс.
    Набросал пример в блокноте:
    Код:
    public class PlayerListener implements Listener
    {
      private AxmeDRP plugin;
     
        public PlayerListener(AxmeDRP plugin)
        {
          this.plugin = plugin;
        }
     
     
        @EventHandler(priority = EventPriority.LOW)
        public void onPlayerJoinEvent(PlayerJoinEvent event)
        {
            Player player = e.getPlayer();
            String Section = new StringBuilder().append(player.getName()).append(".cuffed").toString();
         
              if (!plugin.getConfig().contains(Section))
              {
                plugin.getConfig().set(Section, false);
                plugin.SaveConfig();
              }
              else
              {
                plugin.getConfig().set(Section, false);
                plugin.SaveConfig();
              }
        }
    }
     
    AxmeD нравится это.
  8. Автор темы
    AxmeD

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

    Баллы:
    103
    Мне нужен этот boolean, чтобы использовать в дальнейшем, то есть, когда я буду "одевать наручники" на игрока.
     
    zuma2 и DavidShabaev нравится это.
  9. gamelax

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

    Баллы:
    103
    Имя в Minecraft:
    gamelax
    Фиксируйте обратное значение (true), так будет гораздо разумнее.
     
  10. Автор темы
    AxmeD

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

    Баллы:
    103
    Все равно ошибка именно из-за this.getConfig(), что бы я ни написал дальше. Странно то, что если использовать подобное не в ивенте, а в команде, то всё норм :confused:
     
  11. gamelax

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

    Баллы:
    103
    Имя в Minecraft:
    gamelax
    Вы вновь создаете дубликат основного класса для прослушивания эвентов...
     
  12. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ты создал переменную conf. Используй ее для работы с конфигом
     
  13. gamelax

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

    Баллы:
    103
    Имя в Minecraft:
    gamelax
    Ошибка кроется в другом месте, внимательнее приглядитесь к его коду...
    Код:
    public class AxmeDRP extends JavaPlugin implements Listener
    Код:
    this.getServer().getPluginManager().registerEvents(new AxmeDRP(), this);
     
  14. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А ну да, не увидел
     
  15. Автор темы
    AxmeD

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

    Баллы:
    103
    Ещё раз спасибо Den_Abr и gamelax.
    Проблему решил. Тему пока закрывать не буду, оставлю на потом, чтоб новые не создавать, если появятся вопросы. )
    Вот ещё проблема возникла. Вот мой код
    Код:
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e){
            final Player player = e.getPlayer();
            final String playername = player.getName();
            final File fileConf = new File(getDataFolder(), "config.yml");
            final FileConfiguration conf = YamlConfiguration.loadConfiguration(fileConf);
            if(this.getConfig().getInt("Guards.wanted." + player.getName()) == 1){
                player.sendMessage(ChatColor.RED + "Вы находитесь в розыске!");
                this.saveConfig();
                Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable(){
                    @Override
                    public void run(){
                        this.getConfig().set("Guards.wanted." + playername, 0);
                        player.sendMessage(ChatColor.YELLOW + "Lol");
                        try {
                            conf.save(fileConf);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
     
                    private MemorySection getConfig() {
                            conf.get("fileConf");
                            return conf;
                        }   
                }, 50 * 10);
    }
    Так вот, если игрок выйдет, то this.getConfig().set("Guards.wanted." + playername, 0) все равно произойдет. Пробовал if(player.isOnline()), но не помогло. Как сделать проверку на онлайн?

    UPD: На самом деле работает, я просто кое-что не исправил ._.
     
  16. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Зачем добавляться ко всем девелоперам в скайп а потом продолжать насиловать форум?)
     
  17. Автор темы
    AxmeD

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

    Баллы:
    103
    Я стараюсь их не беспокоить :D
     
  18. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    На форуме отвечают эти же люди)
     
Статус темы:
Закрыта.

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