From dd64274ca04b457241ce69eaac7c4a01472747e7 Mon Sep 17 00:00:00 2001
From: Luck <git@lucko.me>
Date: Sun, 16 May 2021 11:59:48 +0100
Subject: Velocity 2.0.0

---
 spark-velocity2/build.gradle                       |  43 ++++++++
 .../spark/velocity/VelocityCommandSender.java      |  66 ++++++++++++
 .../lucko/spark/velocity/VelocityPlatformInfo.java |  53 ++++++++++
 .../lucko/spark/velocity/VelocitySparkPlugin.java  | 115 +++++++++++++++++++++
 4 files changed, 277 insertions(+)
 create mode 100644 spark-velocity2/build.gradle
 create mode 100644 spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityCommandSender.java
 create mode 100644 spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityPlatformInfo.java
 create mode 100644 spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocitySparkPlugin.java

(limited to 'spark-velocity2')

diff --git a/spark-velocity2/build.gradle b/spark-velocity2/build.gradle
new file mode 100644
index 0000000..ebb925f
--- /dev/null
+++ b/spark-velocity2/build.gradle
@@ -0,0 +1,43 @@
+plugins {
+    id 'net.kyori.blossom' version '1.1.0'
+    id 'com.github.johnrengelman.shadow' version '4.0.1'
+}
+
+sourceCompatibility = 11
+targetCompatibility = 11
+
+dependencies {
+    compile project(':spark-common')
+    compileOnly 'com.velocitypowered:velocity-api:2.0.0-SNAPSHOT'
+    annotationProcessor 'com.velocitypowered:velocity-annotation-processor:2.0.0-SNAPSHOT'
+}
+
+repositories {
+    maven { url "https://repo.velocitypowered.com/snapshots/" }
+}
+
+blossom {
+    replaceTokenIn('src/main/java/me/lucko/spark/velocity/VelocitySparkPlugin.java')
+    replaceToken '@version@', project.pluginVersion
+    replaceToken '@desc@', project.pluginDescription
+}
+
+shadowJar {
+    archiveName = 'spark-velocity2.jar'
+
+    relocate 'okio', 'me.lucko.spark.lib.okio'
+    relocate 'okhttp3', 'me.lucko.spark.lib.okhttp3'
+    relocate 'org.tukaani.xz', 'me.lucko.spark.lib.xz'
+    relocate 'com.google.protobuf', 'me.lucko.spark.lib.protobuf'
+    relocate 'org.objectweb.asm', 'me.lucko.spark.lib.asm'
+    relocate 'one.profiler', 'me.lucko.spark.lib.asyncprofiler'
+
+    exclude 'module-info.class'
+    exclude 'META-INF/maven/**'
+    exclude 'META-INF/proguard/**'
+}
+
+artifacts {
+    archives shadowJar
+    shadow shadowJar
+}
\ No newline at end of file
diff --git a/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityCommandSender.java b/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityCommandSender.java
new file mode 100644
index 0000000..f14b521
--- /dev/null
+++ b/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityCommandSender.java
@@ -0,0 +1,66 @@
+/*
+ * This file is part of spark.
+ *
+ *  Copyright (c) lucko (Luck) <luck@lucko.me>
+ *  Copyright (c) contributors
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package me.lucko.spark.velocity;
+
+import com.velocitypowered.api.command.CommandSource;
+import com.velocitypowered.api.command.ConsoleCommandSource;
+import com.velocitypowered.api.proxy.connection.Player;
+
+import me.lucko.spark.common.command.sender.AbstractCommandSender;
+
+import net.kyori.adventure.text.Component;
+
+import java.util.UUID;
+
+public class VelocityCommandSender extends AbstractCommandSender<CommandSource> {
+    public VelocityCommandSender(CommandSource source) {
+        super(source);
+    }
+
+    @Override
+    public String getName() {
+        if (super.delegate instanceof Player) {
+            return ((Player) super.delegate).username();
+        } else if (super.delegate instanceof ConsoleCommandSource) {
+            return "Console";
+        } else {
+            return "unknown:" + super.delegate.getClass().getSimpleName();
+        }
+    }
+
+    @Override
+    public UUID getUniqueId() {
+        if (super.delegate instanceof Player) {
+            return ((Player) super.delegate).id();
+        }
+        return null;
+    }
+
+    @Override
+    public void sendMessage(Component message) {
+        super.delegate.sendMessage(message);
+    }
+
+    @Override
+    public boolean hasPermission(String permission) {
+        return super.delegate.hasPermission(permission);
+    }
+}
diff --git a/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityPlatformInfo.java b/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityPlatformInfo.java
new file mode 100644
index 0000000..3ae6929
--- /dev/null
+++ b/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocityPlatformInfo.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of spark.
+ *
+ *  Copyright (c) lucko (Luck) <luck@lucko.me>
+ *  Copyright (c) contributors
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package me.lucko.spark.velocity;
+
+import com.velocitypowered.api.proxy.ProxyServer;
+
+import me.lucko.spark.common.platform.AbstractPlatformInfo;
+
+public class VelocityPlatformInfo extends AbstractPlatformInfo {
+    private final ProxyServer proxy;
+
+    public VelocityPlatformInfo(ProxyServer proxy) {
+        this.proxy = proxy;
+    }
+
+    @Override
+    public Type getType() {
+        return Type.PROXY;
+    }
+
+    @Override
+    public String getName() {
+        return "Velocity";
+    }
+
+    @Override
+    public String getVersion() {
+        return this.proxy.version().version();
+    }
+
+    @Override
+    public String getMinecraftVersion() {
+        return null;
+    }
+}
diff --git a/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocitySparkPlugin.java b/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocitySparkPlugin.java
new file mode 100644
index 0000000..cfd8255
--- /dev/null
+++ b/spark-velocity2/src/main/java/me/lucko/spark/velocity/VelocitySparkPlugin.java
@@ -0,0 +1,115 @@
+/*
+ * This file is part of spark.
+ *
+ *  Copyright (c) lucko (Luck) <luck@lucko.me>
+ *  Copyright (c) contributors
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package me.lucko.spark.velocity;
+
+import com.google.inject.Inject;
+import com.velocitypowered.api.command.SimpleCommand;
+import com.velocitypowered.api.event.PostOrder;
+import com.velocitypowered.api.event.Subscribe;
+import com.velocitypowered.api.event.lifecycle.ProxyInitializeEvent;
+import com.velocitypowered.api.event.lifecycle.ProxyShutdownEvent;
+import com.velocitypowered.api.plugin.Plugin;
+import com.velocitypowered.api.plugin.annotation.DataDirectory;
+import com.velocitypowered.api.proxy.ProxyServer;
+
+import me.lucko.spark.common.SparkPlatform;
+import me.lucko.spark.common.SparkPlugin;
+import me.lucko.spark.common.platform.PlatformInfo;
+
+import java.nio.file.Path;
+import java.util.List;
+import java.util.stream.Stream;
+
+@Plugin(
+        id = "spark",
+        name = "spark",
+        version = "@version@",
+        description = "@desc@",
+        authors = {"Luck"}
+)
+public class VelocitySparkPlugin implements SparkPlugin, SimpleCommand {
+
+    private final ProxyServer proxy;
+    private final Path configDirectory;
+
+    private SparkPlatform platform;
+
+    @Inject
+    public VelocitySparkPlugin(ProxyServer proxy, @DataDirectory Path configDirectory) {
+        this.proxy = proxy;
+        this.configDirectory = configDirectory;
+    }
+
+    @Subscribe(order = PostOrder.FIRST)
+    public void onEnable(ProxyInitializeEvent e) {
+        this.platform = new SparkPlatform(this);
+        this.platform.enable();
+        this.proxy.commandManager().register("sparkv", this, "sparkvelocity");
+    }
+
+    @Subscribe(order = PostOrder.LAST)
+    public void onDisable(ProxyShutdownEvent e) {
+        this.platform.disable();
+    }
+
+    @Override
+    public void execute(Invocation inv) {
+        this.platform.executeCommand(new VelocityCommandSender(inv.source()), inv.arguments());
+    }
+
+    @Override
+    public List<String> suggest(Invocation inv) {
+        return this.platform.tabCompleteCommand(new VelocityCommandSender(inv.source()), inv.arguments());
+    }
+
+    @Override
+    public String getVersion() {
+        return VelocitySparkPlugin.class.getAnnotation(Plugin.class).version();
+    }
+
+    @Override
+    public Path getPluginDirectory() {
+        return this.configDirectory;
+    }
+
+    @Override
+    public String getCommandName() {
+        return "sparkv";
+    }
+
+    @Override
+    public Stream<VelocityCommandSender> getCommandSenders() {
+        return Stream.concat(
+                this.proxy.connectedPlayers().stream(),
+                Stream.of(this.proxy.consoleCommandSource())
+        ).map(VelocityCommandSender::new);
+    }
+
+    @Override
+    public void executeAsync(Runnable task) {
+        this.proxy.scheduler().buildTask(this, task).schedule();
+    }
+
+    @Override
+    public PlatformInfo getPlatformInfo() {
+        return new VelocityPlatformInfo(this.proxy);
+    }
+}
-- 
cgit