From 0e21a255464672ed4eb061d9570269b1c80ba229 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 23 Dec 2021 22:57:01 +0100 Subject: [PATCH] init --- pom.xml | 113 ++++++++++++++++ .../java/net/krakatoaapi/KrakatoaAPI.java | 81 +++++++++++ .../net/krakatoaapi/builder/ItemBuilder.java | 127 ++++++++++++++++++ .../net/krakatoaapi/config/ConfigHandler.java | 48 +++++++ .../listener/PlayerJoinListener.java | 18 +++ .../net/krakatoaapi/mongo/MongoManager.java | 37 +++++ .../net/krakatoaapi/protocol/KraProtocol.java | 96 +++++++++++++ .../protocol/KraProtocolMessage.java | 24 ++++ .../net/krakatoaapi/socket/SocketClient.java | 69 ++++++++++ .../socket/SocketMessageEvent.java | 33 +++++ src/main/resources/plugin.yml | 5 + target/KrakatoaAPI-1.0-SNAPSHOT.jar | Bin 0 -> 18443 bytes .../classes/net/krakatoaapi/KrakatoaAPI.class | Bin 0 -> 4818 bytes .../net/krakatoaapi/builder/ItemBuilder.class | Bin 0 -> 5108 bytes .../krakatoaapi/config/ConfigHandler.class | Bin 0 -> 2836 bytes .../listener/PlayerJoinListener.class | Bin 0 -> 826 bytes .../net/krakatoaapi/mongo/MongoManager.class | Bin 0 -> 1927 bytes .../krakatoaapi/protocol/KraProtocol.class | Bin 0 -> 3422 bytes .../protocol/KraProtocolMessage.class | Bin 0 -> 1219 bytes .../net/krakatoaapi/socket/SocketClient.class | Bin 0 -> 4579 bytes .../socket/SocketMessageEvent.class | Bin 0 -> 1790 bytes target/classes/plugin.yml | 5 + target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 9 ++ .../compile/default-compile/inputFiles.lst | 9 ++ .../default-testCompile/inputFiles.lst | 0 26 files changed, 679 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/net/krakatoaapi/KrakatoaAPI.java create mode 100644 src/main/java/net/krakatoaapi/builder/ItemBuilder.java create mode 100644 src/main/java/net/krakatoaapi/config/ConfigHandler.java create mode 100644 src/main/java/net/krakatoaapi/listener/PlayerJoinListener.java create mode 100644 src/main/java/net/krakatoaapi/mongo/MongoManager.java create mode 100644 src/main/java/net/krakatoaapi/protocol/KraProtocol.java create mode 100644 src/main/java/net/krakatoaapi/protocol/KraProtocolMessage.java create mode 100644 src/main/java/net/krakatoaapi/socket/SocketClient.java create mode 100644 src/main/java/net/krakatoaapi/socket/SocketMessageEvent.java create mode 100644 src/main/resources/plugin.yml create mode 100644 target/KrakatoaAPI-1.0-SNAPSHOT.jar create mode 100644 target/classes/net/krakatoaapi/KrakatoaAPI.class create mode 100644 target/classes/net/krakatoaapi/builder/ItemBuilder.class create mode 100644 target/classes/net/krakatoaapi/config/ConfigHandler.class create mode 100644 target/classes/net/krakatoaapi/listener/PlayerJoinListener.class create mode 100644 target/classes/net/krakatoaapi/mongo/MongoManager.class create mode 100644 target/classes/net/krakatoaapi/protocol/KraProtocol.class create mode 100644 target/classes/net/krakatoaapi/protocol/KraProtocolMessage.class create mode 100644 target/classes/net/krakatoaapi/socket/SocketClient.class create mode 100644 target/classes/net/krakatoaapi/socket/SocketMessageEvent.class create mode 100644 target/classes/plugin.yml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..bd695fb --- /dev/null +++ b/pom.xml @@ -0,0 +1,113 @@ + + + 4.0.0 + + net.krakatoaapi + KrakatoaAPI + 1.0-SNAPSHOT + + + 14 + 14 + UTF8 + + + + clean install + + + maven-assembly-plugin + + + jar-with-dependencies + + + + + + single + + make-assembly + package + + + + + maven-compiler-plugin + + 9 + 9 + + org.apache.maven.plugins + + + + + + + + spigot-api + org.spigotmc + provided + 1.18-R0.1-SNAPSHOT + + + gson + com.google.code.gson + 2.8.9 + + + mongodb-driver-async + org.mongodb + 3.12.10 + + + Java-WebSocket + org.java-websocket + 1.5.2 + + + + cloudnet + de.dytanic.cloudnet + provided + 3.4.0-RELEASE + + + lombok + org.projectlombok + provided + 1.18.22 + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + sonatype-nexus-snapshots + + false + + + true + + https://oss.sonatype.org/content/repositories/snapshots + + + cloudnet-releases + https://repo.cloudnetservice.eu/repository/releases/ + + + \ No newline at end of file diff --git a/src/main/java/net/krakatoaapi/KrakatoaAPI.java b/src/main/java/net/krakatoaapi/KrakatoaAPI.java new file mode 100644 index 0000000..08e6a1d --- /dev/null +++ b/src/main/java/net/krakatoaapi/KrakatoaAPI.java @@ -0,0 +1,81 @@ +package net.krakatoaapi; + +import de.dytanic.cloudnet.driver.CloudNetDriver; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; +import lombok.Getter; +import net.krakatoaapi.config.ConfigHandler; +import net.krakatoaapi.listener.PlayerJoinListener; +import net.krakatoaapi.mongo.MongoManager; +import net.krakatoaapi.protocol.KraProtocol; +import net.krakatoaapi.socket.SocketClient; +import org.bukkit.Bukkit; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +@Getter +public class KrakatoaAPI extends JavaPlugin { + + @Getter + private static KrakatoaAPI instance; + + private ConfigHandler configHandler; + private MongoManager mongoManager; + private KraProtocol kraProtocol; + private SocketClient socketClient; + + @Override + public void onEnable() { + super.onEnable(); + + instance = this; + configHandler = new ConfigHandler(); + + try { + configHandler.load(); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + + kraProtocol = new KraProtocol(); + + mongoManager = new MongoManager(configHandler.getMongodbHost(), + configHandler.getMongodbPort(), configHandler.getMongodbUsername(), + configHandler.getMongodbPassword()); + mongoManager.connect(configHandler.getMongodbDatabase()); + + try { + socketClient = new SocketClient( + new URI(configHandler.getWebSocketProtocol() + "://" + configHandler.getWebSocketHost() + + ":" + configHandler.getWebSocketPort() + "/ws?t=" + + configHandler.getWebSocketAccessKey() + "&s=" + CloudNetDriver.getInstance() + .getComponentName())); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + socketClient.connect(); + + loadListeners(); + } + + @Override + public void onDisable() { + super.onDisable(); + + socketClient.getConnection().close(); + socketClient.getConnection().closeConnection(1, ""); + + instance = null; + } + + public void loadListeners() { + PluginManager pluginManager = Bukkit.getPluginManager(); + List.of(new PlayerJoinListener()).forEach(listener -> { + pluginManager.registerEvents(listener, this); + }); + } +} diff --git a/src/main/java/net/krakatoaapi/builder/ItemBuilder.java b/src/main/java/net/krakatoaapi/builder/ItemBuilder.java new file mode 100644 index 0000000..aa31ddb --- /dev/null +++ b/src/main/java/net/krakatoaapi/builder/ItemBuilder.java @@ -0,0 +1,127 @@ +package net.krakatoaapi.builder; + +import java.util.Arrays; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.SkullMeta; + +public class ItemBuilder { + + private final ItemStack itemStack; + + public ItemBuilder(Material mat, int amount, short type) { + this.itemStack = new ItemStack(mat, amount, type); + } + + public ItemBuilder(Material mat) { + this.itemStack = new ItemStack(mat); + } + + public ItemBuilder(Material material, int amount) { + this.itemStack = new ItemStack(material, amount); + } + + public ItemBuilder setDisplayname(String displayname) { + ItemMeta im = this.itemStack.getItemMeta(); + assert im != null; + im.setDisplayName(displayname); + this.itemStack.setItemMeta(im); + return this; + } + + public ItemBuilder addEnchantment(Enchantment enchantment, Integer level) { + ItemMeta im = this.itemStack.getItemMeta(); + assert im != null; + im.addEnchant(enchantment, level, true); + this.itemStack.setItemMeta(im); + return this; + } + + public ItemBuilder addUnsafeEnchantment(Enchantment enchantment, Integer enchantmentLevel) { + ItemMeta itemMeta = this.itemStack.getItemMeta(); + itemStack.addUnsafeEnchantment(enchantment, enchantmentLevel); + this.itemStack.setItemMeta(itemMeta); + return this; + } + + public ItemBuilder setColor(int red, int green, int blue) { + LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) this.itemStack.getItemMeta(); + assert leatherArmorMeta != null; + leatherArmorMeta.setColor(Color.fromBGR(red, green, blue)); + this.itemStack.setItemMeta(leatherArmorMeta); + return this; + } + + public ItemBuilder setColor(Color color) { + LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) this.itemStack.getItemMeta(); + assert leatherArmorMeta != null; + leatherArmorMeta.setColor(color); + this.itemStack.setItemMeta(leatherArmorMeta); + return this; + } + + public ItemBuilder setLore(String... lore) { + ItemMeta im = this.itemStack.getItemMeta(); + assert im != null; + im.setLore(Arrays.asList(lore)); + itemStack.setItemMeta(im); + return this; + } + + public ItemBuilder addItemFlag(ItemFlag itemFlag) { + ItemMeta im = this.itemStack.getItemMeta(); + assert im != null; + im.addItemFlags(itemFlag); + itemStack.setItemMeta(im); + return this; + } + + public ItemBuilder setUnbreakable(boolean unbreakable) { + ItemMeta itemMeta = this.itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setUnbreakable(unbreakable); + return this; + } + + public ItemBuilder setSkullOwner(String skullOwner) { + SkullMeta skullMeta = (SkullMeta) this.itemStack.getItemMeta(); + assert skullMeta != null; + skullMeta.setOwner(skullOwner); + this.itemStack.setItemMeta(skullMeta); + return this; + } + + public ItemBuilder hideEnchantment() { + ItemMeta itemMeta = this.itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + this.itemStack.setItemMeta(itemMeta); + return this; + } + + public ItemBuilder hideAttributes() { + ItemMeta itemMeta = this.itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + this.itemStack.setItemMeta(itemMeta); + return this; + } + + public ItemBuilder setGlowing() { + ItemMeta itemMeta = this.itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + itemMeta.addEnchant(Enchantment.DURABILITY, 1, false); + this.itemStack.setItemMeta(itemMeta); + return this; + } + + public ItemStack build() { + return this.itemStack; + } +} diff --git a/src/main/java/net/krakatoaapi/config/ConfigHandler.java b/src/main/java/net/krakatoaapi/config/ConfigHandler.java new file mode 100644 index 0000000..3aa2c24 --- /dev/null +++ b/src/main/java/net/krakatoaapi/config/ConfigHandler.java @@ -0,0 +1,48 @@ +package net.krakatoaapi.config; + +import java.io.File; +import java.io.IOException; +import lombok.Getter; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +@Getter +public class ConfigHandler { + + private final String defaultConfigPath = "/home/CloudNet/kraConfigs"; + + private String webSocketAccessKey; + private String webSocketProtocol; + private String webSocketHost; + private int webSocketPort; + + private String webVoiceAddress; + + private String mongodbHost; + private int mongodbPort; + private String mongodbDatabase; + private String mongodbUsername; + private String mongodbPassword; + + public void load() throws IOException, InvalidConfigurationException { + File file = new File(defaultConfigPath, "kraSettings.yaml"); + + FileConfiguration fileConfiguration = new YamlConfiguration(); + + fileConfiguration.load(file); + + webSocketAccessKey = fileConfiguration.getString("web_socket.access_key"); + webSocketProtocol = fileConfiguration.getString("web_socket.protocol"); + webSocketHost = fileConfiguration.getString("web_socket.host"); + webSocketPort = fileConfiguration.getInt("web_socket.port"); + + webVoiceAddress = fileConfiguration.getString("web.voice_address"); + + mongodbHost = fileConfiguration.getString("mongodb.host"); + mongodbPort = fileConfiguration.getInt("mongodb.port"); + mongodbDatabase = fileConfiguration.getString("mongodb.database"); + mongodbUsername = fileConfiguration.getString("mongodb.username"); + mongodbPassword = fileConfiguration.getString("mongodb.password"); + } +} diff --git a/src/main/java/net/krakatoaapi/listener/PlayerJoinListener.java b/src/main/java/net/krakatoaapi/listener/PlayerJoinListener.java new file mode 100644 index 0000000..319cb43 --- /dev/null +++ b/src/main/java/net/krakatoaapi/listener/PlayerJoinListener.java @@ -0,0 +1,18 @@ +package net.krakatoaapi.listener; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class PlayerJoinListener implements Listener { + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + + event.setJoinMessage(null); + + // TODO: server != lobby -> send player to last location + } +} diff --git a/src/main/java/net/krakatoaapi/mongo/MongoManager.java b/src/main/java/net/krakatoaapi/mongo/MongoManager.java new file mode 100644 index 0000000..f3c36c9 --- /dev/null +++ b/src/main/java/net/krakatoaapi/mongo/MongoManager.java @@ -0,0 +1,37 @@ +package net.krakatoaapi.mongo; + +import com.mongodb.async.client.MongoClient; +import com.mongodb.async.client.MongoClients; +import com.mongodb.async.client.MongoDatabase; +import lombok.Getter; + +public class MongoManager { + + private final String hostname; + private final int port; + private final String username; + private final String password; + + @Getter + private MongoDatabase mongoDatabase; + @Getter + private MongoClient mongoClient; + //@Getter + //private MongoCollection players; + + public MongoManager(String hostname, int port, String username, String password) { + this.hostname = hostname; + this.port = port; + this.username = username; + this.password = password; + } + + public void connect(String database) { + mongoClient = MongoClients.create( + "mongodb://" + username + ":" + password + "@" + hostname + ":" + port + "/?authSource=" + + database); + + mongoDatabase = mongoClient.getDatabase(database); + //players = mongoDatabase.getCollection("players"); + } +} diff --git a/src/main/java/net/krakatoaapi/protocol/KraProtocol.java b/src/main/java/net/krakatoaapi/protocol/KraProtocol.java new file mode 100644 index 0000000..e654609 --- /dev/null +++ b/src/main/java/net/krakatoaapi/protocol/KraProtocol.java @@ -0,0 +1,96 @@ +package net.krakatoaapi.protocol; + +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import net.krakatoaapi.KrakatoaAPI; + +public class KraProtocol { + + public void SendMessage(KraProtocolMessage kraProtocolMessage) { + SendMessage(kraProtocolMessage.getStatus(), kraProtocolMessage.getCmdID(), + kraProtocolMessage.getDest(), kraProtocolMessage.getUuid(), + kraProtocolMessage.getCmdNumber(), kraProtocolMessage.getArgs()); + } + + public void SendMessage(int status, int cmdID, int dest, String uuid, int cmdNumber, + String args) { + System.out.println("sendMessage: " + status + " " + cmdID + " " + dest + " " + cmdNumber); + + int argLen = args.length(); + + byte[] raw = new byte[40 + argLen]; + + raw[0] = (byte) status; + + raw[1] = (byte) cmdID; + raw[2] = (byte) (cmdID >> 8); + raw[3] = (byte) (cmdID >> 16); + raw[4] = (byte) (cmdID >> 24); + + raw[5] = (byte) dest; + + byte[] uuidBytes = uuid.getBytes(); + + /* for (int i = 0; i < 32; i++) { + raw[6 + i] = uuidBytes[i]; + }*/ + + System.arraycopy(uuidBytes, 0, raw, 6, 32); + + raw[38] = (byte) cmdNumber; + raw[39] = (byte) (cmdNumber >> 8); + + if (argLen > 0) { + for (int i = 0; i < argLen; i++) { + raw[40 + i] = (byte) args.charAt(i); + } + } + + System.out.println("raw: " + Arrays.toString(raw)); + + KrakatoaAPI.getInstance().getSocketClient().SendMessage(raw); + } + + public KraProtocolMessage DecodeMessage(byte[] data) { + System.out.println("start decode"); + + byte status = data[0]; + + int cmdID = Byte.toUnsignedInt(data[1]); + + cmdID += Byte.toUnsignedInt(data[2]) * 256; + cmdID += Byte.toUnsignedInt(data[3]) * 256 * 256; + cmdID += Byte.toUnsignedInt(data[4]) * 256 * 256 * 256; + + int dest = Byte.toUnsignedInt(data[5]); + + byte[] playerUuidBytes = new byte[32]; + + System.arraycopy(data, 6, playerUuidBytes, 0, 32); + + /* for (int i = 0; i < 32; i++) { + playerUuidBytes[i] = data[6 + i]; + } */ + + String playerUuid = new String(playerUuidBytes, StandardCharsets.UTF_8); + + short cmdNumber = (short) (Byte.toUnsignedInt(data[38]) + (Byte.toUnsignedInt(data[39]) * 256)); + + int argLen = data.length - 40; + byte[] argsBytes = new byte[argLen]; + + /* for (int i = 0; i < argLen; i++) { + argsBytes[i] = data[40 + i]; + } */ + + System.arraycopy(data, 40, argsBytes, 0, argLen); + + String args = new String(argsBytes, StandardCharsets.UTF_8); + + System.out.println( + "decoded message " + status + " " + cmdID + " " + dest + " " + playerUuid + " " + + cmdNumber + " " + args + " "); + + return new KraProtocolMessage(status, cmdID, dest, playerUuid, cmdNumber, args); + } +} diff --git a/src/main/java/net/krakatoaapi/protocol/KraProtocolMessage.java b/src/main/java/net/krakatoaapi/protocol/KraProtocolMessage.java new file mode 100644 index 0000000..1ee242b --- /dev/null +++ b/src/main/java/net/krakatoaapi/protocol/KraProtocolMessage.java @@ -0,0 +1,24 @@ +package net.krakatoaapi.protocol; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public class KraProtocolMessage { + + private final byte status; + private final int cmdID; // long + private final int dest; + private final String uuid; + private final short cmdNumber; + private final String args; + + public int getStatus() { + return Byte.toUnsignedInt(status); + } + + public int getCmdNumber() { + return Short.toUnsignedInt(cmdNumber); + } +} diff --git a/src/main/java/net/krakatoaapi/socket/SocketClient.java b/src/main/java/net/krakatoaapi/socket/SocketClient.java new file mode 100644 index 0000000..1d71404 --- /dev/null +++ b/src/main/java/net/krakatoaapi/socket/SocketClient.java @@ -0,0 +1,69 @@ +package net.krakatoaapi.socket; + +import java.net.URI; +import java.nio.ByteBuffer; +import java.util.Arrays; +import net.krakatoaapi.KrakatoaAPI; +import net.krakatoaapi.protocol.KraProtocolMessage; +import org.bukkit.Bukkit; +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.handshake.ServerHandshake; + +public class SocketClient extends WebSocketClient { + + public SocketClient(URI uri) { + super(uri); + } + + public void SendMessage(byte[] message) { + if (isOpen()) { + send(message); + } + } + + @Override + public void onOpen(ServerHandshake serverHandshake) { + System.out.println("Opened connection!"); + } + + @Override + public void onMessage(String s) { + System.out.println("recv s: " + s); + } + + @Override + public void onMessage(ByteBuffer byteBuffer) { + System.out.println("recv b: " + Arrays.toString(byteBuffer.array())); + + KraProtocolMessage kraProtocolMessage = KrakatoaAPI.getInstance().getKraProtocol() + .DecodeMessage(byteBuffer.array()); + + Bukkit.getScheduler().runTask(KrakatoaAPI.getInstance(), + () -> Bukkit.getServer().getPluginManager() + .callEvent(new SocketMessageEvent(kraProtocolMessage.getStatus(), + kraProtocolMessage.getCmdID(), kraProtocolMessage.getDest(), + kraProtocolMessage.getUuid(), kraProtocolMessage.getCmdNumber(), + kraProtocolMessage.getArgs()))); + } + + @Override + public void onClose(int code, String reason, boolean remote) { + System.out.println( + "Connection! closed by " + (remote ? "remote peer" : "us") + " Code: " + code + " Reason: " + + reason); + + /* 1 called on plugin disable */ + if (code != 1) { + Bukkit.getScheduler().runTaskLater(KrakatoaAPI.getInstance(), () -> { + System.out.println("try reconnect"); + reconnect(); + }, 20L * 3L); + } + } + + @Override + public void onError(Exception e) { + System.out.println("Error: " + e); + //e.printStackTrace(); + } +} diff --git a/src/main/java/net/krakatoaapi/socket/SocketMessageEvent.java b/src/main/java/net/krakatoaapi/socket/SocketMessageEvent.java new file mode 100644 index 0000000..20755b3 --- /dev/null +++ b/src/main/java/net/krakatoaapi/socket/SocketMessageEvent.java @@ -0,0 +1,33 @@ +package net.krakatoaapi.socket; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@RequiredArgsConstructor +@Getter +public class SocketMessageEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + @Setter + private boolean cancelled; + + private final int status; + private final int cmdID; + private final int dest; + private final String uuid; + private final int commandNumber; + private final String args; + + public static HandlerList getHandlerList() { + return handlers; + } + + public @NotNull HandlerList getHandlers() { + return handlers; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..ea94025 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,5 @@ +name: KrakatoaAPI +version: 1.0 +author: AlexanderRoese +main: net.krakatoaapi.KrakatoaAPI +api-version: '1.17' \ No newline at end of file diff --git a/target/KrakatoaAPI-1.0-SNAPSHOT.jar b/target/KrakatoaAPI-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..d4bf9e25e0d12255ce45b4591949431ef1f1369d GIT binary patch literal 18443 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 literal 0 HcmV?d00001 diff --git a/target/classes/net/krakatoaapi/KrakatoaAPI.class b/target/classes/net/krakatoaapi/KrakatoaAPI.class new file mode 100644 index 0000000000000000000000000000000000000000..fdd43fcf4e2f341abb27dd3c729bb3e4a78158b3 GIT binary patch literal 4818 zcmcIo`(GSa75`pXGO!GRLPAXQPAK8gbfSI5Y?7J~Qb-m;3n5}n>g?_S1Ix^IW|jnN z>#MC=wQ7A^ZPlvvou(}i65nrYeZTb&@i#wy@6527-5vSVAA}Ec@60{t-h001d(SzS zm;ZhBdjM|7Ka;3It%8J#I;<1eWjj+^rZ_umdRif0oH8wKMxWQUlYET$?*i)%nU?7t z5vc9z9+&#{DjKA6y>0bddM0l)pb@HqCKc<^EU?8gJZ;v|XLZlk^@6FL3j0S#2B~FQ zuBTgBLttBa4at;(8w5HkC9<|PX-;Wd(SlmJi47_?qFtaVkP3$dI;$3n zn{PHz#csJ!FnwOPrnHiXKy$${EpOD*v$JE4o;4J7#DGz7Y|qZxd5Q2y z*iT|l0LESwUFa5Qq$^ejwB7H9(Nrwq>@ z%Vh>^*Av*#)t&ai^Q{~8XwsAq@@rMR4!4$RjMxq}NU=fbh1*r!A*XD;KIIwLa4db! zki!R5yuM<1M0ec_wv$Vu2Pw(!Ljni8s+S+E{#5;?dt9>Vh>E-L1_9MKJ2aSHs3KD} zEWVY;RP(AQ?P5;uG3S``hNJb# z_hG|3?!S_vT7U3Btd0H6-Gb*yk32d6vXAK_F ztnQsPy=nGjT=HCjb1{CXCdsQ~Qng+ZCow4*dUp~7n3g?L;D&I`&~vGPg0m{}n4?z% zcL#nJxT%VQF?8S=wi%40d>CD@JpE!R%p_r9r`&`iskkml&U-3~GAcF6@Rv4S&#(-~ zl~MnKii>ij!M2W@t_=H9^Q|f##M>xOj}bx1V+KHho%ERuk8<_q^?0`cH~BCgRq+_!!!YT8k1pKa72_9~x88@x6}(@?2k=3n z9SPmX{PY)4Jji*aqrNA!qC7*E2@&NF3G_<0MN?irgiagD>kEc+(l)JCG?RD&wT*ZZ zA64)%6(7eZ7zlkY6+JVrNil&Mdy| z23PJVl7v&fYt}Lr0w+U*=gzWfb0I&s+GFO z8}WI3LBSVQJc}<0?1=avtUbz*B`S_FC2@56=Xrj4Fb{M^cW%h9K3vIyos>ysUAuINszZ z?;*VqPT3ULSmM^Ms3~#wa}F7Gi8>3OQYq6#N>;iy8&eZeyP4Y2T+QSkqa2gGg2WuD zDFot{jV&C4WrHlU8m{)nEE^ZF$cY%qC~*ba^ZHySr+1Xar;hys_mpuX7SJl-);Og; zY3f%61or(;$^ywzyXa(%6Q<-?OT>m-ByITVm~DHm=jeqY!<)8qZu2_)Ac-I1M+$x{ zGt^Ib{(Xk|#gl2x+p~ri)KH`Zlhz46>)Fl%Pk%H_go44O0c+fjv~AB83#kZ`!(uG* zrA%>bp_UZZjsOcH0di;#%OB~cRaZqR%+`GKPqSHMrXzDML_$6Le z@GBLs;MXiQt4vM%ex@Dzwv)PJk^ zjyEg#y-dx2P;mt-E%=kb{_60)%G8*I<5O83WO8=;@+^}LSHWLdL{vc@M;Zlx7udeG zC=*Y>Fzn(!Ygl8|At~>I?A6E{ncuRO_FG;`{Fa3c+a%K$ucCZ@nQt0frg+r#EJIxO z#lFI)90oSvIX=}u0AKZ|XFam2EFR!wa`8)4R(f7UvgaCFCYI5okmjGq zCO&r}!5d>euXkq;pd|=6*L&@Ak8I)2-}E1 zb$g&5PMsjY-y#%}e3$TixX5)f((li6iW=V=0U0+(c34;1;bpuKqkOnh`Nmk~7x7Yz za%ZLTmRRLQEX63#R4Q+cQEuP`jmOP*;#RiuC-DN3QddMwZf~iP5h#>AMN}oO4ZSz_ ztl*j22;jjn941#!`^!mgQ7}YF_5!eF?<%el*IIms5;gcPB8V S_#^(z?=n{W1%Jaou=zj!`82Tr literal 0 HcmV?d00001 diff --git a/target/classes/net/krakatoaapi/builder/ItemBuilder.class b/target/classes/net/krakatoaapi/builder/ItemBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..957a9e63dc3fb2b321ee2012902d16a0df7b9af1 GIT binary patch literal 5108 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 literal 0 HcmV?d00001 diff --git a/target/classes/net/krakatoaapi/listener/PlayerJoinListener.class b/target/classes/net/krakatoaapi/listener/PlayerJoinListener.class new file mode 100644 index 0000000000000000000000000000000000000000..6d03bce35627e005d215e6168b2f057d59789767 GIT binary patch literal 826 zcmb7CO-~y^41I=#Ez1%pAEi(}3sRGYc1}H|s#H}VR4v~q_emIShb%K_cY?&v;zFe! z`UCo-s(Lm-VJ}F%*cyBMp8f1Ue}DZ3@CiF1#xNeB5}}F-!t9m2l_HfU5yzb?)pdl4 z&)R7Bg)m-kv_rhWWPmWj6e7YqnQ)&iZc=%tGI3J4?^c^VA0|vD$_;{q z)p{d-T4P zN_nG2s&l7Ish4;d3a~&}e%eCO`(v6=`DQPfZYI`79rdp}D!Y)Klp}Mo?aH(*Gwt8Q zV8#8=IpIV6A1$<4SZn-ngxz{cj%Re_VF}ejX+l}V=c<@%uouEgiK?VLOLErd$hB(g zT=RHejj>KTZ4FPiQ7SChiq#%SbD64)=LyekKkKS}?S)zzUBIKPAN}gEg_nGCgn7O{ z@A>T5F7ivTC-&9%KSB3J`W0KB1|P)|+i36sud&Q8o(69i#226XJ7z!Cd_Zv6qz6oo sAZkU*pLh)+^Lwbx!S^8)7h)A_4C(t>#|Fb~@-I)m#h&n%?HIQI0mGuwU;qFB literal 0 HcmV?d00001 diff --git a/target/classes/net/krakatoaapi/mongo/MongoManager.class b/target/classes/net/krakatoaapi/mongo/MongoManager.class new file mode 100644 index 0000000000000000000000000000000000000000..f40f412479dd34ec254afee33a436f7df3e4fac7 GIT binary patch literal 1927 zcmbVN+j0{}5IrNyT3KG-WNtQKurWkh8J0^RU>S1}F*uQv2fLhyR31jFDQS_kquL#j z@>@QG&wwga0Ur1OK8m7eRAH+mz*~YLTRw`vt3p4h6?MdE8#9QW@uLEMSr0Y>PKUNd_KQfB33SQlxmGB8I|2={oUY3{4^cyphJzW(khldA61 z@vWARzx)Ku@?;R0K{`FEO_V)dJ?!Kx_00mJLTR`d+xpf7k(ZHj2MEM=q9E)Jj9faX7rdk1YX!u-zx`t<{DNj>#obz*<*U#N4%rzaf2Q*278;%G%PiVghXUvn}&X<@KN! zxI>cuEgEFZNE(~QyQqm9V@A^WG@84(*F#gM4BBeVao$n>cQ{3lMbA{>BPGRqobO^; zZ!Q-;;A#S06prvso48B3h!qs5R*mUQ9Pbd*8h)az^gn|8c+ktLd!bQ|Q{2KE5)#nm zri^mNgwZZ!&>j484F(l DL2%~R literal 0 HcmV?d00001 diff --git a/target/classes/net/krakatoaapi/protocol/KraProtocol.class b/target/classes/net/krakatoaapi/protocol/KraProtocol.class new file mode 100644 index 0000000000000000000000000000000000000000..f7bec886ebeeac798f597890f49fe100152f6dbb GIT binary patch literal 3422 zcmb7GYkM2T6@DkW>}tIs8z)Ml*bWW}jua&bn&5(+1S|!Eh@H5|F%53P8)+*mmUq?N zRj7ep2$vS1{&Y(PXoR7VVP0ppx`-ptiayP7+7_MBDr1>#3)cFjK~5J_idG^j`@ z&~)@b7s%R{pIdOv1=Dv-vr)@6T*r6HPCa+RHK$trNz3!hswI%9T7Jnl{iYWfD@tRx z>DVMKsT?aTR*J`^aI=nHDO4ytZh5|xZPk&)worDuS*r+aO=l+7!Y%o3&9070)g3xg za=IScJlR}4Yq@fuPe*^-#+Y06H0;9d3I=uT#vKBCZ)G(CJtfPotS%~>E*6XHYeiLtsk)-Hk4YZbLe(+l(Q-eo>PD!?;($ zu#Rs^ggeqD#GmO>x9qAvFBR|CF@n*M+x(JmF}i3vGn>~4!%-c_@BnkdbX{|)>@=1H z_IJ7r({HpB$F`^##xbTNj{-fG=S_Evutn3wOhLm#7+3JHjz>^zN7(dh_1u{B#28fH zX$QM4J)7?WRWAfiNTeqOhB||4C0Um#8cyPrf+-!}!eat`H>VQ!L$FE4rWjNY6SEjF zR_3<2oq7B<>P+dAnAUL`GXk49v*eT)xLN8o%jTl@b(!r28o5qITKP84D0o8V`mDg7 zn>}`!BM_7L%&7P-Hxm=g^#?0f*{N6>p2D00Q^#491#Vm0hLUH2jlOf*_G(qzsuX3A z(R4mjOu)kT6jXK0qb9IBm}D~pC4U|Z32TF0G2Kcb{3cbg)6?Tm-6ya!%*9USmJ-)> z7z?s`)g_X%`Twn%ndxP*vn8*Nz>##m+rBMz$@=voSxmk!ow}@nw{D08Mhk?GJWkYX zD=bXY=Gi(Wy%SE^tk0NkO@6n8QGdQh7>3s6N4Gl5opyKnmNZ+%Yc#`vdRe~LRqBKP zml**;J_Qpy&Lj!Sd#o&LIhR{u`R1z`RP5gMNU{P@HAI4XCaW^d@HJtv2t{1;X@L#1 zd8$bhttzsSnNnVuG#dd-3SMT$9S;(7wJhHg?ChJ9yc=w7Fl4Z%Z*n2@wy9A!mn>Hv zG%cUnnuIE)pmJ5c_F&0rx@Bv;CYdxk&c3^3l2ep-9N+U@voUG;^G?Ov6vuBgyp2l= z-jNCUE>EAeO;oebI|~-~gFMp0DnD+PeaB^yywq8bT8g33N4R_HmbZ7paTc15(e+q& zNN$)oz0|O}sLyujw@Pnk;cJ;FnDu(8=3ApG-shR@t(}b{gChK^xJ*t-B_%3866g=B zNM&#_yc)C>!#DJzZCh@kZhD^ODfq3xo$Ijawqymr7ufansthE=hh=aV%YpnwS?+oJ zVe9cL$G6}+w*LympV`>}pRF7Q6g1iDp#sk1X@0Sk;RkHxWRn`w=)nH$3KTvY`51h* z@Y&91=L!bajBcY}K;yqh-gtOz(Rf4I7&zG$8frPANi5+Rx{>bg2;GUla()jjEPswY zefdg8e*hP75O45(i8q@+;t>AABSF&CAU4kuw`cJj zaV1KtST5s-lu1ID@gw#mWy|<6dy$~`6FkqXkg^MuNsgBB0%dVV_5og`jJHO-g_rO$ zPl9Pi^i%c{_!%{KW5ZW;*`r{W5JJJ>*7J&jSLpHIT#Uf0c&$a@Wg3taeo3f$zeDP> zkwZtb(L-19dn{|jQ?W?E;1@W2CKdY} zl`A+m63-e#QZH-lYnzyRb6CkUMWt{*d&2I zMSQ04I%e=5Z!MqU30%jMtCSL}RU*H{&j~zlC-?^`{RKU4!QTT)BeZ)VpfpPB&*7KU zi_v}=zY2(afu1hVheBWD0i`Ox9>m3f$j^8~mxOCfh&O_jyh*yjM2+Cr^!HxSeh{=D Q;$x0zlzxKW;SWgt7kV#KiU0rr literal 0 HcmV?d00001 diff --git a/target/classes/net/krakatoaapi/protocol/KraProtocolMessage.class b/target/classes/net/krakatoaapi/protocol/KraProtocolMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..9a025b05aed3f373502953b15781953ce915509f GIT binary patch literal 1219 zcmb7CU2hUW6g^X57wA$dwnbX1tyKz(?fO-}YD}b!aU*^tYk41FL${^7%`%wyAN(mk zXd^*aH&pmU_&Y!=(egoLUvlQkK(-Ak2fW}buU16Pu{FIA; z^K;KS4+9ajg0A%@L^A7-Hp0L&~iixQ-hP36ir9NlIN})4)yH zjkn#NkYl$D+(wBS{l3>`$koTI9T9qdXJ1a04OG+=4?C1Xs^bc0lnCkBL_Y}HWIkK> ze0ON>BX4%8ldA_U-fi&Eljl)0E{;7~vs3?%pRmthknF)YylS~-+q3s|W?Pj8Lvl!# zQRoB@$^Q@?DdS7!$}Dd<@KSkBJ3&8exvxCwDnI*3c4ctbq_Fbz;57QJ^v($7)LDR+V0Zs+25M9SkO_^u0r;`&1d#r1=Bv0{U0NbJ(G;rusST5;lf2uyB`74EG}W znG0N*=C4HZSCy{R|3Ydy)sp!WE9Tk&%q$L2G}i~%FbnYkw#?9Pwc=`_!M8_`x literal 0 HcmV?d00001 diff --git a/target/classes/net/krakatoaapi/socket/SocketClient.class b/target/classes/net/krakatoaapi/socket/SocketClient.class new file mode 100644 index 0000000000000000000000000000000000000000..5c04a0c3bf3234c35bde6097fe5d3dbac350ed05 GIT binary patch literal 4579 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 literal 0 HcmV?d00001 diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..ea94025 --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,5 @@ +name: KrakatoaAPI +version: 1.0 +author: AlexanderRoese +main: net.krakatoaapi.KrakatoaAPI +api-version: '1.17' \ No newline at end of file diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..e77661c --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Sat Oct 16 15:56:37 CEST 2021 +groupId=net.krakatoaapi +artifactId=KrakatoaAPI +version=1.0-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..2d252e4 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,9 @@ +net/krakatoaapi/listener/PlayerJoinListener.class +net/krakatoaapi/mongo/MongoManager.class +net/krakatoaapi/protocol/KraProtocolMessage.class +net/krakatoaapi/socket/SocketClient.class +net/krakatoaapi/builder/ItemBuilder.class +net/krakatoaapi/KrakatoaAPI.class +net/krakatoaapi/config/ConfigHandler.class +net/krakatoaapi/socket/SocketMessageEvent.class +net/krakatoaapi/protocol/KraProtocol.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..797e381 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,9 @@ +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/listener/PlayerJoinListener.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/socket/SocketMessageEvent.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/builder/ItemBuilder.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/protocol/KraProtocol.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/KrakatoaAPI.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/mongo/MongoManager.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/socket/SocketClient.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/config/ConfigHandler.java +/home/alex/IdeaProjects/KrakatoaAPI/src/main/java/net/krakatoaapi/protocol/KraProtocolMessage.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29