Basic Discord Stuff
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user