SubServers-2/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java

189 lines
8.4 KiB
Java
Raw Normal View History

2019-04-18 16:02:09 +02:00
package net.ME1312.SubServers.Client.Bukkit.Network;
2019-04-29 17:05:06 +02:00
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Container.NamedContainer;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
2019-05-10 04:43:34 +02:00
import net.ME1312.Galaxi.Library.Util;
2019-04-18 16:02:09 +02:00
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Client.SubDataClient;
import net.ME1312.SubData.Client.SubDataProtocol;
2019-05-11 23:23:31 +02:00
import net.ME1312.SubServers.Client.Bukkit.Event.SubNetworkConnectEvent;
2019-04-18 16:02:09 +02:00
import net.ME1312.SubServers.Client.Bukkit.Event.SubNetworkDisconnectEvent;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.*;
import net.ME1312.SubServers.Client.Bukkit.SubAPI;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
import org.bukkit.Bukkit;
import java.io.IOException;
import java.net.InetAddress;
2019-05-10 04:43:34 +02:00
import java.util.HashMap;
2019-04-18 16:02:09 +02:00
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class SubProtocol extends SubDataProtocol {
private static SubProtocol instance;
2019-04-29 17:05:06 +02:00
private SubProtocol() {}
2019-04-18 16:02:09 +02:00
@SuppressWarnings("deprecation")
public static SubProtocol get() {
if (instance == null) {
2019-05-10 06:04:10 +02:00
instance = new SubProtocol();
SubPlugin plugin = SubAPI.getInstance().getInternals();
2019-04-18 16:02:09 +02:00
instance.setName("SubServers 2");
instance.addVersion(new Version("2.16a+"));
2019-04-18 16:02:09 +02:00
2019-06-18 02:20:46 +02:00
// 00-0F: Object Link Packets
2019-04-18 16:02:09 +02:00
instance.registerPacket(0x0002, PacketLinkServer.class);
instance.registerPacket(0x0002, new PacketLinkServer(plugin));
2019-06-18 02:20:46 +02:00
// 10-2F: Download Packets
2019-04-18 16:02:09 +02:00
instance.registerPacket(0x0010, PacketDownloadLang.class);
instance.registerPacket(0x0011, PacketDownloadPlatformInfo.class);
instance.registerPacket(0x0012, PacketDownloadProxyInfo.class);
instance.registerPacket(0x0013, PacketDownloadHostInfo.class);
instance.registerPacket(0x0014, PacketDownloadGroupInfo.class);
instance.registerPacket(0x0015, PacketDownloadServerInfo.class);
instance.registerPacket(0x0016, PacketDownloadPlayerInfo.class);
2019-05-11 23:23:31 +02:00
instance.registerPacket(0x0017, PacketCheckPermission.class);
2019-10-19 00:24:58 +02:00
instance.registerPacket(0x0018, PacketCheckPermissionResponse.class);
2019-04-18 16:02:09 +02:00
instance.registerPacket(0x0010, new PacketDownloadLang(plugin));
instance.registerPacket(0x0011, new PacketDownloadPlatformInfo());
instance.registerPacket(0x0012, new PacketDownloadProxyInfo());
instance.registerPacket(0x0013, new PacketDownloadHostInfo());
instance.registerPacket(0x0014, new PacketDownloadGroupInfo());
instance.registerPacket(0x0015, new PacketDownloadServerInfo());
instance.registerPacket(0x0016, new PacketDownloadPlayerInfo());
2019-05-11 23:23:31 +02:00
instance.registerPacket(0x0017, new PacketCheckPermission());
2019-10-19 00:24:58 +02:00
instance.registerPacket(0x0018, new PacketCheckPermissionResponse());
2019-04-18 16:02:09 +02:00
2019-06-18 02:20:46 +02:00
// 30-4F: Control Packets
2019-05-09 22:17:15 +02:00
instance.registerPacket(0x0030, PacketCreateServer.class);
instance.registerPacket(0x0031, PacketAddServer.class);
instance.registerPacket(0x0032, PacketStartServer.class);
instance.registerPacket(0x0033, PacketUpdateServer.class);
instance.registerPacket(0x0034, PacketEditServer.class);
instance.registerPacket(0x0035, PacketRestartServer.class);
instance.registerPacket(0x0036, PacketCommandServer.class);
instance.registerPacket(0x0037, PacketStopServer.class);
instance.registerPacket(0x0038, PacketRemoveServer.class);
instance.registerPacket(0x0039, PacketDeleteServer.class);
2019-05-09 22:17:15 +02:00
instance.registerPacket(0x0030, new PacketCreateServer());
instance.registerPacket(0x0031, new PacketAddServer());
instance.registerPacket(0x0032, new PacketStartServer());
instance.registerPacket(0x0033, new PacketUpdateServer());
instance.registerPacket(0x0034, new PacketEditServer());
instance.registerPacket(0x0035, new PacketRestartServer());
instance.registerPacket(0x0036, new PacketCommandServer());
instance.registerPacket(0x0037, new PacketStopServer());
instance.registerPacket(0x0038, new PacketRemoveServer());
instance.registerPacket(0x0039, new PacketDeleteServer());
2019-04-18 16:02:09 +02:00
2019-06-18 02:20:46 +02:00
// 70-7F: External Misc Packets
2019-04-18 16:02:09 +02:00
//instance.registerPacket(0x0070, PacketInExRunEvent.class);
//instance.registerPacket(0x0071, PacketInExReset.class);
//instance.registerPacket(0x0072, PacketInExReload.class);
instance.registerPacket(0x0070, new PacketInExRunEvent(plugin));
instance.registerPacket(0x0071, new PacketInExReset());
instance.registerPacket(0x0072, new PacketInExReload(plugin));
}
return instance;
}
2019-05-13 05:28:27 +02:00
@SuppressWarnings("deprecation")
private Logger getLogger(int channel) {
SubPlugin plugin = SubAPI.getInstance().getInternals();
Logger log = Logger.getAnonymousLogger();
log.setUseParentHandlers(false);
log.addHandler(new Handler() {
private boolean open = true;
private String prefix = "SubData" + ((channel != 0)? "/Sub-"+channel:"");
@Override
public void publish(LogRecord record) {
if (open) {
if (plugin.isEnabled()) {
Bukkit.getScheduler().runTask(plugin, () -> Bukkit.getLogger().log(record.getLevel(), prefix + " > " + record.getMessage(), record.getParameters()));
} else {
Bukkit.getLogger().log(record.getLevel(), prefix + " > " + record.getMessage(), record.getParameters());
}
}
}
@Override
public void flush() {
}
@Override
public void close() throws SecurityException {
open = false;
}
});
return log;
}
2019-05-10 04:43:34 +02:00
@Override
protected SubDataClient sub(Callback<Runnable> scheduler, Logger logger, InetAddress address, int port, ObjectMap<?> login) throws IOException {
2019-05-10 04:43:34 +02:00
SubPlugin plugin = SubAPI.getInstance().getInternals();
HashMap<Integer, SubDataClient> map = Util.getDespiteException(() -> Util.reflect(SubPlugin.class.getDeclaredField("subdata"), plugin), null);
int channel = 1;
while (map.keySet().contains(channel)) channel++;
final int fc = channel;
SubDataClient subdata = super.open(scheduler, getLogger(fc), address, port, login);
2019-05-10 04:43:34 +02:00
map.put(fc, subdata);
2019-05-11 23:23:31 +02:00
subdata.sendPacket(new PacketLinkServer(plugin, fc));
2019-05-10 04:43:34 +02:00
subdata.on.closed(client -> map.remove(fc));
return subdata;
}
2019-04-18 16:02:09 +02:00
@SuppressWarnings("deprecation")
@Override
2019-04-29 17:05:06 +02:00
public SubDataClient open(Callback<Runnable> scheduler, Logger logger, InetAddress address, int port) throws IOException {
2019-04-18 16:02:09 +02:00
SubPlugin plugin = SubAPI.getInstance().getInternals();
2019-05-10 04:43:34 +02:00
SubDataClient subdata = super.open(scheduler, logger, address, port);
HashMap<Integer, SubDataClient> map = Util.getDespiteException(() -> Util.reflect(SubPlugin.class.getDeclaredField("subdata"), plugin), null);
2019-04-18 16:02:09 +02:00
2019-05-11 23:23:31 +02:00
subdata.sendPacket(new PacketLinkServer(plugin, 0));
subdata.sendPacket(new PacketDownloadLang());
subdata.on.ready(client -> Bukkit.getPluginManager().callEvent(new SubNetworkConnectEvent((SubDataClient) client)));
2019-04-18 16:02:09 +02:00
subdata.on.closed(client -> {
SubNetworkDisconnectEvent event = new SubNetworkDisconnectEvent(client.get(), client.name());
2019-05-10 04:43:34 +02:00
if (plugin.isEnabled()) {
2019-10-19 22:38:44 +02:00
Bukkit.getPluginManager().callEvent(event);
Util.isException(() -> Util.reflect(SubPlugin.class.getDeclaredMethod("connect", NamedContainer.class), plugin, client));
2019-10-19 00:24:58 +02:00
} else map.put(0, null);
2019-04-18 16:02:09 +02:00
});
return subdata;
}
2019-04-29 17:05:06 +02:00
@SuppressWarnings("deprecation")
@Override
public SubDataClient open(Logger logger, InetAddress address, int port) throws IOException {
SubPlugin plugin = SubAPI.getInstance().getInternals();
return open(event -> {
if (plugin.isEnabled()) Bukkit.getScheduler().runTask(plugin, event);
else event.run();
}, logger, address, port);
}
public SubDataClient open(InetAddress address, int port) throws IOException {
2019-05-13 05:28:27 +02:00
return open(getLogger(0), address, port);
2019-04-29 17:05:06 +02:00
}
2019-04-18 16:02:09 +02:00
}