Skip to content

Commit

Permalink
Add experimental, undocumented BungeeTag command
Browse files Browse the repository at this point in the history
It needs to be vigorously tested..
  • Loading branch information
Morphan1 committed Oct 29, 2015
1 parent de3ca94 commit 3116658
Show file tree
Hide file tree
Showing 8 changed files with 188 additions and 2 deletions.
@@ -1,4 +1,4 @@
package net.gnomeffinway.depenizen.commands;
package net.gnomeffinway.depenizen.commands.bungee;

import net.aufdemrand.denizencore.exceptions.CommandExecutionException;
import net.aufdemrand.denizencore.exceptions.InvalidArgumentsException;
Expand Down
@@ -0,0 +1,75 @@
package net.gnomeffinway.depenizen.commands.bungee;

import net.aufdemrand.denizen.tags.BukkitTagContext;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizencore.exceptions.CommandExecutionException;
import net.aufdemrand.denizencore.exceptions.InvalidArgumentsException;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.objects.ObjectFetcher;
import net.aufdemrand.denizencore.objects.aH;
import net.aufdemrand.denizencore.scripts.ScriptEntry;
import net.aufdemrand.denizencore.scripts.commands.AbstractCommand;
import net.aufdemrand.denizencore.tags.TagContext;
import net.aufdemrand.denizencore.tags.TagManager;
import net.aufdemrand.denizencore.utilities.debugging.dB;
import net.gnomeffinway.depenizen.objects.bungee.dServer;
import net.gnomeffinway.depenizen.support.bungee.BungeeSupport;
import net.gnomeffinway.depenizen.support.bungee.packets.ClientPacketOutTag;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BungeeTagCommand extends AbstractCommand {

@Override
public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException {

for (aH.Argument arg : aH.interpret(scriptEntry.getOriginalArguments())) {

if (arg.matchesPrefix("server", "s")) {
scriptEntry.addObject("server", dServer.valueOf(TagManager.tag(arg.getValue(),
DenizenAPI.getCurrentInstance().getTagContext(scriptEntry))));
}

else {
scriptEntry.addObject("tag", arg.asElement());
}

}

if (!scriptEntry.hasObject("tag") || !scriptEntry.hasObject("server")) {
throw new InvalidArgumentsException("Must specify a tag and a server!");
}
}

@Override
public void execute(ScriptEntry scriptEntry) throws CommandExecutionException {

Element tag = scriptEntry.getElement("tag");
dServer server = scriptEntry.getdObject("server");

dB.report(scriptEntry, getName(), tag.debug() + server.debug());

if (BungeeSupport.isSocketConnected()) {
if (!scriptEntry.shouldWaitFor()) {
throw new CommandExecutionException("Currently, this command only works if you ~wait for it!");
}
BungeeSupport.getSocketClient().send(new ClientPacketOutTag(nextId++, tag.asString(), server.getName()));
}
else {
dB.echoError("Server is not connected to a BungeeCord Socket.");
}
}

private static int nextId = 0;

private static Map<Integer, ScriptEntry> waitingEntries = new HashMap<Integer, ScriptEntry>();

public static void returnTag(int id, String value) {
ScriptEntry scriptEntry = waitingEntries.get(id);
scriptEntry.addObject("result", ObjectFetcher.pickObjectFor(value));
scriptEntry.setFinished(true);
waitingEntries.remove(id);
}
}
Expand Up @@ -7,7 +7,7 @@
import net.aufdemrand.denizencore.tags.Attribute;
import net.gnomeffinway.depenizen.Depenizen;
import net.gnomeffinway.depenizen.Settings;
import net.gnomeffinway.depenizen.commands.BungeeCommand;
import net.gnomeffinway.depenizen.commands.bungee.BungeeCommand;
import net.gnomeffinway.depenizen.events.bungee.ProxyPingScriptEvent;
import net.gnomeffinway.depenizen.extensions.bungee.BungeePlayerExtension;
import net.gnomeffinway.depenizen.objects.bungee.dServer;
Expand Down
@@ -1,10 +1,12 @@
package net.gnomeffinway.depenizen.support.bungee;

import net.aufdemrand.denizencore.tags.TagManager;
import net.aufdemrand.denizencore.utilities.debugging.dB;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.scripts.queues.ScriptQueue;
import net.aufdemrand.denizencore.scripts.queues.core.InstantQueue;
import net.gnomeffinway.depenizen.Depenizen;
import net.gnomeffinway.depenizen.commands.bungee.BungeeTagCommand;
import net.gnomeffinway.depenizen.events.bungee.ProxyPingScriptEvent;
import net.gnomeffinway.depenizen.objects.bungee.dServer;
import net.gnomeffinway.depenizen.support.bungee.packets.*;
Expand Down Expand Up @@ -201,6 +203,17 @@ else if (packetType == 0x03) {
}
}
// 0x04 (EventSubscribe) is outbound
else if (packetType == 0x05) {
ClientPacketInTag packet = new ClientPacketInTag();
packet.deserialize(data);
String parsed = TagManager.tag(packet.getTag(), null);
send(new ClientPacketOutTagParsed(packet.getId(), parsed, packet.getFrom()));
}
else if (packetType == 0x06) {
ClientPacketInTagParsed packet = new ClientPacketInTagParsed();
packet.deserialize(data);
BungeeTagCommand.returnTag(packet.getId(), packet.getResult());
}
else {
this.close("Received invalid packet from server: " + packetType);
}
Expand Down
@@ -0,0 +1,30 @@
package net.gnomeffinway.depenizen.support.bungee.packets;

public class ClientPacketInTag extends Packet {

private int id;
private String tag;
private String from;

public ClientPacketInTag() {
}

public int getId() {
return id;
}

public String getTag() {
return tag;
}

public String getFrom() {
return from;
}

@Override
public void deserialize(DataDeserializer deserializer) {
this.id = deserializer.readInt();
this.tag = deserializer.readString();
this.from = deserializer.readString();
}
}
@@ -0,0 +1,24 @@
package net.gnomeffinway.depenizen.support.bungee.packets;

public class ClientPacketInTagParsed extends Packet {

private int id;
private String result;

public ClientPacketInTagParsed() {
}

public int getId() {
return id;
}

public String getResult() {
return result;
}

@Override
public void deserialize(DataDeserializer deserializer) {
this.id = deserializer.readInt();
this.result = deserializer.readString();
}
}
@@ -0,0 +1,22 @@
package net.gnomeffinway.depenizen.support.bungee.packets;

public class ClientPacketOutTag extends Packet {

private int id;
private String tag;
private String destination;

public ClientPacketOutTag(int id, String tag, String destination) {
this.id = id;
this.tag = tag;
this.destination = destination;
}

@Override
public void serialize(DataSerializer serializer) {
serializer.writeInt(0x05);
serializer.writeInt(id);
serializer.writeString(tag);
serializer.writeString(destination);
}
}
@@ -0,0 +1,22 @@
package net.gnomeffinway.depenizen.support.bungee.packets;

public class ClientPacketOutTagParsed extends Packet {

private int id;
private String result;
private String returnToSender;

public ClientPacketOutTagParsed(int id, String result, String returnToSender) {
this.id = id;
this.result = result;
this.returnToSender = returnToSender;
}

@Override
public void serialize(DataSerializer serializer) {
serializer.writeInt(0x06);
serializer.writeInt(id);
serializer.writeString(result);
serializer.writeString(returnToSender);
}
}

0 comments on commit 3116658

Please sign in to comment.