Skip to content

Commit

Permalink
Clientizen Bridge (#409)
Browse files Browse the repository at this point in the history
* WIP `DataSerializer`

* Start on server-side & few addtions to `DataSerializer`

* Small fixes

* Cleanups + opti

* Clientizen - Fixes, Testing tag, and log messages

* Fix channel handling in `onPluginMessageReceived`

* Have the client send confirmation

* Wait 20 ticks before sending scripts

To make sure the client is properly connected and is ready to receive packets

* Fix DataSerializer#writeByteArray not writing size

* Update lib

* Update submodule ref

* Cleanup & Refactor clientizen support

* send byte[] method, null support, channels fix,

* Formatting fix

* Rename `InChannelRunnable` to `ClientizenReceiver`

* Rename param

* oops rename receiver map as well

* Add `DataDeserializer`

* Clientizen events system (#2)

* Start on WIP untested event system

* Store `ClientizenEvent`s as a Map

* Linked player, Event IDs, check for invalid events

* Avoid duplicate event IDs

* `ClientizenEvent` suffix + cleanups

* Remove `PlayerPressesKey` clientizen event

* Remove `PlayerPressesKey` clientizen event

* Cleanup

* `Channels#id`, call `fire` by default, add comment

* Add `PlayerPressReleaseKey` clientizen event

* `clientizen event` and remove ServerEvent system (#4)

* Refactor, add `ClientizenEventScriptEvent`

* Cleanup & read event id

* Better param name

* Add `clientrun` command (#5)

* Initial work

* Script arg has no prefix

* Support sending nullable data, `path` is nullable

* Fix syntax

* Initial cleanups

* Add basic config option

* Rename to `ClientizenBridge`

* Add meta

* Add config option for `clientizen event`

* Correct link in config

* Don't always debug client script loading

* Add group to `PlayerTag.is_clientizen`

* `is_clientizen` -> `has_clientizen`

* `ClientizenEvent` - fix example, add warning

* `ClientRunCommand` - better player errors

* `DataSerializer` - remove `@NotNull` annotations

* `ClientizenBridge` - remove `final`s

* Add packet length limiter

* Fix config from previous commit

* `ClientizenEventScriptEvent` - don't pre-parse

* Remove delay when initially sending scripts

See DenizenScript/Clientizen@b58b9ba

* Use Netty `ByteBuf`s, remove unused methods

* Use existing packet-based networking

* Handle event packet config within the packet

* remove raw access to MapTag.map

* Improve `max packet length`'s comment
  • Loading branch information
tal5 committed Jul 20, 2023
1 parent a98c3d4 commit ae2d04b
Show file tree
Hide file tree
Showing 47 changed files with 749 additions and 133 deletions.
12 changes: 10 additions & 2 deletions src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java
@@ -1,12 +1,13 @@
package com.denizenscript.depenizen.bukkit;

import com.denizenscript.denizen.Denizen;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizencore.utilities.debugging.DebugSubmitter;
import com.denizenscript.depenizen.bukkit.bridges.*;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.clientizen.ClientizenBridge;
import com.denizenscript.depenizen.bukkit.utilities.BridgeLoadException;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.Plugin;
Expand Down Expand Up @@ -40,6 +41,7 @@ public void onEnable() {
Debug.echoError("Cannot load Depenizen-Bungee bridge: Internal exception was thrown!");
Debug.echoError(ex);
}
checkLoadClientizenBridge();
DebugSubmitter.debugHeaderLines.add(() -> "Depenizen Bridges loaded (" + loadedBridges.size() + "): " + ChatColor.DARK_GREEN + String.join(", ", loadedBridges.keySet()));
Debug.log("Depenizen loaded! <A>" + loadedBridges.size() + "<W> plugin bridge(s) loaded (of <A>" + allBridges.size() + "<W> available)");
}
Expand All @@ -62,6 +64,12 @@ public void checkLoadBungeeBridge() {
Debug.log("Loaded bungee bridge!");
}

public void checkLoadClientizenBridge() {
if (getConfig().getBoolean("Clientizen.enabled")) {
ClientizenBridge.init();
}
}

public void loadBridge(String name, Supplier<Bridge> bridgeSupplier) {
Plugin plugin = Bukkit.getPluginManager().getPlugin(name);
if (plugin == null) {
Expand Down
@@ -1,8 +1,15 @@
package com.denizenscript.depenizen.bukkit.bungee;

import com.denizenscript.denizencore.DenizenCore;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.scripts.commands.core.AdjustCommand;
import com.denizenscript.denizencore.tags.Attribute;
import com.denizenscript.denizencore.tags.ReplaceableTagEvent;
import com.denizenscript.denizencore.tags.TagManager;
import com.denizenscript.denizencore.tags.TagRunnable;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.packets.in.*;
import com.denizenscript.depenizen.bukkit.bungee.packets.out.ControlsProxyCommandPacketOut;
Expand All @@ -15,24 +22,19 @@
import com.denizenscript.depenizen.bukkit.events.bungee.*;
import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.channel.*;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.tags.TagRunnable;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.tags.Attribute;
import com.denizenscript.denizencore.tags.ReplaceableTagEvent;
import com.denizenscript.denizencore.tags.TagManager;
import org.bukkit.Bukkit;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import static com.denizenscript.denizencore.events.ScriptEvent.*;
import static com.denizenscript.denizencore.events.ScriptEvent.registerScriptEvent;

public class BungeeBridge {

Expand All @@ -52,7 +54,7 @@ public class BungeeBridge {

public List<String> knownServers = new ArrayList<>();

public HashMap<Integer, PacketIn> packets = new HashMap<>();
public HashMap<Integer, BungeePacketIn> packets = new HashMap<>();

public boolean connected = false;

Expand Down Expand Up @@ -105,7 +107,7 @@ public static void runOnMainThread(Runnable run) {
}
}

public void sendPacket(PacketOut packet) {
public void sendPacket(BungeePacketOut packet) {
if (!connected && !packet.canBeFirstPacket) {
runOnMainThread(() -> Debug.echoError("BungeeBridge tried to send packet '" + packet.getClass().getName() + "' while not connected."));
return;
Expand Down
@@ -1,6 +1,7 @@
package com.denizenscript.depenizen.bukkit.bungee;

import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.packets.out.ControlsProxyCommandPacketOut;
import com.denizenscript.depenizen.bukkit.bungee.packets.out.ControlsProxyPingPacketOut;
Expand All @@ -9,7 +10,6 @@
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import org.bukkit.Bukkit;

public class BungeeClientHandler extends ChannelInboundHandlerAdapter {
Expand Down Expand Up @@ -53,7 +53,7 @@ public enum Stage {

public Stage currentStage = Stage.AWAIT_HEADER;

public PacketIn lastPacket;
public BungeePacketIn lastPacket;

public void reallocateBuf(ChannelHandlerContext ctx) {
ByteBuf newBuf = ctx.alloc().buffer(32);
Expand Down Expand Up @@ -124,7 +124,7 @@ else if (currentStage == Stage.AWAIT_DATA) {
}
try {
BungeeBridge.instance.lastPacketReceived = CoreUtilities.monotonicMillis();
PacketIn packet = BungeeBridge.instance.packets.get(packetId);
BungeePacketIn packet = BungeeBridge.instance.packets.get(packetId);
packet.process(packetBuffer);
currentStage = Stage.AWAIT_HEADER;
reallocateBuf(ctx);
Expand Down
@@ -0,0 +1,11 @@
package com.denizenscript.depenizen.bukkit.bungee;

import com.denizenscript.depenizen.bukkit.networking.PacketIn;

public abstract class BungeePacketIn extends PacketIn {

@Override
public void fail(String reason) {
BungeeBridge.instance.handler.fail(reason);
}
}
@@ -0,0 +1,11 @@
package com.denizenscript.depenizen.bukkit.bungee;

import com.denizenscript.depenizen.bukkit.networking.PacketOut;

public abstract class BungeePacketOut extends PacketOut {

public boolean canBeFirstPacket = false;

public abstract int getPacketId();

}

This file was deleted.

This file was deleted.

Expand Up @@ -2,12 +2,12 @@

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.events.bungee.BungeeServerConnectScriptEvent;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;

public class AddServerPacketIn extends PacketIn {
public class AddServerPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
@@ -1,9 +1,9 @@
package com.denizenscript.depenizen.bukkit.bungee.packets.in;

import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import io.netty.buffer.ByteBuf;

public class KeepAlivePacketIn extends PacketIn {
public class KeepAlivePacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
Expand Up @@ -2,14 +2,14 @@

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.events.bungee.BungeePlayerJoinsScriptEvent;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;

import java.util.UUID;

public class PlayerJoinPacketIn extends PacketIn {
public class PlayerJoinPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
Expand Up @@ -2,14 +2,14 @@

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.events.bungee.BungeePlayerQuitsScriptEvent;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;

import java.util.UUID;

public class PlayerQuitPacketIn extends PacketIn {
public class PlayerQuitPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
Expand Up @@ -2,14 +2,14 @@

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.events.bungee.BungeePlayerServerSwitchScriptEvent;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;

import java.util.UUID;

public class PlayerSwitchServerPacketIn extends PacketIn {
public class PlayerSwitchServerPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
Expand Up @@ -2,15 +2,15 @@

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.bungee.packets.out.ProxyCommandResultPacketOut;
import com.denizenscript.depenizen.bukkit.events.bungee.BungeeProxyServerCommandScriptEvent;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;

import java.util.UUID;

public class ProxyCommandPacketIn extends PacketIn {
public class ProxyCommandPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
Expand Up @@ -2,13 +2,13 @@

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.bungee.packets.out.ProxyPingResultPacketOut;
import com.denizenscript.depenizen.bukkit.events.bungee.BungeeProxyServerListPingScriptEvent;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;

public class ProxyPingPacketIn extends PacketIn {
public class ProxyPingPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
@@ -1,23 +1,23 @@
package com.denizenscript.depenizen.bukkit.bungee.packets.in;

import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.tags.BukkitTagContext;
import com.denizenscript.denizencore.tags.TagContext;
import com.denizenscript.denizencore.tags.TagManager;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.bungee.packets.out.RedirectPacketOut;
import com.denizenscript.depenizen.bukkit.bungee.packets.out.redirectable.TagResponsePacketOut;
import io.netty.buffer.ByteBuf;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizencore.tags.TagContext;
import com.denizenscript.denizencore.tags.TagManager;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;

import java.util.List;
import java.util.UUID;

public class ReadTagPacketIn extends PacketIn {
public class ReadTagPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
Expand Up @@ -2,12 +2,12 @@

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import com.denizenscript.depenizen.bukkit.events.bungee.BungeeServerDisconnectScriptEvent;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;

public class RemoveServerPacketIn extends PacketIn {
public class RemoveServerPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down
@@ -1,23 +1,23 @@
package com.denizenscript.depenizen.bukkit.bungee.packets.in;

import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.PacketIn;
import io.netty.buffer.ByteBuf;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.scripts.ScriptBuilder;
import com.denizenscript.denizencore.scripts.ScriptEntry;
import com.denizenscript.denizencore.scripts.queues.ScriptQueue;
import com.denizenscript.denizencore.scripts.queues.core.InstantQueue;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.depenizen.bukkit.Depenizen;
import com.denizenscript.depenizen.bukkit.bungee.BungeeBridge;
import com.denizenscript.depenizen.bukkit.bungee.BungeePacketIn;
import io.netty.buffer.ByteBuf;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;

import java.util.*;

public class RunCommandsPacketIn extends PacketIn {
public class RunCommandsPacketIn extends BungeePacketIn {

@Override
public String getName() {
Expand Down

0 comments on commit ae2d04b

Please sign in to comment.