diff --git a/.idea/libraries/waterfall_1_18_475.xml b/.idea/libraries/waterfall_1_18_475.xml
new file mode 100644
index 0000000..e36750a
--- /dev/null
+++ b/.idea/libraries/waterfall_1_18_475.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LaunchServer/LaunchServer.iml b/LaunchServer/LaunchServer.iml
index 3ca6abe..9a90a6f 100644
--- a/LaunchServer/LaunchServer.iml
+++ b/LaunchServer/LaunchServer.iml
@@ -1,5 +1,14 @@
+
+
+
+
+ WATERFALL
+
+
+
+
@@ -84,5 +93,6 @@
+
\ No newline at end of file
diff --git a/LaunchServer/resources/bungee.yml b/LaunchServer/resources/bungee.yml
new file mode 100644
index 0000000..f44894d
--- /dev/null
+++ b/LaunchServer/resources/bungee.yml
@@ -0,0 +1,8 @@
+name: LaunchServer
+description: "KeeperJerry's Launcher Server"
+version: 1.7.5.0
+
+author: "KeeperJerry & sashok724"
+website: 'https://launcher.keeperjerry.ru/'
+
+main: launchserver.plugin.bungee.PluginBungee
\ No newline at end of file
diff --git a/LaunchServer/source/plugin/PluginBridge.java b/LaunchServer/source/plugin/PluginBridge.java
new file mode 100644
index 0000000..f43f361
--- /dev/null
+++ b/LaunchServer/source/plugin/PluginBridge.java
@@ -0,0 +1,46 @@
+package launchserver.plugin;
+
+import java.nio.file.Path;
+
+import launcher.helper.JVMHelper;
+import launcher.helper.LogHelper;
+import launchserver.LaunchServer;
+
+public final class PluginBridge implements Runnable, AutoCloseable
+{
+ private final LaunchServer server;
+
+ public PluginBridge(Path dir) throws Throwable
+ {
+ LogHelper.addOutput(dir.resolve("LaunchServer.log"));
+ LogHelper.printVersion("LaunchServer");
+
+ long start = System.currentTimeMillis();
+ try {
+ server = new LaunchServer(dir, true);
+ } catch (Throwable exc) {
+ LogHelper.error(exc);
+ throw exc;
+ }
+ long end = System.currentTimeMillis();
+ LogHelper.debug("LaunchServer started in %dms", end - start);
+ }
+
+ @Override
+ public void close() {
+ server.close();
+ }
+
+ @Override
+ public void run() {
+ server.run();
+ }
+
+ public void eval(String... command) {
+ server.commandHandler.eval(command, false);
+ }
+
+ static {
+ JVMHelper.verifySystemProperties(LaunchServer.class, false);
+ }
+}
\ No newline at end of file
diff --git a/LaunchServer/source/plugin/bungee/CommandBungee.java b/LaunchServer/source/plugin/bungee/CommandBungee.java
new file mode 100644
index 0000000..8d3ae3b
--- /dev/null
+++ b/LaunchServer/source/plugin/bungee/CommandBungee.java
@@ -0,0 +1,45 @@
+package launchserver.plugin.bungee;
+
+import launchserver.plugin.PluginBridge;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.CommandSender;
+import net.md_5.bungee.api.chat.BaseComponent;
+import net.md_5.bungee.api.chat.TextComponent;
+import net.md_5.bungee.api.plugin.Command;
+import net.md_5.bungee.command.ConsoleCommandSender;
+
+public final class CommandBungee extends Command
+{
+ private static final BaseComponent[] NOT_CONSOLE_MESSAGE = TextComponent.fromLegacyText(ChatColor.RED + "This command can only be used from the console!");
+ private static final BaseComponent[] NOT_INITIALIZED_MESSAGE = TextComponent.fromLegacyText(ChatColor.RED + "LaunchServer was not fully loaded!");
+
+ // Instance
+ public final PluginBungee plugin;
+
+ public CommandBungee(PluginBungee plugin)
+ {
+ super("launchserver", "launchserver.admin", "launcher", "ls", "l");
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void execute(CommandSender sender, String... args)
+ {
+ if (!(sender instanceof ConsoleCommandSender))
+ {
+ sender.sendMessage(NOT_CONSOLE_MESSAGE);
+ return;
+ }
+
+ // Eval command
+ PluginBridge bridge = plugin.bridge;
+ if (bridge == null)
+ {
+ sender.sendMessage(NOT_INITIALIZED_MESSAGE);
+ }
+ else
+ {
+ bridge.eval(args);
+ }
+ }
+}
\ No newline at end of file
diff --git a/LaunchServer/source/plugin/bungee/PluginBungee.java b/LaunchServer/source/plugin/bungee/PluginBungee.java
new file mode 100644
index 0000000..8bd4775
--- /dev/null
+++ b/LaunchServer/source/plugin/bungee/PluginBungee.java
@@ -0,0 +1,38 @@
+package launchserver.plugin.bungee;
+
+import launcher.helper.CommonHelper;
+import launchserver.plugin.PluginBridge;
+import net.md_5.bungee.api.plugin.Plugin;
+
+public final class PluginBungee extends Plugin
+{
+ public volatile PluginBridge bridge = null;
+
+ @Override
+ public void onDisable()
+ {
+ super.onDisable();
+ if (bridge != null)
+ {
+ bridge.close();
+ bridge = null;
+ }
+ }
+
+ @Override
+ public void onEnable()
+ {
+ super.onEnable();
+
+ // Initialize LaunchServer
+ try {
+ bridge = new PluginBridge(getDataFolder().toPath());
+ } catch (Throwable exc) {
+ exc.printStackTrace();
+ }
+
+ // Register command
+ CommonHelper.newThread("LaunchServer Thread", true, bridge).start();
+ getProxy().getPluginManager().registerCommand(this, new CommandBungee(this));
+ }
+}
\ No newline at end of file
diff --git a/build/plugins/waterfall-1.18-475.jar b/build/plugins/waterfall-1.18-475.jar
new file mode 100644
index 0000000..7b78675
--- /dev/null
+++ b/build/plugins/waterfall-1.18-475.jar
Binary files differ
diff --git a/buildnumber b/buildnumber
index c52e519..5c580d7 100644
--- a/buildnumber
+++ b/buildnumber
@@ -1 +1 @@
-584, 08.01.2022
\ No newline at end of file
+585, 27.01.2022
\ No newline at end of file