From d311eae9a8daa9cef14874c20758e03c00d3c0ee Mon Sep 17 00:00:00 2001 From: Tristan Camejo Date: Sat, 25 Feb 2023 09:40:42 +1100 Subject: [PATCH] feat: link accounts endpoint --- build.gradle | 5 +++ .../tristansmp/elytra/events/ChatListener.kt | 45 ++++++++++++++++++- .../java/com/tristansmp/elytra/lib/Config.kt | 5 ++- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 145d097..a953e06 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,10 @@ repositories { name = 'sonatype' url = 'https://oss.sonatype.org/content/groups/public/' } + maven { + name = 'jitpack' + url = 'https://jitpack.io' + } } dependencies { @@ -35,6 +39,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation 'com.akuleshov7:ktoml-core:0.3.0' implementation 'com.akuleshov7:ktoml-file:0.3.0' + implementation 'com.github.jkcclemens:khttp:0.1.0' compileOnly 'net.luckperms:api:5.4' } diff --git a/src/main/java/com/tristansmp/elytra/events/ChatListener.kt b/src/main/java/com/tristansmp/elytra/events/ChatListener.kt index bc3ac87..5f096f4 100644 --- a/src/main/java/com/tristansmp/elytra/events/ChatListener.kt +++ b/src/main/java/com/tristansmp/elytra/events/ChatListener.kt @@ -2,21 +2,62 @@ package com.tristansmp.elytra.events import com.tristansmp.elytra.Elytra import io.papermc.paper.event.player.AsyncChatEvent +import khttp.post import net.kyori.adventure.text.TextComponent import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority import org.bukkit.event.Listener - class ChatListener : Listener { - @EventHandler + @EventHandler(priority = EventPriority.HIGHEST) fun onPlayerChat(event: AsyncChatEvent) { try { val message = event.message() as TextComponent + if (!message.content().startsWith("~")) { return } + + if (message.content() + .startsWith("~link") && Elytra.instance.config.config.token != null && Elytra.instance.config.config.linkAccountEndpoint != null + ) { + val player = event.player + val uuid = player.uniqueId.toString() + val code = message.content().split(" ")[1] + val token = Elytra.instance.config.config.token ?: return + val endpoint = Elytra.instance.config.config.linkAccountEndpoint ?: return + + event.isCancelled = true + + player.sendMessage("§a§l[§b§lElytra§a§l] §a§lLinking account...") + + try { + val response = post( + url = endpoint, + data = mapOf( + "uuid" to uuid, + "code" to code + ), + headers = mapOf( + "Authorization" to token + ) + ) + + if (response.statusCode == 200) { + player.sendMessage("§a§l[§b§lElytra§a§l] §a§lSuccessfully linked account!") + } else { + player.sendMessage("§a§l[§b§lElytra§a§l] §c§lFailed to link account!") + } + } catch (e: Exception) { + player.sendMessage("§a§l[§b§lElytra§a§l] §c§lFailed to link account!") + } + + return; + + } + val content = message.content().substring(1) val needsCollection = Elytra.instance.mstore.get("cc:${event.player.uniqueId}:needs_collection") diff --git a/src/main/java/com/tristansmp/elytra/lib/Config.kt b/src/main/java/com/tristansmp/elytra/lib/Config.kt index 59492cc..b0b1323 100644 --- a/src/main/java/com/tristansmp/elytra/lib/Config.kt +++ b/src/main/java/com/tristansmp/elytra/lib/Config.kt @@ -13,7 +13,8 @@ import java.io.IOException @Serializable data class Config( - val token: String?, + val token: String? = null, + val linkAccountEndpoint: String? = null, ) class ConfigManager { @@ -32,7 +33,7 @@ class ConfigManager { if (!file.exists()) { try { - Toml(outputConfig = outputConfig).encodeToString(Config(null)).toByteArray() + Toml(outputConfig = outputConfig).encodeToString(Config()).toByteArray() .also { file.writeBytes(it) } } catch (ex: IOException) { ex.printStackTrace()