diff options
| author | olim88 <bobq4582@gmail.com> | 2025-06-22 05:31:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-22 00:31:03 -0400 |
| commit | b2aeaab2eb109c6a7800ba7797114d23177f187f (patch) | |
| tree | 5ab97ab3e51ab5b95f1601fa32343e4c1a5df777 /src/main/java | |
| parent | 20ac6181f6dc88e9c5bcfb25dc8dda0517dfe6b5 (diff) | |
| download | Skyblocker-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')
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); } |
