aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/SoundManagerMixin.java27
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java74
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java49
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json10
-rw-r--r--src/main/resources/skyblocker.mixins.json9
7 files changed, 195 insertions, 6 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index 6c6a6d2a..fac4107a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,7 +1,9 @@
package me.xmrvizzy.skyblocker;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.container.ContainerSolverManager;
import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze;
+import me.xmrvizzy.skyblocker.utils.Discord;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
@@ -35,7 +37,11 @@ public class SkyblockerMod {
if (ticks % 20 == 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();
+ }
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 74cff226..a424ea14 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -24,6 +24,10 @@ public class SkyblockerConfig implements ConfigData {
@ConfigEntry.Gui.TransitiveObject
public Messages messages = new Messages();
+ @ConfigEntry.Category("fishing")
+ @ConfigEntry.Gui.TransitiveObject
+ public Fishing fishing = new Fishing();
+
public static class General {
public String apiKey;
@@ -31,6 +35,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.Gui.Excluded
public List<Integer> lockedSlots = new ArrayList<>();
}
@@ -38,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 Locations {
@ConfigEntry.Category("dungeons")
@@ -80,6 +95,15 @@ public class SkyblockerConfig implements ConfigData {
public boolean hideAds = false;
}
+ public static class Fishing {
+ public boolean enableFishingDing = false;
+ }
+ public enum Info {
+ PIGGY,
+ BITS,
+ LOCATION
+ }
+
public static void init() {
AutoConfig.register(SkyblockerConfig.class, GsonConfigSerializer::new);
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/SoundManagerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/SoundManagerMixin.java
new file mode 100644
index 00000000..94380724
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/SoundManagerMixin.java
@@ -0,0 +1,27 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.sound.SoundInstance;
+import net.minecraft.client.sound.SoundManager;
+import net.minecraft.sound.SoundEvents;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(SoundManager.class)
+public class SoundManagerMixin {
+
+ private MinecraftClient client = MinecraftClient.getInstance();
+
+ @Inject(at = @At("HEAD"), method = "play(Lnet/minecraft/client/sound/SoundInstance;)V")
+ private void play(SoundInstance sound, CallbackInfo ci) {
+ if (sound.getId().toString().equals("minecraft:entity.player.splash")){
+ if (client.player.fishHook != null)
+ if (client.player.fishHook.isInOpenWater() && sound.getX() != client.player.getX() && sound.getY() != client.player.getY() && sound.getZ() != client.player.getZ() && SkyblockerConfig.get().fishing.enableFishingDing)
+ client.player.playSound(SoundEvents.ENTITY_ARROW_HIT_PLAYER, 1, 1);
+ }
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java
new file mode 100644
index 00000000..e04f2bdd
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Discord.java
@@ -0,0 +1,74 @@
+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.PIGGY) 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 87e5c846..93a28993 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
@@ -2,6 +2,7 @@ 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;
@@ -33,6 +34,7 @@ public class Utils {
ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip);
}
isSkyblock = true;
+
}
else isSkyblock = false;
@@ -44,6 +46,53 @@ 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);
+ }
+ 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 680787e8..0ad63665 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -9,6 +9,11 @@
"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.category.locations": "Locations",
"text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons",
@@ -32,5 +37,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 abc219fa..7fd36007 100644
--- a/src/main/resources/skyblocker.mixins.json
+++ b/src/main/resources/skyblocker.mixins.json
@@ -3,15 +3,16 @@
"package": "me.xmrvizzy.skyblocker.mixin",
"compatibilityLevel": "JAVA_17",
"client": [
+ "AccessorWorldRenderer",
"ChatHudListenerMixin",
"ClientPlayerEntityMixin",
+ "GenericContainerScreenHandlerMixin",
+ "GenericContainerScreenMixin",
"InGameHudMixin",
"ItemRendererMixin",
+ "LeverBlockMixin",
"MinecraftClientMixin",
- "AccessorWorldRenderer",
- "GenericContainerScreenMixin",
- "GenericContainerScreenHandlerMixin",
- "LeverBlockMixin"
+ "SoundManagerMixin"
],
"injectors": {
"defaultRequire": 1