diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni')
5 files changed, 115 insertions, 67 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index fcb285960..12b607792 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -315,7 +315,7 @@ class SkyHanniMod { loadModule(DungeonLividFinder) loadModule(CruxTalismanDisplay) loadModule(DanceRoomHelper) - loadModule(LaserParkour()) + loadModule(TubulatorParkour()) loadModule(CustomTextBox()) loadModule(RiftUpsideDownParkour()) loadModule(RiftLavaMazeParkour()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/RiftConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/RiftConfig.java index 9e3107208..9464cd420 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/RiftConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/RiftConfig.java @@ -271,11 +271,42 @@ public class RiftConfig { } + @ConfigOption(name = "Tubulator", desc = "") + @Accordion @Expose - @ConfigOption(name = "Tubulator", desc = "Highlights the location of the invisible blocks (Laser Parkour).") - @ConfigEditorBoolean - public boolean laserParkour = true; + public TubulatorConfig tubulatorConfig = new TubulatorConfig(); + public static class TubulatorConfig { + + @Expose + @ConfigOption(name = "Enabled", desc = "Highlights the location of the invisible Tubulator blocks (Laser Parkour).") + @ConfigEditorBoolean + public boolean enabled = true; + + @Expose + @ConfigOption(name = "Look Ahead", desc = "Change how many platforms should be shown in front of you.") + @ConfigEditorSlider(minStep = 1, maxValue = 30, minValue = 1) + public Property<Integer> lookAhead = Property.of(2); + + @Expose + @ConfigOption(name = "Outline", desc = "Outlines the top edge of the platforms.") + @ConfigEditorBoolean + public boolean outline = true; + @Expose + @ConfigOption(name = "Rainbow Color", desc = "Show the rainbow color effect instead of a boring monochrome.") + @ConfigEditorBoolean + public Property<Boolean> rainbowColor = Property.of(true); + + @Expose + @ConfigOption(name = "Monochrome Color", desc = "Set a boring monochrome color for the parkour platforms.") + @ConfigEditorColour + public Property<String> monochromeColor = Property.of("0:60:0:0:255"); + + @Expose + @ConfigOption(name = "Hide others players", desc = "Hide other players while doing the lava maze.") + @ConfigEditorBoolean + public boolean hidePlayers = false; + } } @ConfigOption(name = "Kloon Hacking", desc = "") diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/LaserParkour.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/LaserParkour.kt deleted file mode 100644 index ff19e52fd..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/LaserParkour.kt +++ /dev/null @@ -1,55 +0,0 @@ -package at.hannibal2.skyhanni.features.rift - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled -import at.hannibal2.skyhanni.utils.LocationUtils.isPlayerInside -import at.hannibal2.skyhanni.utils.LorenzColor -import at.hannibal2.skyhanni.utils.LorenzVec -import net.minecraft.util.AxisAlignedBB -import net.minecraftforge.client.event.RenderWorldLastEvent -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -class LaserParkour { - private val config get() = SkyHanniMod.feature.rift.mirrorVerse - private val puzzleRoom = AxisAlignedBB(-298.0, 0.0, -112.0, -309.0, 63.0, -101.0) - - @SubscribeEvent - fun onRenderWorld(event: RenderWorldLastEvent) { - if (!RiftAPI.inRift()) return - if (!config.laserParkour) return - if (!puzzleRoom.isPlayerInside()) return - for (location in locations) { - event.drawWaypointFilled(location, LorenzColor.GREEN.toColor()) - } - } - - private var locations = mutableListOf( - LorenzVec(-304.0, 2.0, -107.0), - LorenzVec(-306.0, 4.0, -103.0), - LorenzVec(-308.0, 6.0, -105.0), - LorenzVec(-304.0, 8.0, -109.0), - LorenzVec(-300.0, 10.0, -111.0), - LorenzVec(-304.0, 12.0, -107.0), - LorenzVec(-308.0, 14.0, -103.0), - LorenzVec(-306.0, 16.0, -107.0), - LorenzVec(-302.0, 18.0, -111.0), - LorenzVec(-300.0, 20.0, -107.0), - LorenzVec(-304.0, 22.0, -111.0), - LorenzVec(-306.0, 24.0, -109.0), - LorenzVec(-302.0, 26.0, -111.0), - LorenzVec(-300.0, 28.0, -107.0), - LorenzVec(-304.0, 30.0, -103.0), - LorenzVec(-306.0, 32.0, -105.0), - LorenzVec(-302.0, 34.0, -107.0), - LorenzVec(-300.0, 36.0, -109.0), - LorenzVec(-302.0, 38.0, -105.0), - LorenzVec(-304.0, 40.0, -107.0), - LorenzVec(-306.0, 42.0, -111.0), - LorenzVec(-302.0, 44.0, -107.0), - LorenzVec(-300.0, 46.0, -103.0), - LorenzVec(-304.0, 48.0, -107.0), - LorenzVec(-308.0, 50.0, -105.0), - LorenzVec(-304.0, 52.0, -109.0), - LorenzVec(-306.0, 54.0, -111.0) - ) -}
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/TubulatorParkour.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/TubulatorParkour.kt new file mode 100644 index 000000000..5b476962b --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/TubulatorParkour.kt @@ -0,0 +1,70 @@ +package at.hannibal2.skyhanni.features.rift + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.CheckRenderEntityEvent +import at.hannibal2.skyhanni.events.ConfigLoadEvent +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.utils.LocationUtils.isPlayerInside +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.toChromaColor +import at.hannibal2.skyhanni.utils.ParkourHelper +import at.hannibal2.skyhanni.utils.jsonobjects.ParkourJson +import net.minecraft.util.AxisAlignedBB +import net.minecraftforge.client.event.RenderWorldLastEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class TubulatorParkour { + private val config get() = SkyHanniMod.feature.rift.mirrorVerse.tubulatorConfig + private var parkourHelper: ParkourHelper? = null + private val puzzleRoom = AxisAlignedBB(-298.0, 0.0, -112.0, -309.0, 63.0, -101.0) + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + val data = event.getConstant<ParkourJson>("RiftTubulator") ?: return + parkourHelper = ParkourHelper( + data.locations, + data.shortCuts, + platformSize = 1.0, + detectionRange = 2.0, + ) + updateConfig() + } + + @SubscribeEvent + fun onCheckRender(event: CheckRenderEntityEvent<*>) { + if (!isEnabled()) return + if (!config.hidePlayers) return + + parkourHelper?.let { + if (it.inParkour()) { + event.isCanceled = true + } + } + } + + @SubscribeEvent + fun onConfigLoad(event: ConfigLoadEvent) { + LorenzUtils.onToggle(config.rainbowColor, config.monochromeColor, config.lookAhead) { + updateConfig() + } + } + + private fun updateConfig() { + parkourHelper?.run { + rainbowColor = config.rainbowColor.get() + monochromeColor = config.monochromeColor.get().toChromaColor() + lookAhead = config.lookAhead.get() + 1 + outline = config.outline + } + } + + @SubscribeEvent + fun onRenderWorld(event: RenderWorldLastEvent) { + if (!isEnabled()) return + + parkourHelper?.render(event) + } + + fun isEnabled() = + RiftAPI.inRift() && LorenzUtils.skyBlockArea == "Mirrorverse" && config.enabled && puzzleRoom.isPlayerInside() +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt b/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt index 1c663ac52..73a529cbc 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt @@ -51,6 +51,16 @@ class ParkourHelper( if (!showEverything) { if (current == locations.size - 1) visible = false + if (visible) { + for ((index, location) in locations.withIndex()) { + if (location.offsetCenter().distanceToPlayer() < detectionRange) { + if (Minecraft.getMinecraft().thePlayer.onGround) { + current = index + } + } + } + } + val distanceToPlayer = locations.first().offsetCenter().distanceToPlayer() if (distanceToPlayer < detectionRange) { visible = true @@ -62,14 +72,6 @@ class ParkourHelper( if (!visible) return - for ((index, location) in locations.withIndex()) { - if (location.offsetCenter().distanceToPlayer() < detectionRange) { - if (Minecraft.getMinecraft().thePlayer.onGround) { - current = index - } - } - } - if (current < 0) return } else { current = 0 |