aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorolim88 <bobq4582@gmail.com>2025-06-22 05:31:03 +0100
committerGitHub <noreply@github.com>2025-06-22 00:31:03 -0400
commitb2aeaab2eb109c6a7800ba7797114d23177f187f (patch)
tree5ab97ab3e51ab5b95f1601fa32343e4c1a5df777 /src/main/java
parent20ac6181f6dc88e9c5bcfb25dc8dda0517dfe6b5 (diff)
downloadSkyblocker-b2aeaab2eb109c6a7800ba7797114d23177f187f.tar.gz
Skyblocker-b2aeaab2eb109c6a7800ba7797114d23177f187f.tar.bz2
Skyblocker-b2aeaab2eb109c6a7800ba7797114d23177f187f.zip
Clean up fishing stuff (#1340)
* create main part of feature * integrate with new timer * clean up some more there is defiantly nothing wrong with this at this point * fix some sea creature raritys some of the sea creatures had the wrong rarity for some reason * make the creature notifications just say the creatures name * remove duplicated code * FIx isssues hopefully fix issues from review
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java59
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java28
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHelper.java116
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHookDisplayHelper.java23
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHudWidget.java52
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreature.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreatureTracker.java5
8 files changed, 167 insertions, 130 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
index 3e15d136..cb7224fe 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
@@ -1,7 +1,8 @@
-package de.hysky.skyblocker.config.categories;
+ package de.hysky.skyblocker.config.categories;
import de.hysky.skyblocker.config.ConfigUtils;
import de.hysky.skyblocker.config.SkyblockerConfig;
+import de.hysky.skyblocker.config.configs.HelperConfig;
import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper;
import de.hysky.skyblocker.skyblock.fishing.FishingHudWidget;
import de.hysky.skyblocker.skyblock.item.SkyblockItemRarity;
@@ -9,7 +10,6 @@ import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.waypoint.Waypoint;
import dev.isxander.yacl3.api.*;
-import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder;
import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
@@ -119,19 +119,33 @@ public class HelperCategory {
.collapsed(true)
.option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.helpers.fishing.enableFishingHelper"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.enableFishingHelper.@Tooltip")))
.binding(defaults.helpers.fishing.enableFishingHelper,
() -> config.helpers.fishing.enableFishingHelper,
newValue -> config.helpers.fishing.enableFishingHelper = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
- .name(Text.translatable("skyblocker.config.helpers.fishing.enableFishingHookDisplay"))
- .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.enableFishingHookDisplay.@Tooltip")))
- .binding(defaults.helpers.fishing.enableFishingHookDisplay,
- () -> config.helpers.fishing.enableFishingHookDisplay,
- newValue -> config.helpers.fishing.enableFishingHookDisplay = newValue)
+ .name(Text.translatable("skyblocker.config.helpers.fishing.hideOtherPlayers"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.hideOtherPlayers.@Tooltip")))
+ .binding(defaults.helpers.fishing.hideOtherPlayersRods,
+ () -> config.helpers.fishing.hideOtherPlayersRods,
+ newValue -> config.helpers.fishing.hideOtherPlayersRods = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(ButtonOption.createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.fishing.hud.screen"))
+ .text(Text.translatable("text.skyblocker.open"))
+ .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.HUB, FishingHudWidget.getInstance().getInternalID(), screen)))
+ .build())
+ .option(Option.<HelperConfig.Fishing.FishingHookDisplay>createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.fishing.fishingHookDisplay"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.fishingHookDisplay.@Tooltip")))
+ .binding(defaults.helpers.fishing.fishingHookDisplay,
+ () -> config.helpers.fishing.fishingHookDisplay,
+ newValue -> config.helpers.fishing.fishingHookDisplay = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
.option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.helpers.fishing.enableFishingTimer"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.enableFishingTimer.@Tooltip")))
@@ -141,34 +155,13 @@ public class HelperCategory {
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
- .name(Text.translatable("skyblocker.config.helpers.fishing.changeTimerColor"))
- .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.changeTimerColor.@Tooltip")))
- .binding(defaults.helpers.fishing.changeTimerColor,
- () -> config.helpers.fishing.changeTimerColor,
- newValue -> config.helpers.fishing.changeTimerColor = newValue)
- .controller(ConfigUtils::createBooleanController)
- .build())
- .option(Option.<Float>createBuilder()
- .name(Text.translatable("skyblocker.config.helpers.fishing.fishingTimerScale"))
- .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.fishingTimerScale.@Tooltip")))
- .binding(defaults.helpers.fishing.fishingTimerScale,
- () -> config.helpers.fishing.fishingTimerScale,
- newValue -> config.helpers.fishing.fishingTimerScale = newValue)
- .controller(FloatFieldControllerBuilder::create)
- .build())
- .option(Option.<Boolean>createBuilder()
- .name(Text.translatable("skyblocker.config.helpers.fishing.hideOtherPlayers"))
- .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.hideOtherPlayers.@Tooltip")))
- .binding(defaults.helpers.fishing.hideOtherPlayersRods,
- () -> config.helpers.fishing.hideOtherPlayersRods,
- newValue -> config.helpers.fishing.hideOtherPlayersRods = newValue)
+ .name(Text.translatable("skyblocker.config.helpers.fishing.hud.enableSeaCreatureCounter"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.hud.enableSeaCreatureCounter.@Tooltip")))
+ .binding(defaults.helpers.fishing.enableSeaCreatureCounter,
+ () -> config.helpers.fishing.enableSeaCreatureCounter,
+ newValue -> config.helpers.fishing.enableSeaCreatureCounter = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
- .option(ButtonOption.createBuilder()
- .name(Text.translatable("skyblocker.config.helpers.fishing.hud.screen"))
- .text(Text.translatable("text.skyblocker.open"))
- .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.HUB, FishingHudWidget.getInstance().getInternalID(), screen)))
- .build())
.option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.helpers.fishing.hud.onlyShowHudInBarn"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.hud.onlyShowHudInBarn.@Tooltip")))
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
index 0da94348..73673a67 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
@@ -4,6 +4,7 @@ import de.hysky.skyblocker.skyblock.item.SkyblockItemRarity;
import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.waypoint.Waypoint;
import dev.isxander.yacl3.config.v2.api.SerialEntry;
+import net.minecraft.client.resource.language.I18n;
import java.util.ArrayList;
import java.util.List;
@@ -74,25 +75,36 @@ public class HelperConfig {
@SerialEntry
public boolean enableFishingHelper = true;
+ @Deprecated
@SerialEntry
- public boolean enableFishingHookDisplay = true;
+ public transient boolean enableFishingHookDisplay = true;
@SerialEntry
public boolean enableFishingTimer = false;
+ @Deprecated
@SerialEntry
- public boolean changeTimerColor = true;
+ public transient boolean changeTimerColor = true;
+ @Deprecated
@SerialEntry
- public float fishingTimerScale = 1f;
+ public transient float fishingTimerScale = 1f;
@SerialEntry
public boolean hideOtherPlayersRods = false;
+
@SerialEntry
public List<Location> fishingHudEnabledLocations = new ArrayList<>(List.of(Location.values()));
@SerialEntry
+ public boolean enableSeaCreatureCounter = true;
+
+
+ @SerialEntry
+ public FishingHookDisplay fishingHookDisplay = FishingHookDisplay.HUD;
+
+ @SerialEntry
public boolean onlyShowHudInBarn = true;
@SerialEntry
@@ -109,6 +121,16 @@ public class HelperConfig {
@SerialEntry
public SkyblockItemRarity minimumNotificationRarity = SkyblockItemRarity.EPIC;
+
+ public enum FishingHookDisplay {
+ OFF,
+ CROSSHAIR,
+ HUD;
+ @Override
+ public String toString() {
+ return I18n.translate("skyblocker.config.helpers.fishing.fishingHookDisplay." + name());
+ }
+ }
}
public static class FairySouls {
diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
index 22e921ff..44df0f33 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
@@ -82,6 +82,7 @@ public abstract class ClientPlayNetworkHandlerMixin extends ClientCommonNetworkH
CorpseFinder.checkIfCorpse(armorStandEntity);
HealthBars.healthBar(armorStandEntity);
SeaCreatureTracker.onEntitySpawn(armorStandEntity);
+ FishingHelper.checkIfFishWasCaught(armorStandEntity);
try { //Prevent packet handling fails if something goes wrong so that entity trackers still update, just without compact damage numbers
CompactDamage.compactDamage(armorStandEntity);
} catch (Exception e) {
@@ -150,7 +151,6 @@ public abstract class ClientPlayNetworkHandlerMixin extends ClientCommonNetworkH
@Inject(method = "onPlaySound", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER), cancellable = true)
private void skyblocker$onPlaySound(PlaySoundS2CPacket packet, CallbackInfo ci) {
- FishingHelper.onSound(packet);
CrystalsChestHighlighter.onSound(packet);
SoundEvent sound = packet.getSound().value();
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHelper.java
index 901dccfc..176e6ce6 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHelper.java
@@ -2,100 +2,74 @@ package de.hysky.skyblocker.skyblock.fishing;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.config.configs.HelperConfig;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.RenderHelper;
import de.hysky.skyblocker.utils.render.title.Title;
+import de.hysky.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.fabricmc.fabric.api.event.player.UseItemCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
+import net.minecraft.entity.decoration.ArmorStandEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.FishingRodItem;
import net.minecraft.item.ItemStack;
-import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
-import net.minecraft.sound.SoundEvent;
-import net.minecraft.sound.SoundEvents;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Formatting;
-import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
public class FishingHelper {
- private static final Title title = new Title("skyblocker.fishing.reelNow", Formatting.GREEN);
- private static long startTime;
- private static long startTimeFish;
- private static Vec3d normalYawVector;
+ private static final Title title = new Title("skyblocker.fishing.reelNow", Formatting.GREEN);
+ protected static long startTime;
+ @Init
+ public static void init() {
+ UseItemCallback.EVENT.register((player, world, hand) -> {
+ ItemStack stack = player.getStackInHand(hand);
+ if (!Utils.isOnSkyblock()) {
+ return ActionResult.PASS;
+ }
+ if (stack.getItem() instanceof FishingRodItem) {
+ if (player.fishHook == null) {
+ start(player);
+ } else {
+ reset();
+ }
+ }
+ return ActionResult.PASS;
+ });
+ }
- @Init
- public static void init() {
- UseItemCallback.EVENT.register((player, world, hand) -> {
- ItemStack stack = player.getStackInHand(hand);
- if (!Utils.isOnSkyblock()) {
- return ActionResult.PASS;
- }
- if (stack.getItem() instanceof FishingRodItem) {
- if (player.fishHook == null) {
- start(player);
- } else {
- reset();
- }
- }
- return ActionResult.PASS;
- });
- WorldRenderEvents.AFTER_TRANSLUCENT.register(FishingHelper::render);
- }
+ public static void start(PlayerEntity player) {
+ startTime = System.currentTimeMillis();
+ float yawRad = player.getYaw() * 0.017453292F;
+ }
- public static void start(PlayerEntity player) {
- startTime = System.currentTimeMillis();
- startTimeFish = System.currentTimeMillis();
- float yawRad = player.getYaw() * 0.017453292F;
- normalYawVector = new Vec3d(-MathHelper.sin(yawRad), 0, MathHelper.cos(yawRad));
- }
+ public static void reset() {
+ startTime = 0;
+ //once amour stand is gone reset rod real timer
+ }
- public static void reset() {
- startTime = 0;
- startTimeFish = 0;
- }
- public static void resetFish() {
- startTimeFish = 0;
- }
- public static void onSound(PlaySoundS2CPacket packet) {
- SoundEvent sound = packet.getSound().value();
- if (SkyblockerConfigManager.get().helpers.fishing.enableFishingHelper && startTimeFish != 0 && System.currentTimeMillis() >= startTimeFish + 2000 && (sound.id().equals(SoundEvents.ENTITY_GENERIC_SPLASH.id()) || sound.id().equals(SoundEvents.ENTITY_PLAYER_SPLASH.id()))) {
- ClientPlayerEntity player = MinecraftClient.getInstance().player;
- if (player != null && player.fishHook != null) {
- Vec3d soundToFishHook = player.fishHook.getPos().subtract(packet.getX(), 0, packet.getZ());
- if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) {
- RenderHelper.displayInTitleContainerAndPlaySound(title, 10);
- resetFish();
- }
- } else {
- reset();
- }
- }
- }
+ // Sends a title notification if a fish is caught
+ public static void checkIfFishWasCaught(ArmorStandEntity armorStand) {
+ if (Utils.isOnSkyblock() && (SkyblockerConfigManager.get().helpers.fishing.enableFishingHelper || SkyblockerConfigManager.get().helpers.fishing.fishingHookDisplay == HelperConfig.Fishing.FishingHookDisplay.HUD)) {
+ if (!armorStand.isInvisible() || !armorStand.hasCustomName() || !armorStand.isCustomNameVisible()) return;
- public static void render(WorldRenderContext context) {
- if (SkyblockerConfigManager.get().helpers.fishing.enableFishingTimer && startTime != 0) {
- ClientPlayerEntity player = MinecraftClient.getInstance().player;
- if (player != null && player.fishHook != null) {
- float time = (int) ((System.currentTimeMillis() - startTime) / 100f) / 10f; //leave 1dp in seconds
- float scale = SkyblockerConfigManager.get().helpers.fishing.fishingTimerScale;
- Vec3d pos = player.fishHook.getPos().add(0, 0.4 + scale / 10, 0);
+ ClientPlayerEntity player = MinecraftClient.getInstance().player;
+ if (player != null && player.fishHook != null) {
+ String name = armorStand.getCustomName().getString();
+ if (name.equals("!!!") && player.fishHook.getBoundingBox().expand(4D).contains(armorStand.getPos())) {
+ if (SkyblockerConfigManager.get().helpers.fishing.enableFishingHelper) {
+ RenderHelper.displayInTitleContainerAndPlaySound(title, 10);
+ }
+ }
+ }
+ }
+ }
- Text text;
- if (time >= 20 && SkyblockerConfigManager.get().helpers.fishing.changeTimerColor) {
- text = Text.literal(String.valueOf(time)).formatted(Formatting.GREEN);
- } else {
- text = Text.literal(String.valueOf(time));
- }
- RenderHelper.renderText(context, text, pos, scale, true);
- }
- }
- }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHookDisplayHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHookDisplayHelper.java
index a1608b0d..c3f285d9 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHookDisplayHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHookDisplayHelper.java
@@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.fishing;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.config.configs.HelperConfig;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
@@ -11,13 +12,15 @@ import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.entity.decoration.ArmorStandEntity;
+import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
+import java.awt.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FishingHookDisplayHelper {
- private static ArmorStandEntity fishingHookArmorStand;
+ protected static ArmorStandEntity fishingHookArmorStand;
private static final Identifier FISHING_HOOK_DISPLAY = Identifier.of(SkyblockerMod.NAMESPACE, "fishing_hook_display");
static Pattern pattern = Pattern.compile("\\d.\\d");
@@ -29,7 +32,7 @@ public class FishingHookDisplayHelper {
}
public static void render(DrawContext context, RenderTickCounter tickDelta) {
- if (!SkyblockerConfigManager.get().helpers.fishing.enableFishingHookDisplay) return;
+ if (SkyblockerConfigManager.get().helpers.fishing.fishingHookDisplay == HelperConfig.Fishing.FishingHookDisplay.OFF) return;
// Check if the armor stand is null or invalid
@@ -41,11 +44,11 @@ public class FishingHookDisplayHelper {
MinecraftClient client = MinecraftClient.getInstance();
ClientPlayerEntity player = client.player;
- if (player == null || player.fishHook == null) return;
+ if (player == null || player.fishHook == null || fishingHookArmorStand == null) return;
- // Proceed only if fishingHookArmorStand is not null
- if (fishingHookArmorStand != null) {
- String armorStandName = fishingHookArmorStand.getName().getString();
+ // render on the crosshair if enabled
+ if (SkyblockerConfigManager.get().helpers.fishing.fishingHookDisplay == HelperConfig.Fishing.FishingHookDisplay.CROSSHAIR) {
+ Text armorStandName = fishingHookArmorStand.getName();
int screenWidth = client.getWindow().getScaledWidth();
int screenHeight = client.getWindow().getScaledHeight();
@@ -55,13 +58,17 @@ public class FishingHookDisplayHelper {
// Scale the text by 3x
context.getMatrices().push();
context.getMatrices().scale(3.0F, 3.0F, 1.0F);
- context.drawCenteredTextWithShadow(client.textRenderer, armorStandName, (int) (x / 3.0F), (int) (y / 3.0F), 0xFFFF00);
+ context.drawCenteredTextWithShadow(client.textRenderer, armorStandName, (int) (x / 3.0F), (int) (y / 3.0F),0);
context.getMatrices().pop();
}
+ //else update the tab
+ else {
+ FishingHudWidget.getInstance().update();
+ }
}
public static void onArmorStandSpawn(ArmorStandEntity armorStand) {
- if (!SkyblockerConfigManager.get().helpers.fishing.enableFishingHookDisplay) return;
+ if (SkyblockerConfigManager.get().helpers.fishing.fishingHookDisplay == HelperConfig.Fishing.FishingHookDisplay.OFF) return;
if (fishingHookArmorStand != null) return;
MinecraftClient client = MinecraftClient.getInstance();
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHudWidget.java
index 6d404442..4c34eb0c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHudWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fishing/FishingHudWidget.java
@@ -2,12 +2,17 @@ package de.hysky.skyblocker.skyblock.fishing;
import de.hysky.skyblocker.annotations.RegisterWidget;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.config.configs.HelperConfig;
+import de.hysky.skyblocker.skyblock.PetCache;
+import de.hysky.skyblocker.skyblock.item.PetInfo;
+import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder;
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
import de.hysky.skyblocker.skyblock.tabhud.widget.ComponentBasedWidget;
import de.hysky.skyblocker.skyblock.tabhud.widget.component.Components;
import de.hysky.skyblocker.utils.ColorUtils;
import de.hysky.skyblocker.utils.Location;
+import de.hysky.skyblocker.utils.SkyblockTime;
import de.hysky.skyblocker.utils.Utils;
import it.unimi.dsi.fastutil.objects.ObjectFloatPair;
import net.minecraft.client.MinecraftClient;
@@ -59,11 +64,24 @@ public class FishingHudWidget extends ComponentBasedWidget {
@Override
public boolean shouldRender(Location location) {
- if (super.shouldRender(location) && SeaCreatureTracker.isCreaturesAlive()) {
+ if (!super.shouldRender(location)) {
+ return false;
+ }
+ // sea creature tracker
+ if (SkyblockerConfigManager.get().helpers.fishing.enableSeaCreatureCounter && SeaCreatureTracker.isCreaturesAlive()) {
if (Utils.getLocation() == Location.HUB && SkyblockerConfigManager.get().helpers.fishing.onlyShowHudInBarn) {
return isBarnFishing();
}
return true;
+
+ }
+ //bobber timer
+ if (SkyblockerConfigManager.get().helpers.fishing.enableFishingTimer && FishingHelper.startTime != 0) {
+ return true;
+ }
+ //rod timer
+ if ((SkyblockerConfigManager.get().helpers.fishing.fishingHookDisplay == HelperConfig.Fishing.FishingHookDisplay.HUD) && FishingHookDisplayHelper.fishingHookArmorStand != null) {
+ return true;
}
return false;
}
@@ -75,12 +93,34 @@ public class FishingHudWidget extends ComponentBasedWidget {
addComponent(Components.progressComponent(Ico.CLOCK, Text.of("Time Left"), Text.of("1m"), 60f / SkyblockerConfigManager.get().helpers.fishing.timerLength * 100));
return;
}
+ //creature counter
+ if (SkyblockerConfigManager.get().helpers.fishing.enableSeaCreatureCounter && SeaCreatureTracker.isCreaturesAlive()) {
+
+ ObjectFloatPair<Text> timer = SeaCreatureTracker.getTimerText(SeaCreatureTracker.getOldestSeaCreatureAge());
+ int seaCreatureCap = SeaCreatureTracker.getSeaCreatureCap();
+ float seaCreaturePercent = (float) SeaCreatureTracker.seaCreatureCount() / seaCreatureCap * 100;
+ addComponent(Components.progressComponent(Ico.TROPICAL_FISH_BUCKET, Text.of("Alive Creatures"), Text.of(SeaCreatureTracker.seaCreatureCount() + "/" + seaCreatureCap), seaCreaturePercent, ColorUtils.percentToColor(100 - seaCreaturePercent)));
+ addComponent(Components.progressComponent(Ico.CLOCK, Text.of("Time Left"), timer.left(), timer.rightFloat()));
+ }
+ //bobber timer
+ if (SkyblockerConfigManager.get().helpers.fishing.enableFishingTimer && FishingHelper.startTime != 0) {
+ float time = Math.round((System.currentTimeMillis() - FishingHelper.startTime) / 1000f);
+ float maxTime;
+ PetInfo pet = PetCache.getCurrentPet();
+ if (pet != null && pet.type().contains("SLUG")){
+ int level = LevelFinder.getLevelInfo("PET_"+pet.tier(),(long)pet.exp()).level;
+ maxTime =20 * (1 - (level/200f));
+ }else{
+ maxTime = 20;
+ }
+ addComponent(Components.progressComponent(Ico.CLOCK, Text.of("Bobber Time"), SkyblockTime.formatTime(maxTime - time), 100 - (time / maxTime) * 100));
+ }
+ // rod reel timer
+ if (SkyblockerConfigManager.get().helpers.fishing.fishingHookDisplay == HelperConfig.Fishing.FishingHookDisplay.HUD && FishingHookDisplayHelper.fishingHookArmorStand != null) {
+ String rodReelTimer = FishingHookDisplayHelper.fishingHookArmorStand.getName().getString();
+ addSimpleIcoText(Ico.CLOCK, "Reel Timer: ", rodReelTimer.equals("!!!") ? Formatting.RED : Formatting.YELLOW, rodReelTimer);
+ }
- ObjectFloatPair<Text> timer = SeaCreatureTracker.getTimerText(SeaCreatureTracker.getOldestSeaCreatureAge());
- int seaCreatureCap = SeaCreatureTracker.getSeaCreatureCap();
- float seaCreaturePercent = (float) SeaCreatureTracker.seaCreatureCount() / seaCreatureCap * 100;
- addComponent(Components.progressComponent(Ico.TROPICAL_FISH_BUCKET, Text.of("Alive Creatures"), Text.of(SeaCreatureTracker.seaCreatureCount() + "/" + seaCreatureCap), seaCreaturePercent, ColorUtils.percentToColor(100 - seaCreaturePercent)));
- addComponent(Components.progressComponent(Ico.CLOCK, Text.of("Time Left"), timer.left(), timer.rightFloat()));
}
@Override
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreature.java b/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreature.java
index 626c7df7..a193dba4 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreature.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreature.java
@@ -39,22 +39,22 @@ public enum SeaCreature {
MEDIUM_MITHRIL_GRUBBER("Medium Mithril Grubber", "A leech of the mines surfaces... you've caught a Medium Mithril Grubber.", SkyblockItemRarity.UNCOMMON, SeaCreatureCategory.ABANDONED_QUARRY),
LARGE_MITHRIL_GRUBBER("Large Mithril Grubber", "A leech of the mines surfaces... you've caught a Large Mithril Grubber.", SkyblockItemRarity.UNCOMMON, SeaCreatureCategory.ABANDONED_QUARRY),
BLOATED_MITHRIL_GRUBBER("Bloated Mithril Grubber", "A leech of the mines surfaces... you've caught a Bloated Mithril Grubber.", SkyblockItemRarity.UNCOMMON, SeaCreatureCategory.ABANDONED_QUARRY),
- LAVA_BLAZE("Lava Blaze", "A Lava Blaze has surfaced from the depths!", SkyblockItemRarity.RARE, SeaCreatureCategory.MAGMA_FIELDS),
- LAVA_PIGMAN("Lava Pigman", "A Lava Pigman arose from the depths!", SkyblockItemRarity.RARE, SeaCreatureCategory.MAGMA_FIELDS),
+ LAVA_BLAZE("Lava Blaze", "A Lava Blaze has surfaced from the depths!", SkyblockItemRarity.EPIC, SeaCreatureCategory.MAGMA_FIELDS),
+ LAVA_PIGMAN("Lava Pigman", "A Lava Pigman arose from the depths!", SkyblockItemRarity.EPIC, SeaCreatureCategory.MAGMA_FIELDS),
FLAMING_WORM("Flaming Worm", "A Flaming Worm surfaces from the depths!", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_PRECURSOR),
WATER_WORM("Water Worm", "A Water Worm surfaces!", SkyblockItemRarity.RARE, SeaCreatureCategory.GOBLIN_BURROWS),
POISONED_WATER_WORM("Poisoned Water Worm", "A Poisoned Water Worm surfaces!", SkyblockItemRarity.RARE, SeaCreatureCategory.GOBLIN_BURROWS),
ABYSSAL_MINER("Abyssal Miner", "An Abyssal Miner breaks out of the water!", SkyblockItemRarity.LEGENDARY, SeaCreatureCategory.WATER_CRYSTAL_HOLLOWS),
- MOOGMA("Moogma", "You hear a faint Moo from the lava... A Moogma appears.", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
- MAGMA_SLUG("Magma Slug", "From beneath the lava appears a Magma Slug.", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
+ MOOGMA("Moogma", "You hear a faint Moo from the lava... A Moogma appears.", SkyblockItemRarity.UNCOMMON, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
+ MAGMA_SLUG("Magma Slug", "From beneath the lava appears a Magma Slug.", SkyblockItemRarity.UNCOMMON, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
PYROCLASTIC_WORM("Pyroclastic Worm", "You feel the heat radiating as a Pyroclastic Worm surfaces.", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
LAVA_FLAME("Lava Flame", "A Lava Flame flies out from beneath the lava.", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
FIRE_EEL("Fire Eel", "A Fire Eel slithers out from the depths.", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
LAVA_LEECH("Lava Leech", "A small but fearsome Lava Leech emerges.", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
- TAURUS("Taurus", "Taurus and his steed emerge.", SkyblockItemRarity.RARE, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
+ TAURUS("Taurus", "Taurus and his steed emerge.", SkyblockItemRarity.EPIC, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
THUNDER("Thunder", "§c§lYou hear a massive rumble as Thunder emerges.", SkyblockItemRarity.MYTHIC, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
LORD_JAWBUS("Lord Jawbus", "§c§lYou have angered a legendary creature... Lord Jawbus has arrived.", SkyblockItemRarity.MYTHIC, SeaCreatureCategory.LAVA_CRIMSON_ISLE),
- PLHLEGBLAST("Plhlegblast", "WOAH! A Plhlegblast appeared.", SkyblockItemRarity.COMMON, SeaCreatureCategory.PLHLEGBLAST),
+ PLHLEGBLAST("Plhlegblast", "WOAH! A Plhlegblast appeared.", SkyblockItemRarity.MYTHIC, SeaCreatureCategory.PLHLEGBLAST),
TRASH_GOBBLER("Trash Gobbler", "The Trash Gobbler is hungry for you!", SkyblockItemRarity.COMMON, SeaCreatureCategory.BACKWATER_BAYOU),
BANSHEE("Banshee", "The desolate wail of a Banshee breaks the silence.", SkyblockItemRarity.RARE, SeaCreatureCategory.BACKWATER_BAYOU),
ALLIGATOR("Alligator", "A long snout breaks the surface of the water. It's an Alligator!", SkyblockItemRarity.LEGENDARY, SeaCreatureCategory.BACKWATER_BAYOU),
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreatureTracker.java b/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreatureTracker.java
index 38365c0f..92278e62 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreatureTracker.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fishing/SeaCreatureTracker.java
@@ -79,9 +79,10 @@ public class SeaCreatureTracker {
private static void checkRarityNotification() {
SkyblockItemRarity rarityThreshold = SkyblockerConfigManager.get().helpers.fishing.minimumNotificationRarity;
if (rarityThreshold == SkyblockItemRarity.UNKNOWN) return;
- SkyblockItemRarity lastCreatureRarity = seaCreatures.sequencedValues().getLast().seaCreature.rarity;
+ SeaCreature lastCreature = seaCreatures.sequencedValues().getLast().seaCreature;
+ SkyblockItemRarity lastCreatureRarity = lastCreature.rarity;
if (lastCreatureRarity.compareTo(rarityThreshold) >= 0) {
- TitleContainer.addTitle(new Title(Text.translatable("skyblocker.config.helpers.fishing.minimumNotificationRarity.notification", lastCreatureRarity).formatted(lastCreatureRarity.formatting)), 60);
+ TitleContainer.addTitle(new Title(Text.literal(lastCreature.name).formatted(lastCreatureRarity.formatting)), 60);
if (CLIENT.player == null) return;
CLIENT.player.playSound(SoundEvents.ENTITY_ARROW_HIT_PLAYER, 100f, 0.1f);
}