aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-01-26 13:37:37 -0500
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-01-26 13:37:37 -0500
commit1ea5f54ab6d7edf7a7c5971db05e22667d3a9c93 (patch)
tree285127b11b36969e94420de601b60e04fc3baeff /src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra
parent4cf5ff1a436b1b5ce30990bb67b816a241aae603 (diff)
downloadSkyblocker-1ea5f54ab6d7edf7a7c5971db05e22667d3a9c93.tar.gz
Skyblocker-1ea5f54ab6d7edf7a7c5971db05e22667d3a9c93.tar.bz2
Skyblocker-1ea5f54ab6d7edf7a7c5971db05e22667d3a9c93.zip
Arrow Poison Warnings
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/Kuudra.java31
2 files changed, 85 insertions, 0 deletions
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<SkyblockerConfig.Kuudra> 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;
+ }
}