Работа с pircbot' ом

l4legenda

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
l4legenda
У меня несколько вопросов.
1)Я запускаю бота через поток когда определенный игрок заходин на сервер. Но когда выхожу у меня не отключается поток. Пробовал через (Thread = null, Thread.stop(), Thread.interrupt()) и ничего из этого не отключает его.
Java:
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) Проблемы с кодировкой. Смысл скрипта просто в личку слать сообщения из твича, но у меня заглавные буквы не вывозяться
Java:
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) У меня вопрос, как можно использовать конфиг не в главном файле ? У меня выдает ошибку.
Java:
protected FileConfiguration config;

public void onJoin(String channel, String sender, String login, String hostname) {
     this.getConfig().set("your boolean property", true);//здесь показыват что нет getConfig
  }
==================================================
4)Выдает ошибку на призыве моба через команду.
Java:
@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);
     
   }
 
Ошибка с кодировкой
01258b0729a9.png

ошибка со спавном мобов
2556d1fa7879.png
 
1. Не надо нуллить. Как ты мог заметить, метод stop() - устарел, и бросает NoSuchMethodError
Либо thread.join(); либо через переменную boolean.
3. public static YourPlugin instance;

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

instance = this;

4. Нельзя спавнить моба не в главном потоке. Синхронизация.
 
По поводу 1)
1. Не надо нуллить. Как ты мог заметить, метод stop() - устарел, и бросает NoSuchMethodError
Либо thread.join(); либо через переменную boolean.
3. public static YourPlugin instance;

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

instance = this;

4. Нельзя спавнить моба не в главном потоке. Синхронизация.
По поводу 1 пункта. бот работает через while, а thread.join() ждет пока закончит работу скрипт. Поэтому не подходит. А зайти в существующийся поток не могу. Он создает новый.
 
Я бы oauth ключик не палил вот так просто.
Не нужно запускать в новом потоке pircbot'а. Особенно каждый раз, когда заходит новый игрок.
Проблемы с кодировкой. Смысл скрипта просто в личку слать сообщения из твича, но у меня заглавные буквы не вывозяться
bot.setEncoding("UTF-8");
26087d3369.png
 
Я бы oauth ключик не палил вот так просто.
Не нужно запускать в новом потоке pircbot'а. Особенно каждый раз, когда заходит новый игрок.
bot.setEncoding("UTF-8");
26087d3369.png
Что за атрибут bot? И как можно отключить бота ?
 
Ты читал PircBot.java? Если нет, то стоит почитать.
Спасибо больше. Разобрался.
Ты читал PircBot.java? Если нет, то стоит почитать.
Но мне надо чтобы когда сервер перезагружается то бот отключается. Но нельзя вызвать из основного класса отключение.
 
В каком смысле "нельзя"?
Ну можно или на прямую отключить или включить скрипт и отключить. Но на прямую нельзя так как функция не статическая, а включить так же нельзя , так как он запустит новый поток.
 
Ну можно или на прямую отключить или включить скрипт и отключить. Но на прямую нельзя так как функция не статическая, а включить так же нельзя , так как он запустит новый поток.
HashSet?
HashMap?
 
Но мне надо чтобы когда сервер перезагружается то бот отключается. Но нельзя вызвать из основного класса отключение.
Ну в onDisable вызывай у каждого disconnect()
А вообще запускай только одного бота и пересылай сообщения из чанов в нужные места.
 
Последнее редактирование:
Ну в onDisable вызывай у каждого disconnect()
А вообще запускай только одного бота и пересылай сообщения из чанов в нужные места.
У чего вызвать disconnect ? Ну теперь я одного только вызываю.
И у меня еще один вопрос, как можно работать с конфигом в pircbot-е? Мне надо чтобы при заходе на twitch канал, человека добавляло в config. И как в Config можно перебирать ключи ?
 
У чего вызвать disconnect ? Ну теперь я одного только вызываю.
И у меня еще один вопрос, как можно работать с конфигом в pircbot-е? Мне надо чтобы при заходе на twitch канал, человека добавляло в config.
pircbot это просто irc клиент. Всю обвязку делаешь сам, ручками.
И как в Config можно перебирать ключи ?
.getKeys(false)
 
Назад
Верх