Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

[Решено] Переход с сервера на сервер на BungeeCord(Bukkit плагин)

Sonicxd2

Активный участник
Пользователь
Баллы
76
Нужна помощь с переходом с сервера на сервер на BungeeCord.
 
Кстати, интересная тема. Как взаимодействовать bukkit плагинами с bungee?
 
Поднимаю старую тему, что-то не могу врубиться, как правильно с этим работать, пытаюсь сделать так, чтобы при вводе команды "survival" игроку отправляло сообщение с количеством онлайна на нем
Java:
package ru.stuvanya.bungeescoreboard;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;

public class Main extends JavaPlugin implements PluginMessageListener {
    @Override
      public void onEnable() {
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
      }
      @Override
      public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("BungeeCord")) {
          return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String subchannel = in.readUTF();
        if (subchannel.equals("SomeSubChannel")) {
          // Use the code sample in the 'Response' sections below to read
          // the data.
        }
      }

      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("survival")) {
              ByteArrayDataOutput out = ByteStreams.newDataOutput();
              out.writeUTF("PlayerCount");
              out.writeUTF("survival");
              String server = in.readUTF(); // Name of server, as given in the arguments
              int playercount = in.readInt();;
              sender.sendMessage(ChatColor.GREEN + playercount);
          }
        return true;
      }

}
 
Поднимаю старую тему, что-то не могу врубиться, как правильно с этим работать, пытаюсь сделать так, чтобы при вводе команды "survival" игроку отправляло сообщение с количеством онлайна на нем
Java:
package ru.stuvanya.bungeescoreboard;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;

public class Main extends JavaPlugin implements PluginMessageListener {
    @Override
      public void onEnable() {
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
      }
      @Override
      public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("BungeeCord")) {
          return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String subchannel = in.readUTF();
        if (subchannel.equals("SomeSubChannel")) {
          // Use the code sample in the 'Response' sections below to read
          // the data.
        }
      }

      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("survival")) {
              ByteArrayDataOutput out = ByteStreams.newDataOutput();
              out.writeUTF("PlayerCount");
              out.writeUTF("survival");
              String server = in.readUTF(); // Name of server, as given in the arguments
              int playercount = in.readInt();;
              sender.sendMessage(ChatColor.GREEN + playercount);
          }
        return true;
      }

}
О боже. В onCommand просто отправляй запрос, в onPluginMessageReceived получай данные.
 
О боже. В onCommand просто отправляй запрос, в onPluginMessageReceived получай данные.
вот такой код:
Java:
package ru.stuvanya.bungeescoreboard;

//import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;

public class Main extends JavaPlugin implements PluginMessageListener {
    @Override
      public void onEnable() {
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
      }
      @Override
      public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("BungeeCord")) {
          return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String server = in.readUTF();
        int playercount = in.readInt();
        player.sendMessage(server);
        player.sendMessage(Integer.toString(playercount));

      }

      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("survival")) {
              ByteArrayDataOutput out = ByteStreams.newDataOutput();
              out.writeUTF("PlayerCount");
              out.writeUTF("survival");
          }
        return true;
      }

}
выводит такую ересь:
upload_2015-3-15_21-31-18.png
 
вот такой код:
Java:
package ru.stuvanya.bungeescoreboard;

//import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;

public class Main extends JavaPlugin implements PluginMessageListener {
    @Override
      public void onEnable() {
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
      }
      @Override
      public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("BungeeCord")) {
          return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String server = in.readUTF();
        int playercount = in.readInt();
        player.sendMessage(server);
        player.sendMessage(Integer.toString(playercount));

      }

      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("survival")) {
              ByteArrayDataOutput out = ByteStreams.newDataOutput();
              out.writeUTF("PlayerCount");
              out.writeUTF("survival");
          }
        return true;
      }

}
выводит такую ересь:
Посмотреть вложение 31054
Ты зачем создаешь новый ByteArrayDataOutput в onCommand просто так? Тебе надо отправить этот запрос от любого игрока.
 
Прямо под тем куском кода подпиши:
((Player) sender).sendPluginMessage(this, "BungeeCord", out.toByteArray());

И да, добавь проверку на игрока там.
ща попробую
Прямо под тем куском кода подпиши:
((Player) sender).sendPluginMessage(this, "BungeeCord", out.toByteArray());

И да, добавь проверку на игрока там.
Код:
public class Main extends JavaPlugin implements PluginMessageListener {
    @Override
      public void onEnable() {
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
      }
      @Override
      public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("BungeeCord")) {
          return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String server = in.readUTF();
        int playercount = in.readInt();
        /*player.sendMessage(server);
        player.sendMessage(Integer.toString(playercount));*/

      }

      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("survival")) {
              ByteArrayDataOutput out = ByteStreams.newDataOutput();
              out.writeUTF("PlayerCount");
              out.writeUTF("survival");
              ((Player) sender).sendPluginMessage(this, "BungeeCord", out.toByteArray());
          }
        return true;
      }

}
Так?
 
ща попробую

Код:
public class Main extends JavaPlugin implements PluginMessageListener {
    @Override
      public void onEnable() {
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
      }
      @Override
      public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("BungeeCord")) {
          return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String server = in.readUTF();
        int playercount = in.readInt();
        /*player.sendMessage(server);
        player.sendMessage(Integer.toString(playercount));*/

      }

      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("survival")) {
              ByteArrayDataOutput out = ByteStreams.newDataOutput();
              out.writeUTF("PlayerCount");
              out.writeUTF("survival");
              ((Player) sender).sendPluginMessage(this, "BungeeCord", out.toByteArray());
          }
        return true;
      }

}
Так?
Да.
 
Ну так ты закоментил
/*player.sendMessage(server);
player.sendMessage(Integer.toString(playercount));*/
теперь опять флудит как на скрине
выводит такую ересь:
upload_2015-3-15_21-31-18-png.31054
 
теперь опять флудит как на скрине
Код:
 @Override
  public void onPluginMessageReceived(String channel, Player player, byte[] message) {
    if (!channel.equals("BungeeCord")) {
      return;
    }
    ByteArrayDataInput in = ByteStreams.newDataInput(message);
    String subchannel = in.readUTF();
    if (subchannel.equals("PlayerCount")) {
       String server = in.readUTF();
       int playercount = in.readInt();
    }
  }
 
Код:
 @Override
  public void onPluginMessageReceived(String channel, Player player, byte[] message) {
    if (!channel.equals("BungeeCord")) {
      return;
    }
    ByteArrayDataInput in = ByteStreams.newDataInput(message);
    String subchannel = in.readUTF();
    if (subchannel.equals("PlayerCount")) {
       String server = in.readUTF();
       int playercount = in.readInt();
    }
  }
Так правильно?
Java:
public class Main extends JavaPlugin implements PluginMessageListener {
    @Override
      public void onEnable() {
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
      }
     @Override
      public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("BungeeCord")) {
          return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String subchannel = in.readUTF();
        if (subchannel.equals("PlayerCount")) {
           String server = in.readUTF();
           int playercount = in.readInt();
           player.sendMessage(server);
           player.sendMessage(Integer.toString(playercount));
        }
     }
      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("survival")) {
              ByteArrayDataOutput out = ByteStreams.newDataOutput();
              out.writeUTF("PlayerCount");
              out.writeUTF("survival");
              ((Player) sender).sendPluginMessage(this, "BungeeCord", out.toByteArray());
          }
        return true;
      }

}
 

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

Назад
Верх