From c6d54983cf944207cb3a7be38a448bca1f1d09a9 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 10 Oct 2023 22:14:44 +0200 Subject: It did, infact, not work. Now it should --- .../skyblocker/skyblock/dungeon/CreeperBeams.java | 51 +++++++++++----------- 1 file changed, 26 insertions(+), 25 deletions(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java index 7c668948..b495bd3e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java @@ -11,6 +11,7 @@ import it.unimi.dsi.fastutil.objects.ObjectDoublePair; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.scheduler.Scheduler; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.block.Block; @@ -46,50 +47,49 @@ public class CreeperBeams { public static void init() { Scheduler.INSTANCE.scheduleCyclic(CreeperBeams::update, 20); WorldRenderEvents.BEFORE_DEBUG_RENDER.register(CreeperBeams::render); + ClientPlayConnectionEvents.JOIN.register(((handler, sender, client) -> reset())); + } + + private static void reset() { + beams.clear(); + base = null; + solved = false; } private static void update() { + // don't do anything if the room is solved + if (solved) { + return; + } + MinecraftClient client = MinecraftClient.getInstance(); ClientWorld world = client.world; ClientPlayerEntity player = client.player; // clear state if not in dungeon - if (world == null || player == null || !Utils.isInDungeons()) { - beams.clear(); - base = null; - solved = false; + if (world == null || player == null || !Utils.isInDungeons()) { return; } - // don't do anything if the room is solved - if (solved) { - return; - } - - // try to find base if not found + // try to find base if not found and solve if (base == null) { base = findCreeperBase(player, world); if (base == null) { return; } - } - - // try to solve if we haven't already - if (beams.size() == 0) { - Vec3d creeperPos = new Vec3d(base.getX() + 0.5, BASE_Y + 3.5, base.getZ() + 0.5); ArrayList targets = findTargets(player, world, base); beams = findLines(player, world, creeperPos, targets); } + // update the beam states + beams.forEach(b -> b.updateState(world)); + // check if the room is solved - if (world.getBlockState(base).getBlock() != Blocks.SEA_LANTERN) { + if (!isTarget(world, base)) { solved = true; } - - // update the beam states - beams.forEach(b -> b.updateState(world)); } // find the sea lantern block beneath the creeper @@ -110,8 +110,7 @@ public class CreeperBeams { for (CreeperEntity ce : creepers) { Vec3d creeperPos = ce.getPos(); BlockPos potentialBase = BlockPos.ofFloored(creeperPos.x, BASE_Y, creeperPos.z); - Block block = world.getBlockState(potentialBase).getBlock(); - if (block == Blocks.SEA_LANTERN || block == Blocks.PRISMARINE) { + if (isTarget(world, potentialBase)) { return potentialBase; } } @@ -128,8 +127,7 @@ public class CreeperBeams { BlockPos end = new BlockPos(basePos.getX() + 16, FLOOR_Y, basePos.getZ() + 16); for (BlockPos bp : BlockPos.iterate(start, end)) { - Block b = world.getBlockState(bp).getBlock(); - if (b == Blocks.SEA_LANTERN || b == Blocks.PRISMARINE) { + if (isTarget(world, bp)) { targets.add(new BlockPos(bp)); } } @@ -190,6 +188,11 @@ public class CreeperBeams { } } + private static boolean isTarget(ClientWorld world, BlockPos pos) { + Block block = world.getBlockState(pos).getBlock(); + return block == Blocks.SEA_LANTERN || block == Blocks.PRISMARINE; + } + // helper class to hold all the things needed to render a beam private static class Beam { @@ -242,7 +245,5 @@ public class CreeperBeams { RenderHelper.renderLinesFromPoints(wrc, line, new float[] { 0.33f, 1f, 0.33f }, 0.75f, 1); } } - } - } -- cgit From 05aedd82de412e8373d1f241e9dad927924a6780 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 14 Oct 2023 11:19:32 +0200 Subject: Add config option to turn the thing on/off --- src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java | 3 +++ .../hysky/skyblocker/config/categories/DungeonsCategory.java | 10 +++++++++- .../de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java | 5 +++-- 3 files changed, 15 insertions(+), 3 deletions(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index cb51afdc..430fb5f0 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -527,6 +527,9 @@ public class SkyblockerConfig { @SerialEntry public boolean blazesolver = true; + + @SerialEntry + public boolean creepersolver = true; @SerialEntry public boolean solveTrivia = true; diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index ffd979eb..eb39e498 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -247,6 +247,14 @@ public class DungeonsCategory { newValue -> config.locations.dungeons.blazesolver = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creepersolver")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creepersolver.@Tooltip"))) + .binding(defaults.locations.dungeons.creepersolver, + () -> config.locations.dungeons.creepersolver, + newValue -> config.locations.dungeons.creepersolver = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia")) .binding(defaults.locations.dungeons.solveTrivia, @@ -262,7 +270,7 @@ public class DungeonsCategory { newValue -> config.locations.dungeons.solveTicTacToe = newValue) .controller(ConfigUtils::createBooleanController) .build()) - + //Livid Color .group(OptionGroup.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor")) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java index b495bd3e..1cad2980 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java @@ -8,6 +8,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import it.unimi.dsi.fastutil.objects.ObjectDoublePair; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.scheduler.Scheduler; @@ -177,8 +178,8 @@ public class CreeperBeams { private static void render(WorldRenderContext wrc) { - // don't render if solved - if (solved) { + // don't render if solved or disabled + if (solved || !SkyblockerConfigManager.get().locations.dungeons.creepersolver) { return; } -- cgit From 8385880ebc152a946f62a42d788e298f2b179794 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:05:14 -0400 Subject: Refactor CreeperBeams --- .../hysky/skyblocker/config/SkyblockerConfig.java | 4 +- .../config/categories/DungeonsCategory.java | 20 ++++---- .../skyblocker/skyblock/dungeon/CreeperBeams.java | 53 +++++++++++----------- .../skyblocker/skyblock/dungeon/DungeonBlaze.java | 2 +- 4 files changed, 40 insertions(+), 39 deletions(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 430fb5f0..b673a9db 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -526,10 +526,10 @@ public class SkyblockerConfig { public boolean solveThreeWeirdos = true; @SerialEntry - public boolean blazesolver = true; + public boolean blazeSolver = true; @SerialEntry - public boolean creepersolver = true; + public boolean creeperSolver = true; @SerialEntry public boolean solveTrivia = true; diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index eb39e498..066d8b8c 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -240,19 +240,19 @@ public class DungeonsCategory { .controller(ConfigUtils::createBooleanController) .build()) .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.blazesolver")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.blazesolver.@Tooltip"))) - .binding(defaults.locations.dungeons.blazesolver, - () -> config.locations.dungeons.blazesolver, - newValue -> config.locations.dungeons.blazesolver = newValue) + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.blazeSolver")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.blazeSolver.@Tooltip"))) + .binding(defaults.locations.dungeons.blazeSolver, + () -> config.locations.dungeons.blazeSolver, + newValue -> config.locations.dungeons.blazeSolver = newValue) .controller(ConfigUtils::createBooleanController) .build()) .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creepersolver")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creepersolver.@Tooltip"))) - .binding(defaults.locations.dungeons.creepersolver, - () -> config.locations.dungeons.creepersolver, - newValue -> config.locations.dungeons.creepersolver = newValue) + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creeperSolver")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creeperSolver.@Tooltip"))) + .binding(defaults.locations.dungeons.creeperSolver, + () -> config.locations.dungeons.creeperSolver, + newValue -> config.locations.dungeons.creeperSolver = newValue) .controller(ConfigUtils::createBooleanController) .build()) .option(Option.createBuilder() diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java index 1cad2980..5356658e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CreeperBeams.java @@ -1,17 +1,10 @@ package de.hysky.skyblocker.skyblock.dungeon; -import java.util.ArrayList; -import java.util.List; - -import org.joml.Intersectiond; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import it.unimi.dsi.fastutil.objects.ObjectDoublePair; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.scheduler.Scheduler; +import it.unimi.dsi.fastutil.objects.ObjectDoublePair; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; @@ -22,9 +15,17 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.mob.CreeperEntity; import net.minecraft.predicate.entity.EntityPredicates; +import net.minecraft.util.DyeColor; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; +import org.joml.Intersectiond; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; public class CreeperBeams { @@ -32,11 +33,12 @@ public class CreeperBeams { // "missing, this palette looks like you stole it from a 2018 bootstrap webapp!" private static final float[][] COLORS = { - { 0.33f, 1f, 1f }, - { 1f, 0.33f, 0.33f }, - { 1f, 0.66f, 0f }, - { 1f, 0.33f, 1f }, + DyeColor.LIGHT_BLUE.getColorComponents(), + DyeColor.PINK.getColorComponents(), + DyeColor.ORANGE.getColorComponents(), + DyeColor.MAGENTA.getColorComponents(), }; + private static final float[] LIME_COLOR_COMPONENTS = DyeColor.LIME.getColorComponents(); private static final int FLOOR_Y = 68; private static final int BASE_Y = 74; @@ -80,8 +82,8 @@ public class CreeperBeams { return; } Vec3d creeperPos = new Vec3d(base.getX() + 0.5, BASE_Y + 3.5, base.getZ() + 0.5); - ArrayList targets = findTargets(player, world, base); - beams = findLines(player, world, creeperPos, targets); + ArrayList targets = findTargets(world, base); + beams = findLines(creeperPos, targets); } // update the beam states @@ -102,7 +104,7 @@ public class CreeperBeams { player.getBoundingBox().expand(50D), EntityPredicates.VALID_ENTITY); - if (creepers.size() == 0) { + if (creepers.isEmpty()) { return null; } @@ -121,23 +123,22 @@ public class CreeperBeams { } // find the sea lanterns (and the ONE prismarine ty hypixel) in the room - private static ArrayList findTargets(ClientPlayerEntity player, ClientWorld world, BlockPos basePos) { + private static ArrayList findTargets(ClientWorld world, BlockPos basePos) { ArrayList targets = new ArrayList<>(); BlockPos start = new BlockPos(basePos.getX() - 15, BASE_Y + 12, basePos.getZ() - 15); BlockPos end = new BlockPos(basePos.getX() + 16, FLOOR_Y, basePos.getZ() + 16); - for (BlockPos bp : BlockPos.iterate(start, end)) { - if (isTarget(world, bp)) { - targets.add(new BlockPos(bp)); + for (BlockPos pos : BlockPos.iterate(start, end)) { + if (isTarget(world, pos)) { + targets.add(new BlockPos(pos)); } } return targets; } // generate lines between targets and finally find the solution - private static ArrayList findLines(ClientPlayerEntity player, ClientWorld world, Vec3d creeperPos, - ArrayList targets) { + private static ArrayList findLines(Vec3d creeperPos, ArrayList targets) { ArrayList> allLines = new ArrayList<>(); @@ -157,7 +158,7 @@ public class CreeperBeams { // this feels a bit heavy-handed, but it works for now. ArrayList result = new ArrayList<>(); - allLines.sort((a, b) -> Double.compare(a.rightDouble(), b.rightDouble())); + allLines.sort(Comparator.comparingDouble(ObjectDoublePair::rightDouble)); while (result.size() < 4 && !allLines.isEmpty()) { Beam solution = allLines.get(0).left(); @@ -179,7 +180,7 @@ public class CreeperBeams { private static void render(WorldRenderContext wrc) { // don't render if solved or disabled - if (solved || !SkyblockerConfigManager.get().locations.dungeons.creepersolver) { + if (solved || !SkyblockerConfigManager.get().locations.dungeons.creeperSolver) { return; } @@ -241,9 +242,9 @@ public class CreeperBeams { RenderHelper.renderOutline(wrc, outlineTwo, color, 3); RenderHelper.renderLinesFromPoints(wrc, line, color, 1, 2); } else { - RenderHelper.renderOutline(wrc, outlineOne, new float[] { 0.33f, 1f, 0.33f }, 1); - RenderHelper.renderOutline(wrc, outlineTwo, new float[] { 0.33f, 1f, 0.33f }, 1); - RenderHelper.renderLinesFromPoints(wrc, line, new float[] { 0.33f, 1f, 0.33f }, 0.75f, 1); + RenderHelper.renderOutline(wrc, outlineOne, LIME_COLOR_COMPONENTS, 1); + RenderHelper.renderOutline(wrc, outlineTwo, LIME_COLOR_COMPONENTS, 1); + RenderHelper.renderLinesFromPoints(wrc, line, LIME_COLOR_COMPONENTS, 0.75f, 1); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonBlaze.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonBlaze.java index 044949db..cfb16b4d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonBlaze.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonBlaze.java @@ -106,7 +106,7 @@ public class DungeonBlaze { */ public static void blazeRenderer(WorldRenderContext wrc) { try { - if (highestBlaze != null && lowestBlaze != null && highestBlaze.isAlive() && lowestBlaze.isAlive() && SkyblockerConfigManager.get().locations.dungeons.blazesolver) { + if (highestBlaze != null && lowestBlaze != null && highestBlaze.isAlive() && lowestBlaze.isAlive() && SkyblockerConfigManager.get().locations.dungeons.blazeSolver) { if (highestBlaze.getY() < 69) { renderBlazeOutline(highestBlaze, nextHighestBlaze, wrc); } -- cgit From 87f8ee2c0be3d87f800fa09064ea80de61812970 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 14 Oct 2023 18:46:43 -0400 Subject: Fix indents --- .../hysky/skyblocker/config/SkyblockerConfig.java | 26 +++++++++++----------- .../config/categories/DungeonsCategory.java | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index b673a9db..189c6af7 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -47,8 +47,8 @@ public class SkyblockerConfig { /* REGEX Explanation * "Pets" : simple match on letters - * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" - */ + * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" + */ @SerialEntry public QuickNavItem button3 = new QuickNavItem(true, new ItemData("bone"), "Pets(:? \\(\\d+\\/\\d+\\))?", "/pets"); @@ -332,16 +332,16 @@ public class SkyblockerConfig { public boolean enableCommandArgShortcuts = true; } - public static class QuiverWarning { - @SerialEntry - public boolean enableQuiverWarning = true; - - @SerialEntry - public boolean enableQuiverWarningInDungeons = true; - - @SerialEntry - public boolean enableQuiverWarningAfterDungeon = true; - } + public static class QuiverWarning { + @SerialEntry + public boolean enableQuiverWarning = true; + + @SerialEntry + public boolean enableQuiverWarningInDungeons = true; + + @SerialEntry + public boolean enableQuiverWarningAfterDungeon = true; + } public static class Hitbox { @SerialEntry @@ -528,7 +528,7 @@ public class SkyblockerConfig { @SerialEntry public boolean blazeSolver = true; - @SerialEntry + @SerialEntry public boolean creeperSolver = true; @SerialEntry diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index 066d8b8c..a9c0c26b 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -247,7 +247,7 @@ public class DungeonsCategory { newValue -> config.locations.dungeons.blazeSolver = newValue) .controller(ConfigUtils::createBooleanController) .build()) - .option(Option.createBuilder() + .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creeperSolver")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creeperSolver.@Tooltip"))) .binding(defaults.locations.dungeons.creeperSolver, -- cgit