Archived
0

Bridge: обновление протокола

This commit is contained in:
2017-05-24 00:50:32 +03:00
parent 8b4f04f1ed
commit 5a977a06fe
5 changed files with 76 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
group = 'asys'
version = '0.5.5-SNAPSHOT'
version = '0.5.6-SNAPSHOT'
repositories {
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }

View File

@@ -6,6 +6,7 @@ package asys.bridge.bukkit;
import asys.bridge.client.Client;
import asys.mcsmanager.packets.CS_Ping;
import asys.mcsmanager.packets.SC_SetSettings;
import io.netty.channel.Channel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
@@ -125,4 +126,11 @@ public class BridgePlugin extends JavaPlugin {
public void setNeedReconnect(boolean needReconnect) {
this.needReconnect = needReconnect;
}
public void setSettings(SC_SetSettings packetSettings) {
if (packetSettings.getOnlineMode() != null) {
spigotServer.setOnlineMode(packetSettings.getOnlineMode());
getLogger().info("Change settings: onlineMode");
}
}
}

View File

@@ -26,13 +26,15 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
private static final BiMap<Integer, Class<? extends Packet>> pingPackets = ImmutableBiMap.of(
3, CS_Ping.class,
4, CS_ConsoleMessage.class
4, CS_ConsoleMessage.class,
5, SC_SetSettings.class
);
ClientPacketHandler() {
if (handshakeHandlers == null) {
handshakeHandlers = ImmutableMap.of(
SC_HandshakeResult.class, this
SC_HandshakeResult.class, this,
SC_SetSettings.class, this
);
}
}
@@ -68,10 +70,17 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
@Override
public void handle(Packet packet, ChannelHandlerContext context) {
BridgePlugin.INSTANCE.getLogger().info("handle : " + packet.getClass().getSimpleName());
SC_HandshakeResult pkt = (SC_HandshakeResult) packet;
if (pkt.getErrorCode() != 0) {
if (packet instanceof SC_HandshakeResult) {
handleHandshakeResult((SC_HandshakeResult) packet, context);
} else if (packet instanceof SC_SetSettings) {
handleSetSettings((SC_SetSettings) packet);
}
}
private void handleHandshakeResult(SC_HandshakeResult packet, ChannelHandlerContext context) {
if (packet.getErrorCode() != 0) {
BridgePlugin.INSTANCE.getLogger().severe(
String.format("Handshake: #%d %s", pkt.getErrorCode(), pkt.getMessage()));
String.format("Handshake: #%d %s", packet.getErrorCode(), packet.getMessage()));
BridgePlugin.INSTANCE.setNeedReconnect(false);
} else {
context.channel().attr(KNOWN_PACKETS).set(pingPackets);
@@ -79,4 +88,8 @@ public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements
BridgePlugin.INSTANCE.startPing(context.channel());
}
}
private void handleSetSettings(SC_SetSettings packet) {
BridgePlugin.INSTANCE.setSettings(packet);
}
}