Skip to content

Commit

Permalink
Work around Bungee's Connect system
Browse files Browse the repository at this point in the history
Packets are love, packets are life
  • Loading branch information
Morphan1 committed Oct 18, 2016
1 parent 96095b2 commit c8f6574
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 12 deletions.
@@ -1,14 +1,15 @@
package com.denizenscript.depenizen.bukkit.extensions.bungee;

import com.denizenscript.depenizen.bukkit.DepenizenPlugin;
import com.denizenscript.depenizen.bukkit.extensions.dObjectExtension;
import com.denizenscript.depenizen.bukkit.objects.bungee.dServer;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.denizenscript.depenizen.bukkit.support.bungee.BungeeSupport;
import com.denizenscript.depenizen.common.socket.Packet;
import com.denizenscript.depenizen.common.socket.client.packet.ClientPacketOutSendPlayer;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.objects.Mechanism;
import net.aufdemrand.denizencore.objects.dObject;
import net.aufdemrand.denizencore.utilities.debugging.dB;

public class BungeePlayerExtension extends dObjectExtension {

Expand Down Expand Up @@ -48,10 +49,13 @@ public void adjust(Mechanism mechanism) {
// -->
if (mechanism.matches("send_to")
&& mechanism.requireObject(dServer.class)) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Connect");
out.writeUTF(value.asType(dServer.class).getName());
player.getPlayerEntity().sendPluginMessage(DepenizenPlugin.getCurrentInstance(), "BungeeCord", out.toByteArray());
if (BungeeSupport.isSocketRegistered()) {
Packet packet = new ClientPacketOutSendPlayer(player.getName(), value.asType(dServer.class).getName());
BungeeSupport.getSocketClient().trySend(packet);
}
else {
dB.echoError("Server is not registered to a BungeeCord Socket.");
}
}
}
}
@@ -1,8 +1,10 @@
package com.denizenscript.depenizen.bukkit.support.bungee;

import com.denizenscript.depenizen.bukkit.DepenizenPlugin;
import com.denizenscript.depenizen.bukkit.Settings;
import com.denizenscript.depenizen.bukkit.commands.bungee.*;
import com.denizenscript.depenizen.bukkit.commands.bungee.BungeeCommand;
import com.denizenscript.depenizen.bukkit.commands.bungee.BungeeReconnectCommand;
import com.denizenscript.depenizen.bukkit.commands.bungee.BungeeRunCommand;
import com.denizenscript.depenizen.bukkit.commands.bungee.BungeeTagCommand;
import com.denizenscript.depenizen.bukkit.events.bungee.*;
import com.denizenscript.depenizen.bukkit.extensions.bungee.BungeePlayerExtension;
import com.denizenscript.depenizen.bukkit.objects.bungee.dServer;
Expand All @@ -14,7 +16,6 @@
import net.aufdemrand.denizencore.objects.dList;
import net.aufdemrand.denizencore.tags.Attribute;
import net.aufdemrand.denizencore.tags.TagContext;
import org.bukkit.Bukkit;

import java.io.IOException;

Expand All @@ -26,7 +27,6 @@ public BungeeSupport() {
new BungeeTagCommand().activate().as("BUNGEETAG").withOptions("bungeetag [<tag>] [server:<server>]", 2);
new BungeeReconnectCommand().activate().as("BUNGEERECONNECT").withOptions("bungeereconnect", 0);
registerObjects(dServer.class);
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(DepenizenPlugin.getCurrentInstance(), "BungeeCord");
registerProperty(BungeePlayerExtension.class, dPlayer.class);
registerAdditionalTags("bungee");
registerScriptEvents(new BungeeRegisteredScriptEvent());
Expand Down
Expand Up @@ -2,6 +2,9 @@

import com.denizenscript.depenizen.common.socket.server.ClientConnection;
import com.denizenscript.depenizen.common.socket.server.SocketServer;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;

import java.security.GeneralSecurityException;
import java.util.Map;
Expand All @@ -26,4 +29,15 @@ protected void handleEventSubscription(ClientConnection client, String event, bo
protected void handleEventResponse(ClientConnection client, long id, Map<String, String> map) {
EventManager.respond(id, map);
}

@Override
protected void handleSendPlayer(ClientConnection client, String player, String destination) {
ProxiedPlayer bungeePlayer = ProxyServer.getInstance().getPlayer(player);
if (bungeePlayer != null) {
ServerInfo server = ProxyServer.getInstance().getServerInfo(destination);
if (server != null) {
bungeePlayer.connect(server);
}
}
}
}
Expand Up @@ -23,7 +23,8 @@ public enum ServerBound {
TAG(5),
PARSED_TAG(6),
EVENT_SUBSCRIPTION(7),
EVENT_RESPONSE(8);
EVENT_RESPONSE(8),
SEND_PLAYER(9);

private final int id;

Expand Down
@@ -0,0 +1,22 @@
package com.denizenscript.depenizen.common.socket.client.packet;

import com.denizenscript.depenizen.common.socket.DataSerializer;
import com.denizenscript.depenizen.common.socket.Packet;

public class ClientPacketOutSendPlayer extends Packet {

private String player;
private String destination;

public ClientPacketOutSendPlayer(String player, String destination) {
this.player = player;
this.destination = destination;
}

@Override
public void serialize(DataSerializer serializer) {
serializer.writeUnsignedByte(ServerBound.SEND_PLAYER.getId());
serializer.writeString(player);
serializer.writeString(destination);
}
}
Expand Up @@ -267,6 +267,11 @@ public void run() {
eventResponse.deserialize(data);
server.handleEventResponse(this, eventResponse.getId(), eventResponse.getResponse());
break;
case SEND_PLAYER:
ServerPacketInSendPlayer sendPlayer = new ServerPacketInSendPlayer();
sendPlayer.deserialize(data);
server.handleSendPlayer(this, sendPlayer.getPlayer(), sendPlayer.getDestination());
break;
}
}
}
Expand Down
Expand Up @@ -162,4 +162,6 @@ public void run() {
protected abstract void handleEventSubscription(ClientConnection client, String event, boolean subscribed);

protected abstract void handleEventResponse(ClientConnection client, long id, Map<String, String> response);

protected abstract void handleSendPlayer(ClientConnection client, String player, String destination);
}
@@ -0,0 +1,24 @@
package com.denizenscript.depenizen.common.socket.server.packet;

import com.denizenscript.depenizen.common.socket.DataDeserializer;
import com.denizenscript.depenizen.common.socket.Packet;

public class ServerPacketInSendPlayer extends Packet {

private String player;
private String destination;

@Override
public void deserialize(DataDeserializer deserializer) {
player = deserializer.readString();
destination = deserializer.readString();
}

public String getPlayer() {
return player;
}

public String getDestination() {
return destination;
}
}

0 comments on commit c8f6574

Please sign in to comment.