summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java49
-rw-r--r--src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt58
-rw-r--r--src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt46
-rw-r--r--src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt11
-rw-r--r--src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt7
-rw-r--r--src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt7
6 files changed, 178 insertions, 0 deletions
diff --git a/src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java b/src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java
new file mode 100644
index 0000000..cc47383
--- /dev/null
+++ b/src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java
@@ -0,0 +1,49 @@
+package dev.mikka.cortex.help.loader;
+
+import com.google.gson.Gson;
+import io.papermc.paper.plugin.loader.PluginClasspathBuilder;
+import io.papermc.paper.plugin.loader.PluginLoader;
+import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("ALL")
+public class TestPluginLoader implements PluginLoader {
+ @Override
+ public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) {
+ var resolver = new MavenLibraryResolver();
+
+ var pluginLibraries = load();
+ pluginLibraries.asDependencies().forEach(resolver::addDependency);
+ pluginLibraries.asRepositories().forEach(resolver::addRepository);
+
+ classpathBuilder.addLibrary(resolver);
+ }
+
+ private PluginLibraries load() {
+ try (var in = getClass().getResourceAsStream("/paper-libraries.json")) {
+ return new Gson().fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), PluginLibraries.class);
+ } catch (IOException exception) {
+ throw new RuntimeException(exception);
+ }
+ }
+
+ private record PluginLibraries(Map<String, String> repositories, List<String> dependencies) {
+ public Stream<Dependency> asDependencies() {
+ return dependencies.stream().map(d -> new Dependency(new DefaultArtifact(d), null));
+ }
+
+ public Stream<RemoteRepository> asRepositories() {
+ return repositories.entrySet().stream()
+ .map(entry -> new RemoteRepository.Builder(entry.getKey(), "default", entry.getValue()).build());
+ }
+ }
+}
diff --git a/src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt b/src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt
new file mode 100644
index 0000000..e3e4269
--- /dev/null
+++ b/src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt
@@ -0,0 +1,58 @@
+package dev.mikka.cortex.help
+
+import com.comphenix.protocol.ProtocolLibrary
+import com.comphenix.protocol.ProtocolManager
+import com.github.retrooper.packetevents.PacketEvents
+import com.github.retrooper.packetevents.PacketEventsAPI
+import dev.mikka.cortex.help.event.ClickEvents
+import dev.mikka.cortex.help.luckperms.ActualLuckPermsManager
+import dev.mikka.cortex.help.luckperms.LuckPermsManager
+import dev.mikka.cortex.help.luckperms.NoOpLuckPermsManager
+import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder
+import net.luckperms.api.LuckPerms
+import org.bukkit.plugin.Plugin
+import org.bukkit.plugin.java.JavaPlugin
+
+class TestPlugin : JavaPlugin() {
+ companion object {
+ val packetEvents: PacketEventsAPI<*> by lazy { PacketEvents.getAPI() }
+ val protocolManager: ProtocolManager by lazy { ProtocolLibrary.getProtocolManager() }
+ lateinit var instance: TestPlugin
+ lateinit var luckPerms: LuckPermsManager
+ lateinit var essentials: Plugin
+ }
+
+ override fun onLoad() {
+ instance = this
+ PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this))
+ packetEvents.load()
+ }
+
+ override fun onEnable() {
+ if (checkLuckPerms()) {
+ // This will throw when called unchecked!
+ luckPerms = ActualLuckPermsManager(server.servicesManager.getRegistration(LuckPerms::class.java)!!.provider)
+ slF4JLogger.info("LuckPerms is enabled! Using $luckPerms")
+ } else {
+ luckPerms = NoOpLuckPermsManager
+ slF4JLogger.info("LuckPerms is not enabled! Using $luckPerms")
+ }
+
+ println(server.pluginManager.plugins.joinToString(", ") { plugin -> "${plugin.name} (${plugin.isEnabled})" })
+
+ println(checkEssentials())
+
+ if (checkEssentials()) {
+ essentials = server.pluginManager.getPlugin("Essentials")!!
+ slF4JLogger.info("EssentialsX is enabled! Plugin: $essentials (${essentials::class.java.name})")
+ }
+
+ slF4JLogger.info("ProtocolLib: $protocolManager")
+
+ server.pluginManager.registerEvents(ClickEvents, this)
+ }
+
+ private fun checkLuckPerms(): Boolean = server.pluginManager.isPluginEnabled("LuckPerms")
+
+ private fun checkEssentials(): Boolean = server.pluginManager.plugins.find { it.name == "Essentials" } != null
+}
diff --git a/src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt b/src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt
new file mode 100644
index 0000000..3e750aa
--- /dev/null
+++ b/src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt
@@ -0,0 +1,46 @@
+package dev.mikka.cortex.help.event
+
+import com.comphenix.protocol.PacketType
+import com.comphenix.protocol.events.PacketContainer
+import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerChangeGameState
+import dev.mikka.cortex.help.TestPlugin
+import org.bukkit.Material
+import org.bukkit.event.EventHandler
+import org.bukkit.event.Listener
+import org.bukkit.event.block.Action
+import org.bukkit.event.player.PlayerInteractEvent
+
+object ClickEvents : Listener {
+ @EventHandler
+ fun onPlayerInteract(event: PlayerInteractEvent) {
+ if (event.action != Action.LEFT_CLICK_AIR && event.action != Action.RIGHT_CLICK_AIR) {
+ return
+ }
+
+ if (event.item?.type != Material.CLOCK) {
+ return
+ }
+
+ // We have direct access to [PacketEventsAPI]
+ TestPlugin.packetEvents.playerManager.sendPacket(
+ event.player,
+ WrapperPlayServerChangeGameState(WrapperPlayServerChangeGameState.Reason.DEMO_EVENT, 0f),
+ )
+
+ TestPlugin.protocolManager.sendServerPacket(
+ event.player,
+ PacketContainer(PacketType.Play.Server.GAME_STATE_CHANGE).apply {
+ // God is ProtocolLib bullshit
+ structures.modify(0) { structure ->
+ structure.integers.write(0, 5)
+ structure
+ }
+ float.write(0, 101f)
+ },
+ )
+
+ TestPlugin.luckPerms.printInstance()
+
+ TestPlugin.essentials.slF4JLogger.info("Hello from ${TestPlugin.instance}")
+ }
+}
diff --git a/src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt b/src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt
new file mode 100644
index 0000000..c9cebe2
--- /dev/null
+++ b/src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt
@@ -0,0 +1,11 @@
+package dev.mikka.cortex.help.luckperms
+
+import net.luckperms.api.LuckPerms
+
+class ActualLuckPermsManager(private val luckPerms: LuckPerms) : LuckPermsManager {
+ override fun isEnabled(): Boolean = true
+
+ override fun printInstance() {
+ println("LuckPerms Instance: $luckPerms")
+ }
+}
diff --git a/src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt b/src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt
new file mode 100644
index 0000000..d5984a8
--- /dev/null
+++ b/src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt
@@ -0,0 +1,7 @@
+package dev.mikka.cortex.help.luckperms
+
+interface LuckPermsManager {
+ fun isEnabled(): Boolean
+
+ fun printInstance()
+}
diff --git a/src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt b/src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt
new file mode 100644
index 0000000..1faa09e
--- /dev/null
+++ b/src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt
@@ -0,0 +1,7 @@
+package dev.mikka.cortex.help.luckperms
+
+object NoOpLuckPermsManager : LuckPermsManager {
+ override fun isEnabled(): Boolean = false
+
+ override fun printInstance() {}
+}