From 2dcecc5a62d773df012bcfdd4f84aadbfd406b5e Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Tue, 15 Sep 2020 22:54:39 +0200 Subject: [PATCH] Add Basic Packet System --- .../src/de/steamwar/coms/Packet.java | 18 ++++++++++ .../de/steamwar/coms/receiver/Handler.java | 10 ++++++ .../steamwar/coms/receiver/PacketHandler.java | 35 +++++++++++++++++++ .../coms/receiver/handlers/PingHandler.java | 29 +++++++++++++++ .../coms/receiver/handlers/TestHandler.java | 17 +++++++++ .../de/steamwar/coms/sender/PacketSender.java | 30 ++++++++++++++++ .../src/de/steamwar/core/Core.java | 4 +++ .../de/steamwar/sql/DownloadSchematic.java | 3 +- 8 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 SpigotCore_Main/src/de/steamwar/coms/Packet.java create mode 100644 SpigotCore_Main/src/de/steamwar/coms/receiver/Handler.java create mode 100644 SpigotCore_Main/src/de/steamwar/coms/receiver/PacketHandler.java create mode 100644 SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/PingHandler.java create mode 100644 SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/TestHandler.java create mode 100644 SpigotCore_Main/src/de/steamwar/coms/sender/PacketSender.java diff --git a/SpigotCore_Main/src/de/steamwar/coms/Packet.java b/SpigotCore_Main/src/de/steamwar/coms/Packet.java new file mode 100644 index 0000000..00320bf --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/coms/Packet.java @@ -0,0 +1,18 @@ +package de.steamwar.coms; + +import de.steamwar.coms.sender.PacketSender; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +public abstract class Packet implements Serializable { + + public void send() { + PacketSender.sendPacket(this); + } + + public abstract String getName(); + + public abstract void writeVars(ObjectOutputStream objectOutputStream) throws IOException; +} diff --git a/SpigotCore_Main/src/de/steamwar/coms/receiver/Handler.java b/SpigotCore_Main/src/de/steamwar/coms/receiver/Handler.java new file mode 100644 index 0000000..a049560 --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/coms/receiver/Handler.java @@ -0,0 +1,10 @@ +package de.steamwar.coms.receiver; + +import com.google.common.io.ByteArrayDataInput; + +public abstract class Handler { + + protected abstract String getName(); + + public abstract void handle(ByteArrayDataInput byteArrayDataInput) throws Exception; +} \ No newline at end of file diff --git a/SpigotCore_Main/src/de/steamwar/coms/receiver/PacketHandler.java b/SpigotCore_Main/src/de/steamwar/coms/receiver/PacketHandler.java new file mode 100644 index 0000000..8edb0d9 --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/coms/receiver/PacketHandler.java @@ -0,0 +1,35 @@ +package de.steamwar.coms.receiver; + +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; +import de.steamwar.coms.receiver.handlers.PingHandler; +import de.steamwar.coms.receiver.handlers.TestHandler; +import org.bukkit.entity.Player; +import org.bukkit.plugin.messaging.PluginMessageListener; + +import java.util.HashMap; +import java.util.Map; + +public class PacketHandler implements PluginMessageListener { + + private static Map handlerMap = new HashMap<>(); + + public static void registerHandler(Handler handler) { + handlerMap.put(handler.getName(), handler); + } + + static { + registerHandler(new TestHandler()); + registerHandler(new PingHandler()); + } + + @Override + public void onPluginMessageReceived(String s, Player player, byte[] bytes) { + ByteArrayDataInput in = ByteStreams.newDataInput(bytes); + try { + handlerMap.get(in.readUTF()).handle(in); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/PingHandler.java b/SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/PingHandler.java new file mode 100644 index 0000000..9ed52e6 --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/PingHandler.java @@ -0,0 +1,29 @@ +package de.steamwar.coms.receiver.handlers; + +import com.google.common.io.ByteArrayDataInput; +import de.steamwar.coms.receiver.Handler; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.SoundCategory; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class PingHandler extends Handler { + + @Override + protected String getName() { + return "Ping"; + } + + @Override + public void handle(ByteArrayDataInput byteArrayDataInput) throws Exception { + String uuid = byteArrayDataInput.readUTF(); + System.out.println(uuid); + if(Bukkit.getPlayer(UUID.fromString(uuid)).isOnline()) { + Player player = Bukkit.getPlayer(UUID.fromString(uuid)); + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.MASTER, 1, 1); + } + + } +} diff --git a/SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/TestHandler.java b/SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/TestHandler.java new file mode 100644 index 0000000..93676c2 --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/coms/receiver/handlers/TestHandler.java @@ -0,0 +1,17 @@ +package de.steamwar.coms.receiver.handlers; + +import com.google.common.io.ByteArrayDataInput; +import de.steamwar.coms.receiver.Handler; +import org.bukkit.Bukkit; + +public class TestHandler extends Handler { + @Override + protected String getName() { + return "Test"; + } + + @Override + public void handle(ByteArrayDataInput byteArrayDataInput) throws Exception { + Bukkit.getOnlinePlayers().stream().forEach(player -> player.sendMessage("TEST!")); + } +} diff --git a/SpigotCore_Main/src/de/steamwar/coms/sender/PacketSender.java b/SpigotCore_Main/src/de/steamwar/coms/sender/PacketSender.java new file mode 100644 index 0000000..a3d36f3 --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/coms/sender/PacketSender.java @@ -0,0 +1,30 @@ +package de.steamwar.coms.sender; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import de.steamwar.coms.Packet; +import de.steamwar.core.Core; +import org.bukkit.Bukkit; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.util.stream.Collectors; + +public class PacketSender { + + public static void sendPacket(Packet packet) { + try { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF(packet.getName()); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream); + packet.writeVars(objectOutputStream); + objectOutputStream.flush(); + out.writeUTF(outputStream.toByteArray().toString()); + Bukkit.getOnlinePlayers().stream().limit(1).collect(Collectors.toList()).get(0).sendPluginMessage(Core.getInstance(), "sw:bridge", out.toByteArray()); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/SpigotCore_Main/src/de/steamwar/core/Core.java b/SpigotCore_Main/src/de/steamwar/core/Core.java index 27d799c..9412be6 100644 --- a/SpigotCore_Main/src/de/steamwar/core/Core.java +++ b/SpigotCore_Main/src/de/steamwar/core/Core.java @@ -19,6 +19,7 @@ package de.steamwar.core; +import de.steamwar.coms.receiver.PacketHandler; import de.steamwar.core.events.ChattingEvent; import de.steamwar.core.events.ChunkListener; import de.steamwar.core.events.PlayerJoinedEvent; @@ -61,6 +62,9 @@ public class Core extends JavaPlugin{ ChunkListener.init(); if(version >= 12) ErrorLogger.init(); + getServer().getMessenger().registerIncomingPluginChannel( this, "sw:bridge", new PacketHandler()); + getServer().getMessenger().registerOutgoingPluginChannel( this, "sw:bridge" ); + } @Override diff --git a/SpigotCore_Main/src/de/steamwar/sql/DownloadSchematic.java b/SpigotCore_Main/src/de/steamwar/sql/DownloadSchematic.java index 167e5ce..3fd468b 100644 --- a/SpigotCore_Main/src/de/steamwar/sql/DownloadSchematic.java +++ b/SpigotCore_Main/src/de/steamwar/sql/DownloadSchematic.java @@ -19,13 +19,14 @@ package de.steamwar.sql; -import javax.xml.bind.DatatypeConverter; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.sql.ResultSet; import java.sql.SQLException; import java.time.Instant; +import javax.xml.bind.DatatypeConverter; + public class DownloadSchematic { private DownloadSchematic(){}