From 4cf5ff1a436b1b5ce30990bb67b816a241aae603 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 25 Jan 2024 16:44:38 -0500 Subject: Kuudra Waypoints --- .../skyblocker/skyblock/crimson/kuudra/Kuudra.java | 15 +++ .../skyblock/crimson/kuudra/KuudraWaypoint.java | 15 +++ .../skyblock/crimson/kuudra/KuudraWaypoints.java | 141 +++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/Kuudra.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java (limited to 'src/main/java/de/hysky/skyblocker/skyblock') 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 new file mode 100644 index 00000000..007454f4 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/Kuudra.java @@ -0,0 +1,15 @@ +package de.hysky.skyblocker.skyblock.crimson.kuudra; + +import de.hysky.skyblocker.utils.scheduler.Scheduler; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; + +public class Kuudra { + public static final String LOCATION = "kuudra"; + + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(KuudraWaypoints::render); + ClientLifecycleEvents.CLIENT_STARTED.register(KuudraWaypoints::load); + Scheduler.INSTANCE.scheduleCyclic(KuudraWaypoints::tick, 20); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java new file mode 100644 index 00000000..bba2689b --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java @@ -0,0 +1,15 @@ +package de.hysky.skyblocker.skyblock.crimson.kuudra; + +import java.util.function.Supplier; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.waypoint.Waypoint; +import net.minecraft.util.math.BlockPos; + +class KuudraWaypoint extends Waypoint { + private static final Supplier TYPE = () -> SkyblockerConfigManager.get().locations.crimsonIsle.kuudra.waypointType; + + KuudraWaypoint(BlockPos pos, float[] colorComponents) { + super(pos, TYPE, colorComponents, false); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java new file mode 100644 index 00000000..b1e9daa1 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java @@ -0,0 +1,141 @@ +package de.hysky.skyblocker.skyblock.crimson.kuudra; + +import java.io.BufferedReader; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + +import org.slf4j.Logger; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.mojang.logging.LogUtils; +import com.mojang.serialization.Codec; +import com.mojang.serialization.JsonOps; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.PosUtils; +import de.hysky.skyblocker.utils.Utils; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.util.Identifier; + +public class KuudraWaypoints { + private static final Logger LOGGER = LogUtils.getLogger(); + private static final float[] SUPPLIES_COLOR = { 255f / 255f, 0f, 0f }; + private static final float[] FUEL_COLOR = { 250f / 255f, 217 / 255f, 2f / 255f }; + private static final float[] PEARL_COLOR = { 57f / 255f, 117f / 255f, 125f / 255f }; + private static final float[] SAFE_SPOT_COLOR = { 255f / 255f, 85f / 255f, 255f / 255f }; + private static final ObjectArrayList SAFE_SPOT_WAYPOINTS = new ObjectArrayList<>(); + private static final ObjectArrayList PEARL_WAYPOINTS = new ObjectArrayList<>(); + private static final Function>> CODEC = cc -> PosUtils.ALT_BLOCK_POS_CODEC.xmap( + pos -> new KuudraWaypoint(pos, cc), + waypoint -> waypoint.pos) + .listOf(); + + //Use non final lists and swap them out to avoid ConcurrentModificationExceptions + private static ObjectArrayList supplyWaypoints = ObjectArrayList.of(); + private static ObjectArrayList supplyPileWaypoints = ObjectArrayList.of(); + private static ObjectArrayList fuelWaypoints = ObjectArrayList.of(); + private static boolean loaded; + + static void load(MinecraftClient client) { + CompletableFuture safeSpots = loadWaypoints(client, new Identifier(SkyblockerMod.NAMESPACE, "crimson/kuudra/safe_spot_waypoints.json"), SAFE_SPOT_WAYPOINTS, SAFE_SPOT_COLOR); + CompletableFuture pearls = loadWaypoints(client, new Identifier(SkyblockerMod.NAMESPACE, "crimson/kuudra/pearl_waypoints.json"), PEARL_WAYPOINTS, PEARL_COLOR); + + CompletableFuture.allOf(safeSpots, pearls).whenComplete((_result, _throwable) -> loaded = true); + } + + private static CompletableFuture loadWaypoints(MinecraftClient client, Identifier file, ObjectArrayList list, float[] colorComponents) { + return CompletableFuture.supplyAsync(() -> { + try (BufferedReader reader = client.getResourceManager().openAsReader(file)) { + return CODEC.apply(colorComponents).parse(JsonOps.INSTANCE, getWaypoints(reader)).result().orElseThrow(); + } catch (Exception e) { + LOGGER.error("[Skyblocker Kuudra Waypoints] Failed to load kuudra waypoints from: {}", file, e); + + return List.of(); + } + }).thenAccept(list::addAll); + } + + private static JsonElement getWaypoints(BufferedReader reader) { + return JsonParser.parseReader(reader).getAsJsonObject().getAsJsonArray("waypoints"); + } + + static void tick() { + MinecraftClient client = MinecraftClient.getInstance(); + SkyblockerConfig.Kuudra config = SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; + + if (Utils.isInKuudra() && (config.supplyWaypoints || config.fuelWaypoints || config.supplyPileWaypoints)) { + List armorStands = client.world.getEntitiesByClass(ArmorStandEntity.class, client.player.getBoundingBox().expand(500d), ArmorStandEntity::hasCustomName); + ObjectArrayList supplies = new ObjectArrayList<>(); + ObjectArrayList supplyPiles = new ObjectArrayList<>(); + ObjectArrayList fuelCells = new ObjectArrayList<>(); + + for (ArmorStandEntity armorStand : armorStands) { + String name = armorStand.getName().getString(); + + if (config.supplyWaypoints && name.contains("SUPPLIES")) { + supplies.add(new KuudraWaypoint(armorStand.getBlockPos(), SUPPLIES_COLOR)); + + continue; + } + + if (config.supplyPileWaypoints && name.contains("SNEAK + PUNCH")) { + supplyPiles.add(new KuudraWaypoint(armorStand.getBlockPos(), SUPPLIES_COLOR)); + + continue; + } + + if (config.fuelWaypoints && name.contains("FUEL CELL")) { + fuelCells.add(new KuudraWaypoint(armorStand.getBlockPos(), FUEL_COLOR)); + } + } + + supplyWaypoints = supplies; + supplyPileWaypoints = supplyPiles; + fuelWaypoints = fuelCells; + } + } + + static void render(WorldRenderContext context) { + SkyblockerConfig.Kuudra config = SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; + + if (Utils.isInKuudra() && loaded) { + if (config.supplyWaypoints) { + for (KuudraWaypoint waypoint : supplyWaypoints) { + waypoint.render(context); + } + } + + if (config.supplyPileWaypoints) { + for (KuudraWaypoint waypoint : supplyPileWaypoints) { + waypoint.render(context); + } + } + + if (config.fuelWaypoints) { + for (KuudraWaypoint waypoint : fuelWaypoints) { + waypoint.render(context); + } + } + + if (config.safeSpotWaypoints) { + for (KuudraWaypoint waypoint : SAFE_SPOT_WAYPOINTS) { + waypoint.render(context); + } + } + + //TODO maybe have "dynamic" waypoints that draw a line to the actual spot + if (config.pearlWaypoints) { + for (KuudraWaypoint waypoint : PEARL_WAYPOINTS) { + waypoint.render(context); + } + } + } + } +} -- cgit 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 --- .../hysky/skyblocker/config/SkyblockerConfig.java | 6 +++ .../config/categories/CrimsonIsleCategory.java | 17 +++++++ .../skyblocker/mixin/PlayerInventoryMixin.java | 21 +++++++++ .../crimson/kuudra/ArrowPoisonWarning.java | 54 ++++++++++++++++++++++ .../skyblocker/skyblock/crimson/kuudra/Kuudra.java | 31 +++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 9 +++- src/main/resources/skyblocker.mixins.json | 1 + 7 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/hysky/skyblocker/mixin/PlayerInventoryMixin.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index aeb2efd5..7234664d 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -939,6 +939,12 @@ public class SkyblockerConfig { @SerialEntry public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; + + @SerialEntry + public boolean noArrowPoisonWarning = true; + + @SerialEntry + public int arrowPoisonThreshold = 16; } public static class Rift { diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java index 0a49d83f..bd7d4c07 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java @@ -7,6 +7,7 @@ import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.Option; import dev.isxander.yacl3.api.OptionDescription; import dev.isxander.yacl3.api.OptionGroup; +import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder; import net.minecraft.text.Text; public class CrimsonIsleCategory { @@ -62,6 +63,22 @@ public class CrimsonIsleCategory { newValue -> config.locations.crimsonIsle.kuudra.waypointType = newValue) .controller(ConfigUtils::createEnumCyclingListController) .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning.@Tooltip"))) + .binding(defaults.locations.crimsonIsle.kuudra.noArrowPoisonWarning, + () -> config.locations.crimsonIsle.kuudra.noArrowPoisonWarning, + newValue -> config.locations.crimsonIsle.kuudra.noArrowPoisonWarning = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.arrowPoisonThreshold")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.arrowPoisonThreshold.@Tooltip"))) + .binding(defaults.locations.crimsonIsle.kuudra.arrowPoisonThreshold, + () -> config.locations.crimsonIsle.kuudra.arrowPoisonThreshold, + newValue -> config.locations.crimsonIsle.kuudra.arrowPoisonThreshold = newValue) + .controller(IntegerFieldControllerBuilder::create) + .build()) .build()) .build(); } diff --git a/src/main/java/de/hysky/skyblocker/mixin/PlayerInventoryMixin.java b/src/main/java/de/hysky/skyblocker/mixin/PlayerInventoryMixin.java new file mode 100644 index 00000000..4795a28b --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/PlayerInventoryMixin.java @@ -0,0 +1,21 @@ +package de.hysky.skyblocker.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import de.hysky.skyblocker.skyblock.crimson.kuudra.ArrowPoisonWarning; +import net.minecraft.entity.player.PlayerInventory; + +@Mixin(PlayerInventory.class) +public class PlayerInventoryMixin { + @Shadow + public int selectedSlot; + + @Inject(method = "scrollInHotbar", at = @At("TAIL")) + private void skyblocker$onHotbarScroll(CallbackInfo ci) { + ArrowPoisonWarning.tryWarn(selectedSlot); + } +} 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; + } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 4abf5b25..7fb898b1 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -171,6 +171,10 @@ "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.fuelWaypoints": "Fuel Waypoints", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.safeSpotWaypoints": "Safe Spot Waypoints", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.pearlWaypoints": "Pearl Waypoints", + "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning": "No Arrow Poison Warning", + "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning.@Tooltip": "Warns you when you pull out a bow and have no Toxic Arrow Poison in your inventory. Only works during the DPS phase.", + "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.arrowPoisonThreshold": "Arrow Poison Warning Threshold", + "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.arrowPoisonThreshold.@Tooltip": "If the amount of Toxic Arrow Poison you have in your inventory is below the set threshold then you will receive a warning.", "text.autoconfig.skyblocker.option.locations.spidersDen": "Spider's Den", "text.autoconfig.skyblocker.option.locations.spidersDen.relics": "Hidden Relics Helper", "text.autoconfig.skyblocker.option.locations.spidersDen.relics.enableRelicsHelper": "Enable Hidden Relics Helper", @@ -256,7 +260,7 @@ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorText": "Enable Livid Color Text", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorText.@Tooltip": "Send the livid color in the chat during the Livid boss fight.", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle": "Enable Livid Color Title", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle.@Tooltip": "Display the livid color in the title during the Livid boss fight.", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle.@Tooltip": "Display the livid color in the title during the Livid boss fight.", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "Livid Color Text", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "Text which will be sent in the chat during the Livid boss fight. The string \"[color]\" will be replaced with the livid color.", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminal Solvers", @@ -464,6 +468,9 @@ "skyblocker.partyFinder.yourParty": "Your party", "skyblocker.partyFinder.deList": "Click to de-list", "skyblocker.partyFinder.join": "Click to join", + + "skyblocker.crimson.kuudra.noArrowPoison": "No Arrow Poison!", + "skyblocker.crimson.kuudra.lowArrowPoison": "Low on Arrow Poison!", "emi.category.skyblocker.skyblock": "Skyblock" } diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 29f7fb11..fd7364ce 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -25,6 +25,7 @@ "LeverBlockMixin", "LivingEntityRendererMixin", "MinecraftClientMixin", + "PlayerInventoryMixin", "PlayerListHudMixin", "PlayerSkinProviderMixin", "PlayerSkinTextureMixin", -- cgit From 5c9eb5f77f85b221ee5c8ebedf44dd0a48bb8292 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Jan 2024 14:55:59 -0500 Subject: Tweak waypoints Thanks to Fluboxer for the suggestions! --- .../hysky/skyblocker/config/SkyblockerConfig.java | 10 ++--- .../config/categories/CrimsonIsleCategory.java | 30 ++++++------- .../skyblock/crimson/kuudra/KuudraWaypoint.java | 15 ------- .../skyblock/crimson/kuudra/KuudraWaypoints.java | 52 ++++++++++++---------- .../hysky/skyblocker/utils/waypoint/Waypoint.java | 4 +- .../resources/assets/skyblocker/lang/en_us.json | 3 +- 6 files changed, 53 insertions(+), 61 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 7234664d..b842ec27 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -926,19 +926,19 @@ public class SkyblockerConfig { public boolean supplyWaypoints = true; @SerialEntry - public boolean supplyPileWaypoints = true; + public boolean fuelWaypoints = true; @SerialEntry - public boolean fuelWaypoints = true; + public Waypoint.Type suppliesAndFuelWaypointType = Waypoint.Type.WAYPOINT; @SerialEntry - public boolean safeSpotWaypoints = true; + public boolean ballistaBuildWaypoints = true; @SerialEntry - public boolean pearlWaypoints = true; + public boolean safeSpotWaypoints = true; @SerialEntry - public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; + public boolean pearlWaypoints = true; @SerialEntry public boolean noArrowPoisonWarning = true; diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java index bd7d4c07..3c2dc3b6 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java @@ -27,13 +27,6 @@ public class CrimsonIsleCategory { newValue -> config.locations.crimsonIsle.kuudra.supplyWaypoints = newValue) .controller(ConfigUtils::createBooleanController) .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.supplyPileWaypoints")) - .binding(defaults.locations.crimsonIsle.kuudra.supplyPileWaypoints, - () -> config.locations.crimsonIsle.kuudra.supplyPileWaypoints, - newValue -> config.locations.crimsonIsle.kuudra.supplyPileWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.fuelWaypoints")) .binding(defaults.locations.crimsonIsle.kuudra.fuelWaypoints, @@ -41,6 +34,21 @@ public class CrimsonIsleCategory { newValue -> config.locations.crimsonIsle.kuudra.fuelWaypoints = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType.@Tooltip"))) + .binding(defaults.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType, + () -> config.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType, + newValue -> config.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.ballistaBuildWaypoints")) + .binding(defaults.locations.crimsonIsle.kuudra.ballistaBuildWaypoints, + () -> config.locations.crimsonIsle.kuudra.ballistaBuildWaypoints, + newValue -> config.locations.crimsonIsle.kuudra.ballistaBuildWaypoints = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.safeSpotWaypoints")) .binding(defaults.locations.crimsonIsle.kuudra.safeSpotWaypoints, @@ -55,14 +63,6 @@ public class CrimsonIsleCategory { newValue -> config.locations.crimsonIsle.kuudra.pearlWaypoints = newValue) .controller(ConfigUtils::createBooleanController) .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType.@Tooltip"))) - .binding(defaults.locations.crimsonIsle.kuudra.waypointType, - () -> config.locations.crimsonIsle.kuudra.waypointType, - newValue -> config.locations.crimsonIsle.kuudra.waypointType = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning.@Tooltip"))) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java deleted file mode 100644 index bba2689b..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoint.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.hysky.skyblocker.skyblock.crimson.kuudra; - -import java.util.function.Supplier; - -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.waypoint.Waypoint; -import net.minecraft.util.math.BlockPos; - -class KuudraWaypoint extends Waypoint { - private static final Supplier TYPE = () -> SkyblockerConfigManager.get().locations.crimsonIsle.kuudra.waypointType; - - KuudraWaypoint(BlockPos pos, float[] colorComponents) { - super(pos, TYPE, colorComponents, false); - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java index b1e9daa1..407ecca8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java @@ -4,6 +4,7 @@ import java.io.BufferedReader; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.function.Function; +import java.util.function.Supplier; import org.slf4j.Logger; @@ -18,6 +19,8 @@ import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.PosUtils; import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.waypoint.Waypoint; +import de.hysky.skyblocker.utils.waypoint.Waypoint.Type; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; @@ -30,17 +33,18 @@ public class KuudraWaypoints { private static final float[] FUEL_COLOR = { 250f / 255f, 217 / 255f, 2f / 255f }; private static final float[] PEARL_COLOR = { 57f / 255f, 117f / 255f, 125f / 255f }; private static final float[] SAFE_SPOT_COLOR = { 255f / 255f, 85f / 255f, 255f / 255f }; - private static final ObjectArrayList SAFE_SPOT_WAYPOINTS = new ObjectArrayList<>(); - private static final ObjectArrayList PEARL_WAYPOINTS = new ObjectArrayList<>(); - private static final Function>> CODEC = cc -> PosUtils.ALT_BLOCK_POS_CODEC.xmap( - pos -> new KuudraWaypoint(pos, cc), + private static final Supplier SUPPLIES_AND_FUEL_TYPE = () -> SkyblockerConfigManager.get().locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType; + private static final ObjectArrayList SAFE_SPOT_WAYPOINTS = new ObjectArrayList<>(); + private static final ObjectArrayList PEARL_WAYPOINTS = new ObjectArrayList<>(); + private static final Function>> CODEC = cc -> PosUtils.ALT_BLOCK_POS_CODEC.xmap( + pos -> new Waypoint(pos, Waypoint.Type.HIGHLIGHT, cc), waypoint -> waypoint.pos) .listOf(); //Use non final lists and swap them out to avoid ConcurrentModificationExceptions - private static ObjectArrayList supplyWaypoints = ObjectArrayList.of(); - private static ObjectArrayList supplyPileWaypoints = ObjectArrayList.of(); - private static ObjectArrayList fuelWaypoints = ObjectArrayList.of(); + private static ObjectArrayList supplyWaypoints = ObjectArrayList.of(); + private static ObjectArrayList ballistaBuildWaypoints = ObjectArrayList.of(); + private static ObjectArrayList fuelWaypoints = ObjectArrayList.of(); private static boolean loaded; static void load(MinecraftClient client) { @@ -50,14 +54,14 @@ public class KuudraWaypoints { CompletableFuture.allOf(safeSpots, pearls).whenComplete((_result, _throwable) -> loaded = true); } - private static CompletableFuture loadWaypoints(MinecraftClient client, Identifier file, ObjectArrayList list, float[] colorComponents) { + private static CompletableFuture loadWaypoints(MinecraftClient client, Identifier file, ObjectArrayList list, float[] colorComponents) { return CompletableFuture.supplyAsync(() -> { try (BufferedReader reader = client.getResourceManager().openAsReader(file)) { return CODEC.apply(colorComponents).parse(JsonOps.INSTANCE, getWaypoints(reader)).result().orElseThrow(); } catch (Exception e) { LOGGER.error("[Skyblocker Kuudra Waypoints] Failed to load kuudra waypoints from: {}", file, e); - return List.of(); + return List.of(); } }).thenAccept(list::addAll); } @@ -70,34 +74,34 @@ public class KuudraWaypoints { MinecraftClient client = MinecraftClient.getInstance(); SkyblockerConfig.Kuudra config = SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; - if (Utils.isInKuudra() && (config.supplyWaypoints || config.fuelWaypoints || config.supplyPileWaypoints)) { + if (Utils.isInKuudra() && (config.supplyWaypoints || config.fuelWaypoints || config.ballistaBuildWaypoints)) { List armorStands = client.world.getEntitiesByClass(ArmorStandEntity.class, client.player.getBoundingBox().expand(500d), ArmorStandEntity::hasCustomName); - ObjectArrayList supplies = new ObjectArrayList<>(); - ObjectArrayList supplyPiles = new ObjectArrayList<>(); - ObjectArrayList fuelCells = new ObjectArrayList<>(); + ObjectArrayList supplies = new ObjectArrayList<>(); + ObjectArrayList ballistaBuildSpots = new ObjectArrayList<>(); + ObjectArrayList fuelCells = new ObjectArrayList<>(); for (ArmorStandEntity armorStand : armorStands) { String name = armorStand.getName().getString(); if (config.supplyWaypoints && name.contains("SUPPLIES")) { - supplies.add(new KuudraWaypoint(armorStand.getBlockPos(), SUPPLIES_COLOR)); + supplies.add(new Waypoint(armorStand.getBlockPos(), SUPPLIES_AND_FUEL_TYPE, SUPPLIES_COLOR)); continue; } - if (config.supplyPileWaypoints && name.contains("SNEAK + PUNCH")) { - supplyPiles.add(new KuudraWaypoint(armorStand.getBlockPos(), SUPPLIES_COLOR)); + if (config.ballistaBuildWaypoints && name.contains("SNEAK + PUNCH")) { + ballistaBuildSpots.add(new Waypoint(armorStand.getBlockPos(), Waypoint.Type.WAYPOINT, SUPPLIES_COLOR)); continue; } if (config.fuelWaypoints && name.contains("FUEL CELL")) { - fuelCells.add(new KuudraWaypoint(armorStand.getBlockPos(), FUEL_COLOR)); + fuelCells.add(new Waypoint(armorStand.getBlockPos(), SUPPLIES_AND_FUEL_TYPE, FUEL_COLOR)); } } supplyWaypoints = supplies; - supplyPileWaypoints = supplyPiles; + ballistaBuildWaypoints = ballistaBuildSpots; fuelWaypoints = fuelCells; } } @@ -107,32 +111,32 @@ public class KuudraWaypoints { if (Utils.isInKuudra() && loaded) { if (config.supplyWaypoints) { - for (KuudraWaypoint waypoint : supplyWaypoints) { + for (Waypoint waypoint : supplyWaypoints) { waypoint.render(context); } } - if (config.supplyPileWaypoints) { - for (KuudraWaypoint waypoint : supplyPileWaypoints) { + if (config.ballistaBuildWaypoints) { + for (Waypoint waypoint : ballistaBuildWaypoints) { waypoint.render(context); } } if (config.fuelWaypoints) { - for (KuudraWaypoint waypoint : fuelWaypoints) { + for (Waypoint waypoint : fuelWaypoints) { waypoint.render(context); } } if (config.safeSpotWaypoints) { - for (KuudraWaypoint waypoint : SAFE_SPOT_WAYPOINTS) { + for (Waypoint waypoint : SAFE_SPOT_WAYPOINTS) { waypoint.render(context); } } //TODO maybe have "dynamic" waypoints that draw a line to the actual spot if (config.pearlWaypoints) { - for (KuudraWaypoint waypoint : PEARL_WAYPOINTS) { + for (Waypoint waypoint : PEARL_WAYPOINTS) { waypoint.render(context); } } diff --git a/src/main/java/de/hysky/skyblocker/utils/waypoint/Waypoint.java b/src/main/java/de/hysky/skyblocker/utils/waypoint/Waypoint.java index 2f9c9f63..7f3d4eda 100644 --- a/src/main/java/de/hysky/skyblocker/utils/waypoint/Waypoint.java +++ b/src/main/java/de/hysky/skyblocker/utils/waypoint/Waypoint.java @@ -1,13 +1,14 @@ package de.hysky.skyblocker.utils.waypoint; import de.hysky.skyblocker.utils.render.RenderHelper; +import de.hysky.skyblocker.utils.render.Renderable; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import java.util.function.Supplier; -public class Waypoint { +public class Waypoint implements Renderable { protected static final float DEFAULT_HIGHLIGHT_ALPHA = 0.5f; protected static final float DEFAULT_LINE_WIDTH = 5f; public final BlockPos pos; @@ -74,6 +75,7 @@ public class Waypoint { return colorComponents; } + @Override public void render(WorldRenderContext context) { switch (typeSupplier.get()) { case WAYPOINT -> RenderHelper.renderFilledWithBeaconBeam(context, pos, getColorComponents(), alpha, throughWalls); diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 7fb898b1..7a1bc8e2 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -167,8 +167,9 @@ "text.autoconfig.skyblocker.category.crimsonIsle": "Crimson Isle", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra": "Kuudra", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.supplyWaypoints": "Supply Waypoints", - "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.supplyPileWaypoints": "Supply Pile Waypoints", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.fuelWaypoints": "Fuel Waypoints", + "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType": "Supplies/Fuel Waypoint Type", + "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.ballistaBuildWaypoints": "Ballista Build Spot Waypoints", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.safeSpotWaypoints": "Safe Spot Waypoints", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.pearlWaypoints": "Pearl Waypoints", "text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning": "No Arrow Poison Warning", -- cgit From b3cbb424ac9e93c7750710587a274f00b835b035 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Jan 2024 16:08:22 -0500 Subject: Use correct constructor --- .../de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java index 407ecca8..4982d71b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java @@ -37,7 +37,7 @@ public class KuudraWaypoints { private static final ObjectArrayList SAFE_SPOT_WAYPOINTS = new ObjectArrayList<>(); private static final ObjectArrayList PEARL_WAYPOINTS = new ObjectArrayList<>(); private static final Function>> CODEC = cc -> PosUtils.ALT_BLOCK_POS_CODEC.xmap( - pos -> new Waypoint(pos, Waypoint.Type.HIGHLIGHT, cc), + pos -> new Waypoint(pos, () -> Waypoint.Type.HIGHLIGHT, cc, false), waypoint -> waypoint.pos) .listOf(); -- cgit From 16e94a9643cf3f75f8a0804d3c0ea85cbb6534f4 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Jan 2024 20:50:52 -0500 Subject: Improve Supplies & Fuel Waypoint accuracy --- .../skyblocker/skyblock/crimson/kuudra/Kuudra.java | 5 +++ .../skyblock/crimson/kuudra/KuudraWaypoints.java | 48 ++++++++++++++-------- 2 files changed, 37 insertions(+), 16 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') 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 48ad8d7e..033a919d 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 @@ -25,6 +25,10 @@ public class Kuudra { if (Utils.isInKuudra() && !overlay) { String message = Formatting.strip(text.getString()); + if (message.equals("[NPC] Elle: ARGH! All of the supplies fell into the lava! You need to retrieve them quickly!")) { + phase = KuudraPhase.RETRIEVE_SUPPLIES; + } + 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; } @@ -41,6 +45,7 @@ public class Kuudra { enum KuudraPhase { OTHER, + RETRIEVE_SUPPLIES, DPS; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java index 4982d71b..790d434a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java @@ -25,12 +25,15 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.entity.mob.GiantEntity; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.MathHelper; public class KuudraWaypoints { private static final Logger LOGGER = LogUtils.getLogger(); private static final float[] SUPPLIES_COLOR = { 255f / 255f, 0f, 0f }; - private static final float[] FUEL_COLOR = { 250f / 255f, 217 / 255f, 2f / 255f }; private static final float[] PEARL_COLOR = { 57f / 255f, 117f / 255f, 125f / 255f }; private static final float[] SAFE_SPOT_COLOR = { 255f / 255f, 85f / 255f, 255f / 255f }; private static final Supplier SUPPLIES_AND_FUEL_TYPE = () -> SkyblockerConfigManager.get().locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType; @@ -75,28 +78,41 @@ public class KuudraWaypoints { SkyblockerConfig.Kuudra config = SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; if (Utils.isInKuudra() && (config.supplyWaypoints || config.fuelWaypoints || config.ballistaBuildWaypoints)) { - List armorStands = client.world.getEntitiesByClass(ArmorStandEntity.class, client.player.getBoundingBox().expand(500d), ArmorStandEntity::hasCustomName); + Box searchBox = client.player.getBoundingBox().expand(500d); ObjectArrayList supplies = new ObjectArrayList<>(); - ObjectArrayList ballistaBuildSpots = new ObjectArrayList<>(); ObjectArrayList fuelCells = new ObjectArrayList<>(); - for (ArmorStandEntity armorStand : armorStands) { - String name = armorStand.getName().getString(); + if (config.supplyWaypoints || config.fuelWaypoints) { + List giants = client.world.getEntitiesByClass(GiantEntity.class, searchBox, giant -> giant.getY() < 67); - if (config.supplyWaypoints && name.contains("SUPPLIES")) { - supplies.add(new Waypoint(armorStand.getBlockPos(), SUPPLIES_AND_FUEL_TYPE, SUPPLIES_COLOR)); - - continue; - } + for (GiantEntity giant : giants) { + double yawOffset = giant.getYaw() + 115; + + double x = giant.getX() + 4.5 * Math.cos((yawOffset) * MathHelper.RADIANS_PER_DEGREE); + double y = 75; + double z = giant.getZ() + 4.5 * Math.sin((yawOffset) * MathHelper.RADIANS_PER_DEGREE); - if (config.ballistaBuildWaypoints && name.contains("SNEAK + PUNCH")) { - ballistaBuildSpots.add(new Waypoint(armorStand.getBlockPos(), Waypoint.Type.WAYPOINT, SUPPLIES_COLOR)); + Waypoint waypoint = new Waypoint(BlockPos.ofFloored(x, y, z), SUPPLIES_AND_FUEL_TYPE, SUPPLIES_COLOR, false); - continue; + switch (Kuudra.phase) { + case RETRIEVE_SUPPLIES -> supplies.add(waypoint); + case DPS -> fuelCells.add(waypoint); + default -> supplies.add(waypoint); + } } + } + + ObjectArrayList ballistaBuildSpots = new ObjectArrayList<>(); + + if (config.ballistaBuildWaypoints) { + List armorStands = client.world.getEntitiesByClass(ArmorStandEntity.class, searchBox, ArmorStandEntity::hasCustomName); - if (config.fuelWaypoints && name.contains("FUEL CELL")) { - fuelCells.add(new Waypoint(armorStand.getBlockPos(), SUPPLIES_AND_FUEL_TYPE, FUEL_COLOR)); + for (ArmorStandEntity armorStand : armorStands) { + String name = armorStand.getName().getString(); + + if (config.ballistaBuildWaypoints && name.contains("SNEAK + PUNCH")) { + ballistaBuildSpots.add(new Waypoint(armorStand.getBlockPos(), () -> Waypoint.Type.WAYPOINT, SUPPLIES_COLOR, false)); + } } } @@ -121,7 +137,7 @@ public class KuudraWaypoints { waypoint.render(context); } } - + if (config.fuelWaypoints) { for (Waypoint waypoint : fuelWaypoints) { waypoint.render(context); -- cgit