diff options
-rw-r--r-- | build.gradle | 11 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 17 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java | 67 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java | 74 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 1 | ||||
-rw-r--r-- | src/main/resources/skyblocker.mixins.json | 10 |
6 files changed, 90 insertions, 90 deletions
diff --git a/build.gradle b/build.gradle index 16fe78a9..74e9e7a5 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,7 @@ repositories { name 'Maven Central' } maven {url "https://jitpack.io"} + maven {url "https://maven.jaackson.me/repo"} } @@ -55,12 +56,14 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation("com.github.thatgravyboat:DiscordIPC:d813b27") { - exclude module: 'log4j' - } - include "com.github.thatgravyboat:DiscordIPC:d813b27" // PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. // You may need to force-disable transitiveness on them. + modImplementation ("com.jagrosh:DiscordIPC:0.5"){ + exclude module: "slf4j-api" + } + include "com.jagrosh:DiscordIPC:0.5" + include(modImplementation("com.kohlschutter.junixsocket:junixsocket-common:2.0.4")) + include(modImplementation("com.kohlschutter.junixsocket:junixsocket-native-common:2.0.4")) } processResources { diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index fac4107a..ceb55549 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -2,8 +2,8 @@ package me.xmrvizzy.skyblocker; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.container.ContainerSolverManager; +import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; -import me.xmrvizzy.skyblocker.utils.Discord; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; @@ -11,6 +11,8 @@ public class SkyblockerMod { public static final String NAMESPACE = "skyblocker"; private static final SkyblockerMod instance = new SkyblockerMod(); public final ContainerSolverManager containerSolverManager = new ContainerSolverManager(); + public DiscordRPCManager discordRPCManager = new DiscordRPCManager(); + public static int rpTimer = 0; private SkyblockerMod() { } @@ -35,13 +37,16 @@ public class SkyblockerMod { //System.out.println("Blazesolver: " + e); } if (ticks % 20 == 0) { + rpTimer++; + if (rpTimer == 5){ + discordRPCManager.updatePresence(); + rpTimer = 0; + } if (client.world != null && !client.isInSingleplayer()) Utils.sbChecker(); - Discord.update(); - if (Discord.connected){ - if (SkyblockerConfig.get().general.richPresence.enableRichPresence) Discord.updatePresence(Discord.getInfo(), SkyblockerConfig.get().general.richPresence.customMessage); - if (!SkyblockerConfig.get().general.richPresence.enableRichPresence || !Utils.isSkyblock || client.world == null) Discord.stop(); - } + if (!discordRPCManager.isConnected && Utils.isSkyblock && SkyblockerConfig.get().general.richPresence.enableRichPresence) discordRPCManager.start(); + if (discordRPCManager.isConnected && !SkyblockerConfig.get().general.richPresence.enableRichPresence) discordRPCManager.stop(); + if (client.world == null || client.isInSingleplayer() || !Utils.isSkyblock) if (discordRPCManager.isConnected)discordRPCManager.stop(); ticks = 0; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java new file mode 100644 index 00000000..fc151371 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -0,0 +1,67 @@ +package me.xmrvizzy.skyblocker.discord; + +import com.jagrosh.discordipc.IPCClient; +import com.jagrosh.discordipc.IPCListener; +import com.jagrosh.discordipc.entities.RichPresence; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.DecimalFormat; +import java.time.OffsetDateTime; + +public class DiscordRPCManager implements IPCListener{ + public static long startTimestamp; + public static IPCClient client; + public boolean isConnected; + public static final Logger logger = LoggerFactory.getLogger("Skyblocker DiscordRPC"); + public static DecimalFormat dFormat = new DecimalFormat("###,###.##"); + + public void start(){ + try { + logger.info("Starting..."); + startTimestamp = OffsetDateTime.now().toEpochSecond(); + client = new IPCClient(934607927837356052L); + client.setListener(this); + try { + client.connect(); + } catch (Exception e) { + logger.warn("Failed to connect: " + e.getMessage()); + } + } catch (Throwable ex) { + logger.error("unexpected error occurred while trying to start..."); + ex.printStackTrace(); + } + } + + public void updatePresence(){ + RichPresence presence = new RichPresence.Builder() + .setState(SkyblockerConfig.get().general.richPresence.customMessage) + .setDetails(getInfo()) + .setStartTimestamp(startTimestamp) + .setLargeImage("skyblocker-default") + .build(); + if (client != null && isConnected) client.sendRichPresence(presence); + } + + public String getInfo(){ + String info = null; + if (SkyblockerConfig.get().general.richPresence.info == SkyblockerConfig.Info.BITS) info = "Bits: " + Utils.getBits(); + if (SkyblockerConfig.get().general.richPresence.info == SkyblockerConfig.Info.PURSE) info = "Purse: " + dFormat.format(Utils.getPurse()); + if (SkyblockerConfig.get().general.richPresence.info == SkyblockerConfig.Info.LOCATION) info = "⏣ " + Utils.getLocation(); + return info; + } + + public void stop(){ + isConnected = false; + client.close(); + client = null; + } + + @Override + public void onReady(IPCClient client) { + logger.info("Started!"); + isConnected = true; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java deleted file mode 100644 index 73ade9aa..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java +++ /dev/null @@ -1,74 +0,0 @@ -package me.xmrvizzy.skyblocker.utils; - -import com.jagrosh.discordipc.IPCClient; -import com.jagrosh.discordipc.IPCListener; -import com.jagrosh.discordipc.entities.RichPresence; -import com.jagrosh.discordipc.entities.RichPresenceButton; -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.text.DecimalFormat; - - -public class Discord { - public static Logger logger = LoggerFactory.getLogger(SkyblockerMod.NAMESPACE); - public static IPCClient ipcClient = new IPCClient(934607927837356052L); - public static boolean connected = false; - public static boolean warned = false; - public static DecimalFormat dFormat = new DecimalFormat("###,###.##"); - - - public static void updatePresence(String state, String details){ - logger.debug("updatePresence"); - RichPresence.Builder builder = new RichPresence.Builder(); - RichPresenceButton[] button = new RichPresenceButton[0]; - builder.setState(state) - .setDetails(details) - .setButtons(button) - .setLargeImage("skyblocker-default"); - ipcClient.sendRichPresence(builder.build()); - } - - public static String getInfo(){ - String info = null; - if (SkyblockerConfig.get().general.richPresence.info == SkyblockerConfig.Info.BITS) info = "Bits: " + Utils.getBits(); - if (SkyblockerConfig.get().general.richPresence.info == SkyblockerConfig.Info.PURSE) info = "Purse: " + dFormat.format(Utils.getPurse()); - if (SkyblockerConfig.get().general.richPresence.info == SkyblockerConfig.Info.LOCATION) info = "⏣ " + Utils.getLocation(); - return info; - } - - public static void stop(){ - ipcClient.close(); - ipcClient = null; - connected = false; - } - - public static void update(){ - if (Utils.isSkyblock && SkyblockerConfig.get().general.richPresence.enableRichPresence){ - - if (!connected){ - try { - ipcClient = new IPCClient(934607927837356052L); - ipcClient.connect(); - connected = true; - - } catch (Exception e) { - if (!warned){ - if (e.getLocalizedMessage().equals("java.net.SocketException: Connection refused")) - logger.warn("Discord client not running"); - warned = true; - } - } - } - - ipcClient.setListener(new IPCListener() { - @Override - public void onDisconnect(IPCClient client, Throwable t) { - IPCListener.super.onDisconnect(client, t); - connected = false; - } - }); - } -}} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index d790755d..8f299ac5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -2,7 +2,6 @@ package me.xmrvizzy.skyblocker.utils; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.minecraft.client.MinecraftClient; diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 50b69254..318f9708 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -3,16 +3,16 @@ "package": "me.xmrvizzy.skyblocker.mixin", "compatibilityLevel": "JAVA_17", "client": [ + "AccessorWorldRenderer", "ChatHudListenerMixin", "ClientPlayerEntityMixin", + "ClientPlayNetworkHandlerMixin", + "GenericContainerScreenHandlerMixin", + "GenericContainerScreenMixin", "InGameHudMixin", "ItemRendererMixin", - "MinecraftClientMixin", - "AccessorWorldRenderer", "LeverBlockMixin", - "GenericContainerScreenMixin", - "GenericContainerScreenHandlerMixin", - "ClientPlayNetworkHandlerMixin" + "MinecraftClientMixin" ], "injectors": { "defaultRequire": 1 |