mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Implemented Floodgate's player transfer plugin message
This commit is contained in:
parent
1199d50338
commit
a1bdf6dbda
1 changed files with 26 additions and 0 deletions
|
@ -28,6 +28,9 @@ package org.geysermc.connector.network.translators.java;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.client.ClientPluginMessagePacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.client.ClientPluginMessagePacket;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||||
import com.google.common.base.Charsets;
|
import com.google.common.base.Charsets;
|
||||||
|
import com.nukkitx.protocol.bedrock.packet.TransferPacket;
|
||||||
|
import org.geysermc.connector.GeyserConnector;
|
||||||
|
import org.geysermc.connector.GeyserLogger;
|
||||||
import org.geysermc.connector.common.AuthType;
|
import org.geysermc.connector.common.AuthType;
|
||||||
import org.geysermc.connector.network.session.GeyserSession;
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.network.translators.PacketTranslator;
|
import org.geysermc.connector.network.translators.PacketTranslator;
|
||||||
|
@ -40,6 +43,8 @@ import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
@Translator(packet = ServerPluginMessagePacket.class)
|
@Translator(packet = ServerPluginMessagePacket.class)
|
||||||
public class JavaPluginMessageTranslator extends PacketTranslator<ServerPluginMessagePacket> {
|
public class JavaPluginMessageTranslator extends PacketTranslator<ServerPluginMessagePacket> {
|
||||||
|
private final GeyserLogger logger = GeyserConnector.getInstance().getLogger();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void translate(GeyserSession session, ServerPluginMessagePacket packet) {
|
public void translate(GeyserSession session, ServerPluginMessagePacket packet) {
|
||||||
// The only plugin messages it has to listen for are Floodgate plugin messages
|
// The only plugin messages it has to listen for are Floodgate plugin messages
|
||||||
|
@ -75,6 +80,27 @@ public class JavaPluginMessageTranslator extends PacketTranslator<ServerPluginMe
|
||||||
session.sendDownstreamPacket(new ClientPluginMessagePacket(channel, finalData));
|
session.sendDownstreamPacket(new ClientPluginMessagePacket(channel, finalData));
|
||||||
});
|
});
|
||||||
session.sendForm(form);
|
session.sendForm(form);
|
||||||
|
|
||||||
|
} else if (channel.equals("floodgate:transfer")) {
|
||||||
|
byte[] data = packet.getData();
|
||||||
|
|
||||||
|
// port, 4 bytes. remaining data, address.
|
||||||
|
|
||||||
|
if (data.length < 5) {
|
||||||
|
throw new NullPointerException("Transfer data should be at least 5 bytes long");
|
||||||
|
}
|
||||||
|
|
||||||
|
int port = data[0] << 24 | (data[1] & 0xFF) << 16 | (data[2] & 0xFF) << 8 | data[3] & 0xFF;
|
||||||
|
String address = new String(data, 4, data.length - 4);
|
||||||
|
|
||||||
|
if (logger.isDebug()) {
|
||||||
|
logger.info("Transferring client to: " + address + ":" + port);
|
||||||
|
}
|
||||||
|
|
||||||
|
TransferPacket transferPacket = new TransferPacket();
|
||||||
|
transferPacket.setAddress(address);
|
||||||
|
transferPacket.setPort(port);
|
||||||
|
session.sendUpstreamPacket(transferPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue