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

Работа с pircbot' ом

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

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

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    l4legenda
    У меня несколько вопросов.
    1)Я запускаю бота через поток когда определенный игрок заходин на сервер. Но когда выхожу у меня не отключается поток. Пробовал через (Thread = null, Thread.stop(), Thread.interrupt()) и ничего из этого не отключает его.
    Код:
    public Thread bot;
    @EventHandler
       public void onJoin(PlayerJoinEvent e){
         Player pl = e.getPlayer();
         if(pl.getName().equals(s.Name)) {
           World world = e.getPlayer().getLocation().getWorld();
           
           Location loc = e.getPlayer().getLocation();
             
             bot = new Thread(new BotMain(s.Name_Chanel,pl, world, loc));
           bot.start();
           
           e.getPlayer().sendMessage(ChatColor.BLUE+"TwitchBot [ON]");
         }
    @EventHandler
       public void OnQuit(PlayerQuitEvent e){
         Player pl = e.getPlayer();
         if(pl.getName().equals(s.Name)) {
           bot.interrupt();
         }
         
       }
    
    public void run(){
         try {
           if (!isInterrupted()) {
             MyBot bot = new MyBot(pl,world,loc);
             System.out.print("3");
             bot.setVerbose(true);
             bot.connect("irc.twitch.tv", 6667, "oauth:slg8egbcpg7lwlfobhvsxjp6c8nenm");
             
             bot.joinChannel("#"+Chanel);
             
           
           }
         } catch (Exception e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
         }
       }
    
    ==========================================================
    2) Проблемы с кодировкой. Смысл скрипта просто в личку слать сообщения из твича, но у меня заглавные буквы не вывозяться
    Код:
    int hp_i = 20;
         byte ptext_m[] = message.getBytes();
         byte ptext_p[] = sender.getBytes();
         try {
           String U_m = new String(ptext_m, "UTF-8");
           String U_p = new String(ptext_p, "UTF-8");
           player.sendMessage("["+ChatColor.BLUE+U_p +ChatColor.WHITE+" ("+ChatColor.RED+Integer.toString(hp_i)+ChatColor.WHITE+"HP)" +ChatColor.WHITE+"] - "+U_m);
         } catch (UnsupportedEncodingException e) {e.printStackTrace();}
       
    
    ===================================================
    3) У меня вопрос, как можно использовать конфиг не в главном файле ? У меня выдает ошибку.
    Код:
    protected FileConfiguration config;
    
    public void onJoin(String channel, String sender, String login, String hostname) {
         this.getConfig().set("your boolean property", true);//здесь показыват что нет getConfig
      }
    
    ==================================================
    4)Выдает ошибку на призыве моба через команду.
    Код:
    @EventHandler
       public void onJoin(PlayerJoinEvent e){
         Player pl = e.getPlayer();
         if(pl.getName().equals(s.Name)) {
           World world = e.getPlayer().getLocation().getWorld();
           
           Location loc = e.getPlayer().getLocation();
             
             bot = new Thread(new BotMain(s.Name_Chanel,pl, world, loc));
           bot.start();
           
           e.getPlayer().sendMessage(ChatColor.BLUE+"TwitchBot [ON]");
         }
         
         
    String Chanel;
       Player pl;
       Location loc;
       World world;
       ;
       public BotMain(String chanel,Player pl,World world,Location loc){
         
         this.Chanel = chanel;
        this.pl = pl;
        this.loc = loc;
        this.world = world;
         
         
       }
         
       }
    public void run(){
         try {
           if (!isInterrupted()) {
             
           
    MyBot bot = new MyBot(pl,world,loc);
         
         bot.setVerbose(true);
         bot.connect("irc.twitch.tv", 6667, "oauth:slg8egbcpg7lwlfobhvsxjp6c8nenm");
         
         bot.joinChannel("#"+Chanel);
         
       
           }
         } catch (Exception e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
         }
       }
    public Player player;
       public World world;
       public Location loc;
       
       public MyBot(Player pl, World world,Location loc) {
         System.out.print("4");
         this.setName("minebot_l4");
         this.player = pl;
         this.world = world;
         this.loc = loc;
         
         
       }
    public void mob(String sender){
       
         
         
         Cow cow = (Cow) world.spawn(loc, Cow.class);
         System.out.print("1");
         cow.setCustomName(ChatColor.RED + "Mr Cow");
         cow.setCustomNameVisible(true);
         cow.setBaby();
         cow.setAgeLock(true);
         
       }
       
    
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    l4legenda

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    l4legenda
    Ошибка с кодировкой
    [​IMG]
    ошибка со спавном мобов
    [​IMG]
     
  4. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    1. Не надо нуллить. Как ты мог заметить, метод stop() - устарел, и бросает NoSuchMethodError
    Либо thread.join(); либо через переменную boolean.
    3. public static YourPlugin instance;

    В конструкторе с плагином:

    instance = this;

    4. Нельзя спавнить моба не в главном потоке. Синхронизация.
     
  5. Автор темы
    l4legenda

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    l4legenda
    По поводу 1)
    По поводу 1 пункта. бот работает через while, а thread.join() ждет пока закончит работу скрипт. Поэтому не подходит. А зайти в существующийся поток не могу. Он создает новый.
     
  6. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Я бы oauth ключик не палил вот так просто.
    Не нужно запускать в новом потоке pircbot'а. Особенно каждый раз, когда заходит новый игрок.
    bot.setEncoding("UTF-8");
    [​IMG]
     
  7. Автор темы
    l4legenda

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    l4legenda
    Что за атрибут bot? И как можно отключить бота ?
     
  8. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ты читал PircBot.java? Если нет, то стоит почитать.
     
  9. Автор темы
    l4legenda

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    l4legenda
    Спасибо больше. Разобрался.[DOUBLEPOST=1492934170,1492933736][/DOUBLEPOST]
    Но мне надо чтобы когда сервер перезагружается то бот отключается. Но нельзя вызвать из основного класса отключение.
     
  10. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    В каком смысле "нельзя"?
     
  11. Автор темы
    l4legenda

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    l4legenda
    Ну можно или на прямую отключить или включить скрипт и отключить. Но на прямую нельзя так как функция не статическая, а включить так же нельзя , так как он запустит новый поток.
     
  12. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    HashSet?
    HashMap?
     
  13. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну в onDisable вызывай у каждого disconnect()
    А вообще запускай только одного бота и пересылай сообщения из чанов в нужные места.
     
    Последнее редактирование: 24 апр 2017
  14. Автор темы
    l4legenda

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    l4legenda
    У чего вызвать disconnect ? Ну теперь я одного только вызываю.
    И у меня еще один вопрос, как можно работать с конфигом в pircbot-е? Мне надо чтобы при заходе на twitch канал, человека добавляло в config. И как в Config можно перебирать ключи ?
     
  15. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    pircbot это просто irc клиент. Всю обвязку делаешь сам, ручками.
    .getKeys(false)
     

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