From fcb32f26d880387c52be754bccea0a42ae967f26 Mon Sep 17 00:00:00 2001 From: Patrick <147879351+WinniePatGG@users.noreply.github.com> Date: Sat, 20 Jun 2026 22:25:34 +0200 Subject: [PATCH] Basic Discord Stuff --- build.gradle | 2 + .../de/winniepat/parrotmod/Parrotmod.java | 4 + .../parrotmod/discord/DiscordRPCManager.java | 90 +++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java diff --git a/build.gradle b/build.gradle index aa67876..4f60766 100644 --- a/build.gradle +++ b/build.gradle @@ -27,6 +27,8 @@ dependencies { implementation "dev.icyllis:modernui-core:${modernui_version}" implementation "icyllis.modernui:ModernUI-Markflow:${modernui_version}" implementation("icyllis.modernui:ModernUI-Fabric:${minecraft_version}-${modernui_version}.+") + + include(implementation("io.github.CDAGaming:DiscordIPC:0.10.2")) } processResources { diff --git a/src/main/java/de/winniepat/parrotmod/Parrotmod.java b/src/main/java/de/winniepat/parrotmod/Parrotmod.java index 67b2a67..f12dc4a 100644 --- a/src/main/java/de/winniepat/parrotmod/Parrotmod.java +++ b/src/main/java/de/winniepat/parrotmod/Parrotmod.java @@ -1,6 +1,8 @@ package de.winniepat.parrotmod; +import de.winniepat.parrotmod.discord.DiscordRPCManager; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; public class Parrotmod implements ModInitializer { @@ -8,6 +10,8 @@ public class Parrotmod implements ModInitializer { @Override public void onInitialize() { + DiscordRPCManager.init(); + ClientLifecycleEvents.CLIENT_STOPPING.register(client -> DiscordRPCManager.shutdown()); } } diff --git a/src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java b/src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java new file mode 100644 index 0000000..b104799 --- /dev/null +++ b/src/main/java/de/winniepat/parrotmod/discord/DiscordRPCManager.java @@ -0,0 +1,90 @@ +package de.winniepat.parrotmod.discord; + +import com.google.gson.JsonObject; +import com.jagrosh.discordipc.IPCClient; +import com.jagrosh.discordipc.IPCListener; +import com.jagrosh.discordipc.entities.ActivityType; +import com.jagrosh.discordipc.entities.Packet; +import com.jagrosh.discordipc.entities.RichPresence; +import com.jagrosh.discordipc.entities.User; +import com.jagrosh.discordipc.exceptions.NoDiscordClientException; + +import java.time.OffsetDateTime; + +public class DiscordRPCManager { + private static final long APPLICATION_ID = 1517985621396820039L; + private static IPCClient client; + private static boolean connected = false; + + private DiscordRPCManager() {} + + public static void init() { + client = new IPCClient(APPLICATION_ID); + client.setListener(new IPCListener() { + @Override + public void onPacketSent(IPCClient client, Packet packet) { + + } + + @Override + public void onPacketReceived(IPCClient client, Packet packet) { + + } + + @Override + public void onActivityJoin(IPCClient client, String secret) { + + } + + @Override + public void onActivitySpectate(IPCClient client, String secret) { + + } + + @Override + public void onActivityJoinRequest(IPCClient client, String secret, User user) { + + } + + @Override + public void onReady(IPCClient client) { + connected = true; + updatePresence("In the menus", "Just launched"); + } + + @Override + public void onClose(IPCClient client, JsonObject json) { + + } + + @Override + public void onDisconnect(IPCClient client, Throwable t) { + connected = false; + } + }); + + new Thread(() -> { + try { + client.connect(); + } catch (NoDiscordClientException e) { + connected = false; + } + }, "discord-rpc-init").start(); + } + + public static void updatePresence(String details, String state) { + if (!connected) return; + RichPresence presence = new RichPresence.Builder() + .setActivityType(ActivityType.Playing) + .setDetails(details) + .setState(state) + .setStartTimestamp(OffsetDateTime.now().toEpochSecond()) + .setLargeImage("icon_large", "My Mod") + .build(); + client.sendRichPresence(presence); + } + + public static void shutdown() { + if (client != null) client.close(); + } +}