- Баллы
- 76
- Имя в Minecraft
- EnderBro3D
Каналы зарегистрированы, названия: ShadowOut (из Spigot) и ShadowReturn (из BungeeCord)
Ошибок в консоль не выдаёт.
Делал почти всё из: https://www.spigotmc.org/threads/tutorial-advanced-plugin-messaging-spigot-bungeecord.53440/
В консоль (bungeecord) пишет только:

а должно писаться и ShadowOut.
Пожалуйста помогите.
BungeeCord:
Spigot:
Java:
BungeeCord.getInstance().registerChannel("ShadowReturn");
BungeeCord.getInstance().registerChannel("ShadowOut");
Java:
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "ShadowOut");
Bukkit.getMessenger().registerIncomingPluginChannel(this, "ShadowReturn", pcl = new PluginChannelListener());
Ошибок в консоль не выдаёт.
Java:
package mc.ShadowMine.api;
import org.apache.commons.lang3.ArrayUtils;
import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener;
import java.io.*;
import java.util.HashMap;
public class PluginChannelListener implements PluginMessageListener {
private HashMap<Player, String[]> s = new HashMap<>();
public void flush(Player p) {
s.remove(p);
}
public String[] read(Player p) {
return s.get(p);
}
public void add(Player p, String val) {
if(!s.containsKey(p)) {
s.put(p, new String[]{val});
return;
}
s.put(p, ArrayUtils.add(s.get(p), val));
}
@Override
public synchronized void onPluginMessageReceived(String channel, Player player, byte[] message) {
DataInputStream in = new DataInputStream(new ByteArrayInputStream(message));
try {
String subchannel = in.readUTF();
Log.get().debug("[PluginChannelListener] Мы получили данные " + subchannel + ":" + channel);
if(subchannel.equals("get")){
String input = in.readUTF();
add(player, input);
notifyAll();
}
} catch (IOException e) {
Log.get().fatal("Произошла ошибка во время чтения данных", e);
}
}
public synchronized void set(Player p, Typeable t, String value) {
Log.get().debug("[PluginChannelListener] Устанавливаем " + t.getName());
send(p, "set", t.getName(), value);
}
public synchronized String get(Player p, Typeable t) {
flush(p);
Log.get().debug("[PluginChannelListener] Получаем данные " + t.getName());
send(p, "get", t.getName());
try {
wait();
} catch(InterruptedException e){}
return read(p)[0];
}
private void send(Player p, String channel, String... sub){
ByteArrayOutputStream b = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(b);
try {
out.writeUTF(channel);
for(String s:sub) out.writeUTF(s);
} catch (IOException e) {
e.printStackTrace();
}
p.sendPluginMessage(ShadowMinePlugin.getInstance(), "ShadowOut", b.toByteArray());
}
}
Java:
package mc.ShadowMine.bungee;
import mc.ShadowMine.bungee.api.OfflineData;
import mc.ShadowMine.bungee.api.donate.Donate;
import mc.ShadowMine.bungee.api.economy.Money;
import mc.ShadowMine.bungee.api.economy.Multiply;
import mc.ShadowMine.bungee.api.leveling.Exp;
import mc.ShadowMine.bungee.api.leveling.Level;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.Connection;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import java.io.*;
import java.net.InetSocketAddress;
/////////////////////////
// Автор ender
// Дата 04/08/17
////////////////////////
public class EventListener implements Listener {
private ShadowMinePlugin plugin;
public EventListener(ShadowMinePlugin plugin) {
this.plugin = plugin;
}
@EventHandler
public void on(PostLoginEvent e) {
ProxiedPlayer p = e.getPlayer();
OfflineData d = OfflineData.getData(p.getUniqueId());
d.update(p);
plugin.getLogger().info("[uuid: " + d.getUniqueId() + ", address: " + d.getAddress() + ", name: " + d.getName() + "] Подключился.");
}
@EventHandler
public void on(PluginMessageEvent event) {
Log.get().debug(event.getTag());
if(!event.getTag().equalsIgnoreCase("ShadowOut")) return;
DataInputStream in = new DataInputStream(new ByteArrayInputStream(event.getData()));
try {
String channel = in.readUTF();
Connection r = event.getReceiver();
ProxiedPlayer player = BungeeCord.getInstance().getPlayer(r.toString());
String input = in.readUTF(); // the inputstring
Log.get().debug("[EventListener] Мы получили данные " + r + ":" + channel + ":" + input);
OfflineData d = OfflineData.getData(r.toString());
Level lvl = Level.getLevel(d);
Money m = Money.getMoney(d);
Exp e = Exp.getExp(d);
Donate don = Donate.getDonate(d);
Multiply mu = Multiply.getMultiply(d);
switch (input.toLowerCase()) {
case "level":
switch (channel) {
case "get":
send(channel, String.valueOf(lvl.getLevel()), player);
case "set":
lvl.setLevel(Integer.parseInt(in.readUTF()));
default:
break;
}
break;
case "offline":
switch (channel) {
case "get":
send(channel, d.getName() + ":" + d.getAddress() + ":" + d.getUniqueId(), player);
case "set":
lvl.setLevel(Integer.parseInt(in.readUTF()));
default:
break;
}
break;
case "multiply":
switch (channel) {
case "get":
send(channel, String.valueOf(mu.getMultiply()), player);
case "set":
lvl.setLevel(Integer.parseInt(in.readUTF()));
default:
break;
}
break;
case "money":
switch (channel) {
case "get":
send(channel, String.valueOf(m.getMoney()), player);
case "set":
lvl.setLevel(Integer.parseInt(in.readUTF()));
default:
break;
}
break;
case "exp":
switch (channel) {
case "get":
send(channel, String.valueOf(e.getExp()), player);
case "set":
lvl.setLevel(Integer.parseInt(in.readUTF()));
default:
break;
}
break;
case "donate":
switch (channel) {
case "get":
send(channel, don.getGroup(), player);
case "set":
lvl.setLevel(Integer.parseInt(in.readUTF()));
default:
break;
}
break;
default:
InetSocketAddress addr = r.getAddress();
Log.get().info("[" + addr.getAddress().getHostAddress() + ":" + addr.getPort() + "] Не удалось найти тип данных: " + input);
break;
}
} catch (IOException ex) {
Log.get().error("Произошла ошибка во время чтения", ex);
}
}
private void send(String channel, String message, ProxiedPlayer p) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(stream);
try {
out.writeUTF(channel);
out.writeUTF(message);
} catch (IOException e) {
e.printStackTrace();
}
p.sendData("ShadowReturn", stream.toByteArray());
}
}
Делал почти всё из: https://www.spigotmc.org/threads/tutorial-advanced-plugin-messaging-spigot-bungeecord.53440/
В консоль (bungeecord) пишет только:

а должно писаться и ShadowOut.
Пожалуйста помогите.
Последнее редактирование: