diff options
Diffstat (limited to 'src/main')
4 files changed, 175 insertions, 5 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index d863f5ee8..55a334691 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -314,6 +314,7 @@ class SkyHanniMod { loadModule(EnigmaSoulWaypoints) loadModule(DungeonLividFinder) loadModule(CruxTalismanDisplay) + loadModule(DanceRoomHelper) loadModule(LaserParkour()) loadModule(CustomTextBox()) 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 f0457530d..d3ec06d2b 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/RiftConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/RiftConfig.java @@ -2,10 +2,7 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; import com.google.gson.annotations.Expose; -import io.github.moulberry.moulconfig.annotations.Accordion; -import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; -import io.github.moulberry.moulconfig.annotations.ConfigEditorColour; -import io.github.moulberry.moulconfig.annotations.ConfigOption; +import io.github.moulberry.moulconfig.annotations.*; import io.github.moulberry.moulconfig.observer.Property; public class RiftConfig { @@ -172,8 +169,40 @@ public class RiftConfig { public static class MirrorVerse { + @ConfigOption(name = "Dance Room Helper", desc = "") + @Accordion @Expose - @ConfigOption(name = "Laser Parkour", desc = "Highlights the location of the invisible blocks.") + public DanceRoomHelper danceRoomHelper = new DanceRoomHelper(); + + public static class DanceRoomHelper{ + + @Expose + @ConfigOption(name= "Enabled", desc = "Helps solving the dance room in the mirror verse by showing multiple tasks at once.") + @ConfigEditorBoolean + public boolean enabled = false; + + @Expose + @ConfigOption(name = "Lines to show", desc = "How many tasks you should see.") + @ConfigEditorSlider(minStep = 1, maxValue = 49, minValue = 1) + public int lineToShow = 3; + + @Expose + @ConfigOption(name = "Space", desc = "Change the space between each line.") + @ConfigEditorSlider(minStep = 1, maxValue = 10, minValue = -5) + public int extraSpace = 0; + + @Expose + @ConfigOption(name = "Hide others players", desc = "Hide other players inside the dance room.") + @ConfigEditorBoolean + public boolean hidePlayers = false; + + @Expose + public Position position = new Position(442, 239, false, true); + + } + + @Expose + @ConfigOption(name = "Tubulator", desc = "Highlights the location of the invisible blocks (Laser Parkour).") @ConfigEditorBoolean public boolean laserParkour = true; @@ -202,4 +231,5 @@ public class RiftConfig { public boolean waypoints = true; } + } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/DanceRoomHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/DanceRoomHelper.kt new file mode 100644 index 000000000..300dd2b23 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/DanceRoomHelper.kt @@ -0,0 +1,129 @@ +package at.hannibal2.skyhanni.features.rift + + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.CheckRenderEntityEvent +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings +import at.hannibal2.skyhanni.utils.StringUtils.firstLetterUppercase +import at.hannibal2.skyhanni.utils.getLorenzVec +import at.hannibal2.skyhanni.utils.jsonobjects.DanceRoomInstructionsJson +import kotlinx.coroutines.* +import net.minecraft.client.Minecraft +import net.minecraft.client.entity.EntityOtherPlayerMP +import net.minecraft.util.AxisAlignedBB +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object DanceRoomHelper { + + private var display = emptyList<String>() + private val config get() = SkyHanniMod.feature.rift.mirrorVerse.danceRoomHelper + private var index = 0 + private var found = false + private val danceRoom = AxisAlignedBB(-260.0, 32.0, -110.0, -267.0, 40.0, -102.0) + private var inRoom = false + private var instructions = emptyList<String>() + + fun update() { + display = buildList { + if (instructions.isEmpty()) { + add("§cError fetching Dance Room Instructions!") + add("§cTry §e/shreloadlocalrepo §cor §e/shupdaterepo") + } + for (line in instructions.withIndex()) { + if (index == line.index) { + add("§7Now: ${line.value.format()}") + } else if (index + 1 == line.index) { + add("§7Next: ${line.value.format()}") + } else if ((index + 2..index + config.lineToShow).contains(line.index)) { + add("§7Later: ${line.value.format()}") + } + } + } + } + + private fun String.format() = split(" ").joinToString(" ") { it.firstLetterUppercase().addColor() } + + private fun String.addColor() = when (this) { + "Move" -> "§e" + "Stand" -> "§e" + "Sneak" -> "§5" + "Jump" -> "§b" + "Punch" -> "§d" + else -> "§f" + } + this + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.GameOverlayRenderEvent) { + if (!isEnabled()) return + config.position.renderStrings( + display, + config.extraSpace, + posLabel = "Dance Room Helper" + ) + } + + @SubscribeEvent + fun onWorldChange(event: WorldEvent.Load) { + inRoom = false + } + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (!isEnabled()) return + if (event.isMod(10)) { + inRoom = danceRoom.isVecInside(Minecraft.getMinecraft().thePlayer.positionVector) + } + if (inRoom) { + update() + } + } + + @SubscribeEvent + fun onSound(event: at.hannibal2.skyhanni.events.PlaySoundEvent) { + if (!isEnabled() && !inRoom) return + if (event.soundName == "random.burp" && event.volume == 0.8f) { + index = 0 + found = false + update() + } + if (event.soundName == "note.bassattack" && event.pitch == 0.6984127f && event.volume == 1.0f && !found) { + found = true + start(2000) + update() + } + } + + @SubscribeEvent + fun onCheckRender(event: CheckRenderEntityEvent<*>) { + if (RiftAPI.inRift() && config.hidePlayers) { + val entity = event.entity + if (entity is EntityOtherPlayerMP) { + if (danceRoom.isVecInside(entity.getLorenzVec().toVec3())) { + event.isCanceled = true + } + } + } + } + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + event.getConstant<DanceRoomInstructionsJson>("DanceRoomInstructions")?.let { + instructions = it.instructions + } + } + + fun start(interval: Long): Job { + return CoroutineScope(Dispatchers.Default).launch { + while (NonCancellable.isActive && found) { + index++ + delay(interval) + } + } + } + + fun isEnabled() = RiftAPI.inRift() && config.enabled +}
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/DanceRoomInstructionsJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/DanceRoomInstructionsJson.java new file mode 100644 index 000000000..0f4568bbd --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/DanceRoomInstructionsJson.java @@ -0,0 +1,10 @@ +package at.hannibal2.skyhanni.utils.jsonobjects; + +import com.google.gson.annotations.Expose; + +import java.util.List; + +public class DanceRoomInstructionsJson { + @Expose + public List<String> instructions; +} |