Basic Discord Stuff

This commit is contained in:
Patrick
2026-06-20 22:25:34 +02:00
parent be2badeee3
commit fcb32f26d8
3 changed files with 96 additions and 0 deletions
+2
View File
@@ -27,6 +27,8 @@ dependencies {
implementation "dev.icyllis:modernui-core:${modernui_version}" implementation "dev.icyllis:modernui-core:${modernui_version}"
implementation "icyllis.modernui:ModernUI-Markflow:${modernui_version}" implementation "icyllis.modernui:ModernUI-Markflow:${modernui_version}"
implementation("icyllis.modernui:ModernUI-Fabric:${minecraft_version}-${modernui_version}.+") implementation("icyllis.modernui:ModernUI-Fabric:${minecraft_version}-${modernui_version}.+")
include(implementation("io.github.CDAGaming:DiscordIPC:0.10.2"))
} }
processResources { processResources {
@@ -1,6 +1,8 @@
package de.winniepat.parrotmod; package de.winniepat.parrotmod;
import de.winniepat.parrotmod.discord.DiscordRPCManager;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
public class Parrotmod implements ModInitializer { public class Parrotmod implements ModInitializer {
@@ -8,6 +10,8 @@ public class Parrotmod implements ModInitializer {
@Override @Override
public void onInitialize() { public void onInitialize() {
DiscordRPCManager.init();
ClientLifecycleEvents.CLIENT_STOPPING.register(client -> DiscordRPCManager.shutdown());
} }
} }
@@ -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();
}
}