From 1ea5f54ab6d7edf7a7c5971db05e22667d3a9c93 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Jan 2024 13:37:37 -0500 Subject: Arrow Poison Warnings --- .../crimson/kuudra/ArrowPoisonWarning.java | 54 ++++++++++++++++++++++ .../skyblocker/skyblock/crimson/kuudra/Kuudra.java | 31 +++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java (limited to 'src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java new file mode 100644 index 00000000..7ddbeb99 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java @@ -0,0 +1,54 @@ +package de.hysky.skyblocker.skyblock.crimson.kuudra; + +import java.util.function.Supplier; + +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.crimson.kuudra.Kuudra.KuudraPhase; +import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.render.RenderHelper; +import de.hysky.skyblocker.utils.render.title.Title; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.BowItem; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class ArrowPoisonWarning { + private static final Supplier CONFIG = () -> SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; + private static final int THREE_SECONDS = 20 * 3; + private static final Title NONE_TITLE = new Title(Text.translatable("skyblocker.crimson.kuudra.noArrowPoison").formatted(Formatting.GREEN)); + private static final Title LOW_TITLE = new Title(Text.translatable("skyblocker.crimson.kuudra.lowArrowPoison").formatted(Formatting.GREEN)); + + public static void tryWarn(int newSlot) { + //Exclude skyblock menu + if (Utils.isInKuudra() && CONFIG.get().noArrowPoisonWarning && Kuudra.phase == KuudraPhase.DPS && newSlot != 8) { + MinecraftClient client = MinecraftClient.getInstance(); + PlayerInventory inventory = client.player.getInventory(); + ItemStack heldItem = inventory.getStack(newSlot); + + if (heldItem.getItem() instanceof BowItem) { + boolean hasToxicArrowPoison = false; + int arrowPoisonAmount = 0; + + for (int i = 0; i < inventory.size(); ++i) { + ItemStack stack = inventory.getStack(i); + String itemId = ItemUtils.getItemId(stack); + + if (itemId.equals("TOXIC_ARROW_POISON")) { + hasToxicArrowPoison = true; + arrowPoisonAmount += stack.getCount(); + } + } + + if (!hasToxicArrowPoison) { + RenderHelper.displayInTitleContainerAndPlaySound(NONE_TITLE, THREE_SECONDS); + } else if (arrowPoisonAmount < CONFIG.get().arrowPoisonThreshold) { + RenderHelper.displayInTitleContainerAndPlaySound(LOW_TITLE, THREE_SECONDS); + } + } + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/Kuudra.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/Kuudra.java index 007454f4..48ad8d7e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/Kuudra.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/Kuudra.java @@ -1,15 +1,46 @@ package de.hysky.skyblocker.skyblock.crimson.kuudra; +import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; public class Kuudra { public static final String LOCATION = "kuudra"; + static KuudraPhase phase = KuudraPhase.OTHER; public static void init() { WorldRenderEvents.AFTER_TRANSLUCENT.register(KuudraWaypoints::render); ClientLifecycleEvents.CLIENT_STARTED.register(KuudraWaypoints::load); + ClientPlayConnectionEvents.JOIN.register((_handler, _sender, _client) -> reset()); + ClientReceiveMessageEvents.GAME.register(Kuudra::onMessage); Scheduler.INSTANCE.scheduleCyclic(KuudraWaypoints::tick, 20); } + + private static void onMessage(Text text, boolean overlay) { + if (Utils.isInKuudra() && !overlay) { + String message = Formatting.strip(text.getString()); + + if (message.equals("[NPC] Elle: Phew! The Ballista is finally ready! It should be strong enough to tank Kuudra's blows now!")) { + phase = KuudraPhase.DPS; + } + + if (message.equals("[NPC] Elle: POW! SURELY THAT'S IT! I don't think he has any more in him!")) { + phase = KuudraPhase.OTHER; + } + } + } + + private static void reset() { + phase = KuudraPhase.OTHER; + } + + enum KuudraPhase { + OTHER, + DPS; + } } -- cgit