diff options
author | Yasin <LifeIsAParadox@users.noreply.github.com> | 2022-01-28 01:59:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-28 01:59:23 +0100 |
commit | a3b5cad38376be3da5674480ec60f4610b321671 (patch) | |
tree | 1f7ede2101c7f4d620beed27295c101cb0b30906 | |
parent | bce4959edc1766958e7e8a92827ac101a3dcae73 (diff) | |
parent | a7e240c3e33df6c1f57018de526b60dbf0561347 (diff) | |
download | Skyblocker-a3b5cad38376be3da5674480ec60f4610b321671.tar.gz Skyblocker-a3b5cad38376be3da5674480ec60f4610b321671.tar.bz2 Skyblocker-a3b5cad38376be3da5674480ec60f4610b321671.zip |
Merge pull request #31 from TacoMonkey11/master
Added Discord Rich Presence with a few other small fixes
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | FEATURES.md | 3 | ||||
-rw-r--r-- | build.gradle | 8 | ||||
-rw-r--r-- | settings.gradle | 2 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 13 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 16 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java | 67 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java | 3 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 49 | ||||
-rw-r--r-- | src/main/resources/assets/skyblocker/lang/en_us.json | 11 | ||||
-rw-r--r-- | src/main/resources/skyblocker.mixins.json | 5 |
11 files changed, 172 insertions, 9 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 56c1626e..d6f13385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Release 1.4.3 -changed dependency Skyblocker requiere minimum **fabricloader** 0.12.11 +changed dependency Skyblocker requires minimum **fabricloader** 0.12.11 Fixes * security fix @@ -104,4 +104,4 @@ ___ # Skyblocker Fabric 1.17.1 This release updates the skyblocker mod to mc version 1.17. -This is the first time i created/edited a mod.
\ No newline at end of file +This is the first time I created/edited a mod.
\ No newline at end of file diff --git a/FEATURES.md b/FEATURES.md index 0b53c91f..9a86591e 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -10,4 +10,5 @@ * Hotbar Slot Lock Keybind (Select the hotbar slot you want to lock/unlock and press the lockbutton) * price tooltip: npc, bazaar (avg, lbin), ah, museum * reparty: write /rp to reparty -* Wiki Lookup: press f4 to open the wiki page about the held item
\ No newline at end of file +* Wiki Lookup: press f4 to open the wiki page about the held item +* Discord Rich Presence: Allows user to show either their Piggy, Bits, or location. Along with a custom message
\ No newline at end of file diff --git a/build.gradle b/build.gradle index bc703890..d38f2223 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,8 @@ repositories { url 'https://repo.maven.apache.org/maven2' name 'Maven Central' } + maven {url "https://jitpack.io"} + maven {url "https://maven.jaackson.me/repo"} } @@ -62,6 +64,12 @@ dependencies { // 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/settings.gradle b/settings.gradle index b02216ba..56266b41 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,4 +7,4 @@ pluginManagement { mavenCentral() gradlePluginPortal() } -} +}
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 6c6a6d2a..ceb55549 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -1,6 +1,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.Utils; import net.minecraft.client.MinecraftClient; @@ -9,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() { } @@ -33,9 +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(); - + 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/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 9c817d44..59781b4f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -31,6 +31,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) public Bars bars = new Bars(); + @ConfigEntry.Category("RichPresence") + @ConfigEntry.Gui.CollapsibleObject() + public RichPresence richPresence = new RichPresence(); + @ConfigEntry.Category("itemList") @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) public ItemList itemList = new ItemList(); @@ -42,6 +46,13 @@ public class SkyblockerConfig implements ConfigData { public static class Bars { public boolean enableBars = true; } + public static class RichPresence { + @ConfigEntry.Gui.Tooltip() + public boolean enableRichPresence = true; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public Info info = Info.LOCATION; + public String customMessage; + } public static class ItemList { public boolean enableItemList = true; @@ -87,6 +98,11 @@ public class SkyblockerConfig implements ConfigData { public boolean hideMoltenWave = false; public boolean hideAds = false; } + public enum Info { + PURSE, + BITS, + LOCATION + } public static void init() { AutoConfig.register(SkyblockerConfig.class, GsonConfigSerializer::new); 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/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java index 26012b21..ef900eef 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java @@ -5,6 +5,7 @@ import com.mojang.brigadier.CommandDispatcher; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.util.telemetry.TelemetrySender; import net.minecraft.command.CommandSource; import net.minecraft.network.ClientConnection; import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket; @@ -22,7 +23,7 @@ public class ClientPlayNetworkHandlerMixin { @Shadow private CommandDispatcher<CommandSource> commandDispatcher; @Inject(method = "<init>", at = @At("RETURN")) - private void init(MinecraftClient client, Screen screen, ClientConnection connection, GameProfile profile, CallbackInfo ci) { + private void init(MinecraftClient client, Screen screen, ClientConnection connection, GameProfile profile, TelemetrySender telemetrySender, CallbackInfo ci) { commandDispatcher.register(literal("skb")); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 87e5c846..8f299ac5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -33,6 +33,7 @@ public class Utils { ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); } isSkyblock = true; + } else isSkyblock = false; @@ -44,6 +45,54 @@ public class Utils { } } + public static String getLocation() { + String location = null; + List<String> sidebarLines = getSidebar(); + try{ + for (int i = 0; i < sidebarLines.size(); i++) { + if(sidebarLines.get(i).contains("⏣")) location = sidebarLines.get(i); + } + if (location == null) location = "Unknown"; + location = location.replace('⏣', ' ').strip(); + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + } + return location; + } + public static double getPurse() { + String purseString = null; + double purse = 0; + + List<String> sidebarLines = getSidebar(); + try{ + for (int i = 0; i < sidebarLines.size(); i++) { + if(sidebarLines.get(i).contains("Piggy:")) purseString = sidebarLines.get(i); + if(sidebarLines.get(i).contains("Purse:")) purseString = sidebarLines.get(i); + } + if (purseString != null) purse = Double.parseDouble(purseString.replaceAll("[^0-9.]", "").strip()); + else purse = 0; + + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + } + return purse; + } + public static int getBits() { + int bits = 0; + String bitsString = null; + List<String> sidebarLines = getSidebar(); + try{ + for (int i = 0; i < sidebarLines.size(); i++) { + if(sidebarLines.get(i).contains("Bits")) bitsString = sidebarLines.get(i); + } + bits = Integer.parseInt(bitsString.replaceAll("Bits:", "").strip()); + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + } + return bits; + } + + public static List<String> getSidebar() { List<String> lines = new ArrayList<>(); MinecraftClient client = MinecraftClient.getInstance(); diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index cdca7822..cda4bcaf 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -9,6 +9,12 @@ "text.autoconfig.skyblocker.option.general.apiKey": "Hypixel API Key (WIP)", "text.autoconfig.skyblocker.option.general.bars": "Health, Mana, Defence & XP Bars", "text.autoconfig.skyblocker.option.general.bars.enableBars": "Enable Bars", + + "text.autoconfig.skyblocker.option.general.richPresence": "Discord Rich Presence", + "text.autoconfig.skyblocker.option.general.richPresence.info": "Skyblock Info", + "text.autoconfig.skyblocker.option.general.richPresence.enableRichPresence": "Enabled", + "text.autoconfig.skyblocker.option.general.richPresence.customMessage": "Custom Message", + "text.autoconfig.skyblocker.option.general.itemList": "Item List", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Enable Item List", @@ -34,5 +40,8 @@ "text.autoconfig.skyblocker.option.messages.hideAOTE": "Hide AOTE Messages", "text.autoconfig.skyblocker.option.messages.hideImplosion": "Hide Implosion Message", "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Hide Molten Wave Message", - "text.autoconfig.skyblocker.option.messages.hideAds": "Hide Ads From Public Chat" + "text.autoconfig.skyblocker.option.messages.hideAds": "Hide Ads From Public Chat", + + "text.autoconfig.skyblocker.category.fishing": "Fishing", + "text.autoconfig.skyblocker.option.fishing.enableFishingDing": "Enable Fishing Ding" }
\ No newline at end of file diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 6da4efb2..6efba1f9 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -5,13 +5,14 @@ "client": [ "ChatHudListenerMixin", "ClientPlayerEntityMixin", + "ClientPlayNetworkHandlerMixin", "InGameHudMixin", "ItemRendererMixin", - "MinecraftClientMixin", + "LeverBlockMixin", + "MinecraftClientMixin" "AccessorWorldRenderer", "GenericContainerScreenMixin", "GenericContainerScreenHandlerMixin", - "LeverBlockMixin", "HandledScreenMixin" ], "injectors": { |