aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hype/bbsentials/packets
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hype/bbsentials/packets')
-rw-r--r--src/main/java/de/hype/bbsentials/packets/AbstractPacket.java67
-rw-r--r--src/main/java/de/hype/bbsentials/packets/EnviromentPacketConfig.java7
-rw-r--r--src/main/java/de/hype/bbsentials/packets/Packet.java26
-rw-r--r--src/main/java/de/hype/bbsentials/packets/PacketManager.java48
-rw-r--r--src/main/java/de/hype/bbsentials/packets/PacketUtils.java122
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/BingoChatMessagePacket.java26
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/BroadcastMessagePacket.java17
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/ChChestPackage.java24
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/DisconnectPacket.java20
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/DisplayMessagePacket.java14
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/DisplayTellrawMessagePacket.java13
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/InternalCommandPacket.java18
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/InvalidCommandFeedbackPacket.java25
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/MiningEventPacket.java26
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/RequestConnectPacket.java21
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/SplashNotifyPacket.java26
-rw-r--r--src/main/java/de/hype/bbsentials/packets/packets/WelcomeClientPacket.java19
17 files changed, 519 insertions, 0 deletions
diff --git a/src/main/java/de/hype/bbsentials/packets/AbstractPacket.java b/src/main/java/de/hype/bbsentials/packets/AbstractPacket.java
new file mode 100644
index 0000000..116c9b2
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/AbstractPacket.java
@@ -0,0 +1,67 @@
+package de.hype.bbsentials.packets;
+
+import de.hype.bbsentials.chat.Chat;
+import de.hype.bbsentials.client.BBsentials;
+import de.hype.bbsentials.client.Config;
+import de.hype.bbsentials.communication.BBsentialConnection;
+import de.hype.bbsentials.packets.packets.InvalidCommandFeedbackPacket;
+
+import java.lang.reflect.Field;
+
+public class AbstractPacket {
+ public final int apiVersionMin;
+ public final int apiVersionMax;
+
+ protected AbstractPacket(int apiVersionMin, int apiVersionMax) {
+ this.apiVersionMax = apiVersionMax;
+ this.apiVersionMin = apiVersionMin;
+
+ }
+
+ public boolean isValid(BBsentialConnection connection, String[] allowedNullFields) {
+ if (isApiSupported(BBsentials.config)) {
+ Chat.sendPrivateMessageToSelf("You are using an outdated version of the mod");
+ }
+ return true;
+ }
+
+ public boolean isApiSupported(Config config) {
+ //int version = Core.getConfig().getVersion();
+ int version = config.getApiVersion();
+ if (version >= apiVersionMin && version <= apiVersionMax) {
+ return true;
+ }
+ return false;
+ }
+
+ public String hasNullFields(String[] allowedNullFields) {
+ Field[] fields = this.getClass().getDeclaredFields();
+ if (!this.getClass().getSimpleName().equals(InvalidCommandFeedbackPacket.class.getSimpleName())) {
+ for (Field field : fields) {
+ field.setAccessible(true);
+ try {
+ if (field.get(this) == null) {
+ if (allowedNullFields == null) return field.getName();
+ if (isAllowedNull(allowedNullFields, field.getName())) {
+ return field.getName();
+ }
+ }
+ } catch (IllegalAccessException e) {
+ // Handle the exception if needed
+ e.printStackTrace();
+ }
+ }
+ }
+ return null;
+
+ }
+
+ public boolean isAllowedNull(String[] allowedFields, String fieldName) {
+ for (String allowedField : allowedFields) {
+ if (allowedField.equals(fieldName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/de/hype/bbsentials/packets/EnviromentPacketConfig.java b/src/main/java/de/hype/bbsentials/packets/EnviromentPacketConfig.java
new file mode 100644
index 0000000..da05704
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/EnviromentPacketConfig.java
@@ -0,0 +1,7 @@
+package de.hype.bbsentials.packets;
+
+public class EnviromentPacketConfig {
+ public static final String enviroment = "Client";
+ public static final String notEnviroment = "Server";
+ public static final int apiVersion = 1;
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/Packet.java b/src/main/java/de/hype/bbsentials/packets/Packet.java
new file mode 100644
index 0000000..6a4ecbf
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/Packet.java
@@ -0,0 +1,26 @@
+package de.hype.bbsentials.packets;
+
+import java.util.function.Consumer;
+
+public class Packet<T extends AbstractPacket> {
+
+ private final Class<T> clazz;
+ private final Consumer<T> consumer;
+
+ public Packet(Class<T> clazz, Consumer<T> consumer) {
+ this.clazz = clazz;
+ this.consumer = consumer;
+ }
+
+ public String getName() {
+ return clazz.getSimpleName();
+ }
+
+ public Class<T> getClazz() {
+ return clazz;
+ }
+
+ public Consumer<T> getConsumer() {
+ return consumer;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/PacketManager.java b/src/main/java/de/hype/bbsentials/packets/PacketManager.java
new file mode 100644
index 0000000..a6d94d4
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/PacketManager.java
@@ -0,0 +1,48 @@
+package de.hype.bbsentials.packets;
+
+import de.hype.bbsentials.communication.BBsentialConnection;
+import de.hype.bbsentials.packets.packets.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PacketManager {
+ private static List<Packet<? extends AbstractPacket>> packets = new ArrayList<>();
+
+ public List<Packet<? extends AbstractPacket>> getPackets() {
+ return packets;
+ }
+
+ // Define a map to store packet classes and their associated actions
+ BBsentialConnection connection;
+
+ // Method to initialize packet actions
+ public PacketManager(BBsentialConnection connection) {
+ this.connection = connection;
+ initializePacketActions(connection);
+ }
+
+ public static void initializePacketActions(BBsentialConnection connection) {
+ packets.add(new Packet<>(SplashNotifyPacket.class, connection::onSplashNotify));
+ packets.add(new Packet<>(BingoChatMessagePacket.class, connection::onBingoChatMessagePacket));
+ packets.add(new Packet<>(ChChestPackage.class, connection::onChChestPackage));
+// packets.add(new Packet<>(DisconnectPacket.class, connection::dummy));
+// packets.add(new Packet<>(InternalCommandPacket.class, connection::dummy));
+ packets.add(new Packet<>(MiningEventPacket.class, connection::onMiningEventPacket));
+// packets.add(new Packet<>(RequestConnectPacket.class, connection::dummy));
+ packets.add(new Packet<>(WelcomeClientPacket.class, connection::onWelcomePacket));
+ }
+
+ // Method to handle a received packet
+
+
+ // method to get a list of all packets
+ public static List<Class<? extends AbstractPacket>> getAllPacketClasses() {
+ initializePacketActions(null);
+ List<Class<? extends AbstractPacket>> allPackets = new ArrayList<>();
+ for (int i = 0; i < allPackets.size(); i++) {
+ allPackets.add(packets.get(i).getClazz());
+ }
+ return allPackets;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/PacketUtils.java b/src/main/java/de/hype/bbsentials/packets/PacketUtils.java
new file mode 100644
index 0000000..2c6d8a5
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/PacketUtils.java
@@ -0,0 +1,122 @@
+package de.hype.bbsentials.packets;
+
+import com.google.gson.Gson;
+import de.hype.bbsentials.client.CustomGson;
+import de.hype.bbsentials.communication.BBsentialConnection;
+
+import java.util.function.Consumer;
+
+
+public class PacketUtils {
+ public static final Gson gson = CustomGson.create();
+
+ public static String parsePacketToJson(AbstractPacket packet) {
+ return gson.toJson(packet);
+ }
+
+ public static <T extends AbstractPacket> void tryToProcessPacket(Packet<T> packet, String rawJson) {
+ Class<T> clazz = packet.getClazz();
+ Consumer<T> consumer = packet.getConsumer();
+ T abstractPacket = gson.fromJson(rawJson, clazz);
+ consumer.accept(abstractPacket);
+ }
+
+ private static void showError(Throwable t, String errorMessage) {
+ System.out.println(errorMessage + " because of: " + t.getClass().getSimpleName() + ": " + t.getMessage());
+ new Error(errorMessage, t).printStackTrace();
+ }
+
+ public static class APIException extends Error {
+
+ public APIException(String errorMessage, Throwable t) {
+ super(errorMessage, t);
+ }
+
+ public APIException(String errorMessage) {
+ super(errorMessage);
+ }
+ }
+
+ public static <T extends AbstractPacket> T getAsPacket(String message, Class<T> clazz) {
+ if (!message.contains(".")) return null;
+ String packetName = message.split("\\.")[0];
+ String rawJson = message.substring(packetName.length() + 1);
+ if (!packetName.equals(clazz.getSimpleName())) {
+ try {
+ T parsedPacket = gson.fromJson(rawJson, clazz);
+ return parsedPacket;
+ } catch (Throwable t) {
+ showError(t, "Could not process packet '" + packetName + "' from " + EnviromentPacketConfig.notEnviroment);
+ }
+ }
+ String errorMessage = "Could not process packet '" + packetName + "' from " + EnviromentPacketConfig.notEnviroment;
+
+ showError(new APIException("Found unknown packet: " + packetName + "'"), errorMessage);
+ return null;
+ }
+
+// public static <T extends AbstractPacket> T getAsPacket(String message) {
+// if (!message.contains(".")) return null;
+// String packetName = message.split("\\.")[0];
+// String rawJson = message.substring(packetName.length() + 1);
+//
+// for (Class<? extends AbstractPacket> clazz : PacketManager.getAllPacketClasses()) {
+// if (packetName.equals(clazz.getSimpleName())) {
+// try {
+// if (clazz.isAssignableFrom(clazz)) {
+// //TODO the problem
+// T parsedPacket = (T) gson.fromJson(rawJson, clazz);
+// return parsedPacket;
+// }
+// else {
+// return null;
+// }
+// } catch (Throwable t) {
+// showError(t, "Could not process packet '" + packetName + "' from " + EnviromentPacketConfig.notEnviroment);
+// }
+// }
+// }
+// return null;
+// }
+
+ public static boolean isPacket(String message, Class<? extends AbstractPacket> clazz) {
+ if (!message.contains(".")) return false;
+ String packetName = message.split("\\.")[0];
+ if (packetName.equals(clazz.getSimpleName())) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isPacket(String message) {
+ if (!message.contains(".")) return false;
+ String packetName = message.split("\\.")[0];
+ for (Class<? extends AbstractPacket> packetClass : PacketManager.getAllPacketClasses()) {
+ if (!packetName.equals(packetClass.getSimpleName())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static <T extends AbstractPacket> boolean handleIfPacket(BBsentialConnection connection, String message) {
+ //Return = is Packet
+ if (!message.contains(".")) return false;
+ String packetName = message.split("\\.")[0];
+ String rawJson = message.substring(packetName.length() + 1);
+ PacketManager manager = new PacketManager(connection);
+ for (Packet<? extends AbstractPacket> packet : manager.getPackets()) {
+ if (!packetName.equals(packet.getClazz().getSimpleName())) continue;
+ try {
+ tryToProcessPacket(packet, rawJson);
+ return true;
+ } catch (Throwable t) {
+ showError(t, "Could not process packet '" + packetName + "' from " + EnviromentPacketConfig.notEnviroment);
+ }
+ }
+ String errorMessage = "Could not process packet '" + packetName + "' from " + EnviromentPacketConfig.notEnviroment;
+
+ showError(new APIException("Found unknown packet: " + packetName + "'"), errorMessage);
+ return false;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/BingoChatMessagePacket.java b/src/main/java/de/hype/bbsentials/packets/packets/BingoChatMessagePacket.java
new file mode 100644
index 0000000..56a7152
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/BingoChatMessagePacket.java
@@ -0,0 +1,26 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class BingoChatMessagePacket extends AbstractPacket {
+
+ public BingoChatMessagePacket(String prefix, String username, String message, int bingo_cards) {
+ super(1, 1); //Min and Max supported Version
+ this.message = message;
+ this.username = username;
+ this.prefix = prefix;
+ this.bingo_cards = bingo_cards;
+ }
+
+ public final String message;
+ public final String username;
+ public final String prefix;
+ public final int bingo_cards;
+
+ public boolean baseCheck() {
+ boolean cancelPacket = false;
+
+ return !cancelPacket;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/BroadcastMessagePacket.java b/src/main/java/de/hype/bbsentials/packets/packets/BroadcastMessagePacket.java
new file mode 100644
index 0000000..2e507c7
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/BroadcastMessagePacket.java
@@ -0,0 +1,17 @@
+package de.hype.bbsentials.packets.packets;
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class BroadcastMessagePacket extends AbstractPacket {
+
+ public final String message;
+ public final String username;
+ public final String prefix;
+
+ public BroadcastMessagePacket(String prefix, String username, String message) {
+ super(1, 1); //Min and Max supported Version
+ this.message = message;
+ this.username = username;
+ this.prefix = prefix;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/ChChestPackage.java b/src/main/java/de/hype/bbsentials/packets/packets/ChChestPackage.java
new file mode 100644
index 0000000..e2252e8
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/ChChestPackage.java
@@ -0,0 +1,24 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.constants.enviromentShared.ChChestItem;
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class ChChestPackage extends AbstractPacket {
+
+ public ChChestPackage(String announcerUsername, ChChestItem[] items, String locationCoords, String bbcommand, String extraMessage) {
+ super(1, 1); //Min and Max supported Version
+ this.announcerUsername = announcerUsername;
+ this.locationCoords = locationCoords;
+ this.bbcommand = bbcommand;
+ this.extraMessage = extraMessage;
+ this.items = items;
+ }
+
+ public final String announcerUsername;
+ public final String locationCoords;
+ public final String bbcommand;
+ public final String extraMessage;
+ public final ChChestItem[] items;
+
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/DisconnectPacket.java b/src/main/java/de/hype/bbsentials/packets/packets/DisconnectPacket.java
new file mode 100644
index 0000000..4a37693
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/DisconnectPacket.java
@@ -0,0 +1,20 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class DisconnectPacket extends AbstractPacket {
+
+ public DisconnectPacket(String internalReason, int[] waitBeforeReconnect, String displayReason, String displayMessage) {
+ super(1, 1); //Min and Max supportet Version
+ this.internalReason = internalReason;
+ this.waitBeforeReconnect = waitBeforeReconnect;
+ this.displayReason = displayReason;
+ this.displayMessage = displayMessage;
+ }
+ public final String internalReason;
+ public final int[] waitBeforeReconnect;
+ public final String displayReason;
+ public final String displayMessage;
+
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/DisplayMessagePacket.java b/src/main/java/de/hype/bbsentials/packets/packets/DisplayMessagePacket.java
new file mode 100644
index 0000000..da99a99
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/DisplayMessagePacket.java
@@ -0,0 +1,14 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class DisplayMessagePacket extends AbstractPacket {
+
+ public final String message;
+
+ public DisplayMessagePacket(String message) {
+ super(1, 1); //Min and Max supported Version
+ this.message = message;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/DisplayTellrawMessagePacket.java b/src/main/java/de/hype/bbsentials/packets/packets/DisplayTellrawMessagePacket.java
new file mode 100644
index 0000000..9329878
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/DisplayTellrawMessagePacket.java
@@ -0,0 +1,13 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class DisplayTellrawMessagePacket extends AbstractPacket {
+ public final String rawJson;
+
+ public DisplayTellrawMessagePacket(String rawJson) {
+ super(1, 1); //Min and Max supported Version
+ this.rawJson = rawJson;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/InternalCommandPacket.java b/src/main/java/de/hype/bbsentials/packets/packets/InternalCommandPacket.java
new file mode 100644
index 0000000..cf8c8f7
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/InternalCommandPacket.java
@@ -0,0 +1,18 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+//Only used for small things which don't really need an own Packet.
+public class InternalCommandPacket extends AbstractPacket {
+
+ public InternalCommandPacket(String command, String[] parameters) {
+ super(1, 1); //Min and Max supported Version
+ this.command = command;
+ this.parameters = parameters;
+ }
+
+ public final String command;
+ public final String[] parameters;
+
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/InvalidCommandFeedbackPacket.java b/src/main/java/de/hype/bbsentials/packets/packets/InvalidCommandFeedbackPacket.java
new file mode 100644
index 0000000..b57be4a
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/InvalidCommandFeedbackPacket.java
@@ -0,0 +1,25 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class InvalidCommandFeedbackPacket extends AbstractPacket {
+
+ public InvalidCommandFeedbackPacket(String internalReason, String command, String displayMessage, String argument, String permissionNeeded, String[] userPermissions) {
+ super(1, 1); //Min and Max supportet Version
+ this.internalReason = internalReason;
+ this.argument = argument;
+ this.permissionNeeded = permissionNeeded;
+ this.userPermissions = userPermissions;
+ this.command = command;
+ this.displayMessage = displayMessage;
+ }
+
+ public final String internalReason;
+ public final String argument;
+ public final String permissionNeeded;
+ public final String[] userPermissions;
+ public final String command;
+ public final String displayMessage;
+
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/MiningEventPacket.java b/src/main/java/de/hype/bbsentials/packets/packets/MiningEventPacket.java
new file mode 100644
index 0000000..5dd383f
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/MiningEventPacket.java
@@ -0,0 +1,26 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.constants.enviromentShared.Islands;
+import de.hype.bbsentials.constants.enviromentShared.MiningEvents;
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class MiningEventPacket extends AbstractPacket {
+
+
+ public final MiningEvents event;
+ public final String username;
+ public final Islands island;
+
+ public MiningEventPacket(MiningEvents event, String username, Islands island) throws Exception {
+ super(1, 1); //Min and Max supported Version
+ this.event = event;
+ this.username = username;
+ if (island.equals(Islands.CRYSTAL_HOLLOWS)) {
+ if (event.equals(MiningEvents.MITHRIL_GOURMAND) || event.equals(MiningEvents.RAFFLE) || event.equals(MiningEvents.GOBLIN_RAID)) {
+ throw new Exception("The specified event can not happen on this Server");
+ }
+ }
+ this.island = island;
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/RequestConnectPacket.java b/src/main/java/de/hype/bbsentials/packets/packets/RequestConnectPacket.java
new file mode 100644
index 0000000..62bac83
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/RequestConnectPacket.java
@@ -0,0 +1,21 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class RequestConnectPacket extends AbstractPacket {
+
+
+ public RequestConnectPacket(String mcuuid, String key, int clientApiVersion, String authType ) {
+ super(1, 1); //Min and Max supported Version
+ this.mcuuid = mcuuid;
+ this.key = key;
+ this.authType = authType;
+ this.clientApiVersion = clientApiVersion;
+ }
+
+ public final String mcuuid;
+ public final String key;
+ public final String authType;
+ public final int clientApiVersion;
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/SplashNotifyPacket.java b/src/main/java/de/hype/bbsentials/packets/packets/SplashNotifyPacket.java
new file mode 100644
index 0000000..bfdc275
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/SplashNotifyPacket.java
@@ -0,0 +1,26 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.constants.enviromentShared.Islands;
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class SplashNotifyPacket extends AbstractPacket {
+
+
+ public SplashNotifyPacket(int hub, String splasherUsername, String location, Islands hubType, String extraMessage, boolean lessWaste) {
+ super(1, 1); //Min and Max supported Version
+ this.hub = hub;
+ this.lessWaste = lessWaste;
+ this.splasherUsername = splasherUsername;
+ this.location = location;
+ this.hubType = hubType;
+ this.extraMessage = extraMessage;
+ }
+
+ public final int hub;
+ public final boolean lessWaste;
+ public final String splasherUsername;
+ public final String location;
+ public final Islands hubType;
+ public final String extraMessage;
+}
diff --git a/src/main/java/de/hype/bbsentials/packets/packets/WelcomeClientPacket.java b/src/main/java/de/hype/bbsentials/packets/packets/WelcomeClientPacket.java
new file mode 100644
index 0000000..4b2f7c3
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/packets/packets/WelcomeClientPacket.java
@@ -0,0 +1,19 @@
+package de.hype.bbsentials.packets.packets;
+
+
+import de.hype.bbsentials.packets.AbstractPacket;
+
+public class WelcomeClientPacket extends AbstractPacket {
+
+ public WelcomeClientPacket(String[] roles, String motd, boolean success) {
+ super(1, 1); //Min and Max supportet Version
+ this.roles = roles;
+ this.motd = motd;
+ this.success = success;
+ }
+
+ public final String[] roles;
+ public final String motd;
+ public final boolean success;
+
+} \ No newline at end of file