aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/dulkirfabric
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/com/dulkirfabric')
-rw-r--r--src/main/kotlin/com/dulkirfabric/Registrations.kt15
-rw-r--r--src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt6
-rw-r--r--src/main/kotlin/com/dulkirfabric/events/LongUpdateEvent.kt8
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/EffigyDisplay.kt61
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/RenderTest.kt3
-rw-r--r--src/main/kotlin/com/dulkirfabric/util/TablistUtils.kt28
6 files changed, 113 insertions, 8 deletions
diff --git a/src/main/kotlin/com/dulkirfabric/Registrations.kt b/src/main/kotlin/com/dulkirfabric/Registrations.kt
index 0bb39e2..d8dea01 100644
--- a/src/main/kotlin/com/dulkirfabric/Registrations.kt
+++ b/src/main/kotlin/com/dulkirfabric/Registrations.kt
@@ -4,15 +4,13 @@ import com.dulkirfabric.DulkirModFabric.EVENT_BUS
import com.dulkirfabric.commands.ConfigCommand
import com.dulkirfabric.commands.DynamicKeyCommand
import com.dulkirfabric.commands.JoinDungeonCommands
-import com.dulkirfabric.events.BlockOutlineEvent
-import com.dulkirfabric.events.ClientTickEvent
-import com.dulkirfabric.events.MouseScrollEvent
-import com.dulkirfabric.events.WorldRenderLastEvent
+import com.dulkirfabric.events.*
import com.dulkirfabric.events.chat.ChatReceivedEvent
import com.dulkirfabric.events.chat.ModifyCommandEvent
import com.dulkirfabric.events.chat.OverlayReceivedEvent
import com.dulkirfabric.features.*
import com.dulkirfabric.features.chat.AbiPhoneDND
+import com.dulkirfabric.util.TablistUtils
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents
@@ -27,6 +25,7 @@ import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents
* purposes, as the list of features is planned to be quite large.
*/
object Registrations {
+ private var tickCount: Int = 0
fun registerCommands() {
val cre = ClientCommandRegistrationCallback.EVENT
@@ -57,12 +56,18 @@ object Registrations {
EVENT_BUS.subscribe(AbiPhoneDND)
EVENT_BUS.subscribe(InventoryScale)
EVENT_BUS.subscribe(AliasImpl)
+ EVENT_BUS.subscribe(EffigyDisplay)
+ EVENT_BUS.subscribe(TablistUtils)
}
fun registerEvents() {
// Register Custom Tick event, so we can use it like 1.8.9 forge
ClientTickEvents.START_CLIENT_TICK.register(
- ClientTickEvents.StartTick { _ -> ClientTickEvent.post() }
+ ClientTickEvents.StartTick { _ ->
+ ClientTickEvent.post()
+ if (tickCount % 20 == 0) LongUpdateEvent.post()
+ tickCount++
+ }
)
ClientReceiveMessageEvents.ALLOW_GAME.register(
ClientReceiveMessageEvents.AllowGame { message, overlay ->
diff --git a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt
index 408d180..c9fd0dd 100644
--- a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt
+++ b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt
@@ -98,6 +98,9 @@ class DulkirConfig {
general.addEntry(
entryBuilder.mkToggle(Text.literal("AbiPhone Caller ID"), configOptions::abiPhoneCallerID)
)
+ general.addEntry(
+ entryBuilder.mkToggle(Text.literal("Inactive Effigy Waypoints"), configOptions::inactiveEffigyDisplay)
+ )
val shortcuts = builder.getOrCreateCategory(Text.literal("Shortcuts"))
shortcuts.addEntry(
@@ -152,7 +155,8 @@ class DulkirConfig {
var abiPhoneDND: Boolean = false,
var abiPhoneCallerID: Boolean = false,
var tooltipScale: Float = 1f,
- var statusEffectHidden: Boolean = false
+ var statusEffectHidden: Boolean = false,
+ var inactiveEffigyDisplay: Boolean = false
)
@Serializable
diff --git a/src/main/kotlin/com/dulkirfabric/events/LongUpdateEvent.kt b/src/main/kotlin/com/dulkirfabric/events/LongUpdateEvent.kt
new file mode 100644
index 0000000..c56cd0b
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/events/LongUpdateEvent.kt
@@ -0,0 +1,8 @@
+package com.dulkirfabric.events
+
+import com.dulkirfabric.events.base.Event
+
+/**
+ * Utility event for tasks that only run 1 time per second
+ */
+object LongUpdateEvent: Event() \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/features/EffigyDisplay.kt b/src/main/kotlin/com/dulkirfabric/features/EffigyDisplay.kt
new file mode 100644
index 0000000..9e8c75f
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/features/EffigyDisplay.kt
@@ -0,0 +1,61 @@
+package com.dulkirfabric.features
+
+import com.dulkirfabric.config.DulkirConfig
+import com.dulkirfabric.events.LongUpdateEvent
+import com.dulkirfabric.events.WorldRenderLastEvent
+import com.dulkirfabric.util.ScoreBoardUtils
+import com.dulkirfabric.util.TablistUtils
+import com.dulkirfabric.util.Utils
+import com.dulkirfabric.util.WorldRenderUtils
+import meteordevelopment.orbit.EventHandler
+import net.minecraft.text.Style
+import net.minecraft.text.Text
+import net.minecraft.util.Formatting
+import net.minecraft.util.math.Vec3d
+
+object EffigyDisplay {
+ private var effigyWaypoints = arrayOf(
+ Effigy(Vec3d(150.5, 76.0, 95.5)),
+ Effigy(Vec3d(193.5, 90.0, 119.5)),
+ Effigy(Vec3d(235.5, 107.0, 147.5)),
+ Effigy(Vec3d(293.5, 93.0, 134.5)),
+ Effigy(Vec3d(262.5, 96.0, 94.5)),
+ Effigy(Vec3d(240.5, 126.0, 118.5))
+ )
+
+ private val c7OnlyRegex = Regex("[^c7]")
+
+ @EventHandler
+ fun onRender(event: WorldRenderLastEvent) {
+ // if we have any waypoints that need rendering, Do so.
+ for (effigy in effigyWaypoints) {
+ if (effigy.render) {
+ WorldRenderUtils.renderWaypoint(
+ Text.literal("Inactive").setStyle(Style.EMPTY.withColor(Formatting.GOLD)), event.context, effigy.coords
+ )
+ }
+ }
+ }
+ @EventHandler
+ fun checkEffigies(event: LongUpdateEvent) {
+ if (!DulkirConfig.configOptions.inactiveEffigyDisplay) return
+ if (!Utils.isInSkyblock()) return
+ if (TablistUtils.area != "The Rift") {
+ effigyWaypoints.forEach { it.render = false }
+ return
+ }
+ val lines = ScoreBoardUtils.getLinesWithColor() ?: return
+ if (lines.size <= 7) return
+ if (!lines[3].contains("Stillgore")) return
+ val effigyStatusLine = lines[6].replace(c7OnlyRegex, "").substring(1)
+ if (effigyStatusLine.length != 6) return
+ for (i in 0..5) {
+ effigyWaypoints[i].render = (effigyStatusLine[i] == '7')
+ }
+ }
+
+ /**
+ * data class for storing the effigy coordinates and whether they need to be rendered
+ */
+ data class Effigy(val coords: Vec3d, var render: Boolean = false)
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt b/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt
index 93c4ad9..8ad270d 100644
--- a/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt
@@ -12,10 +12,9 @@ object RenderTest {
@EventHandler
fun onRender(event: WorldRenderLastEvent) {
-
WorldRenderUtils.renderWaypoint(
Text.literal("Home Base").setStyle(Style.EMPTY.withColor(Color(255, 100, 150, 255).rgb)), event.context,
- Vec3d(-183.5, 79.0, -465.5), false
+ Vec3d(-183.5, 79.0, -465.5)
)
}
} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/util/TablistUtils.kt b/src/main/kotlin/com/dulkirfabric/util/TablistUtils.kt
new file mode 100644
index 0000000..a0999f6
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/util/TablistUtils.kt
@@ -0,0 +1,28 @@
+package com.dulkirfabric.util
+
+import com.dulkirfabric.DulkirModFabric.mc
+import com.dulkirfabric.events.LongUpdateEvent
+import meteordevelopment.orbit.EventHandler
+import net.minecraft.client.network.PlayerListEntry
+
+object TablistUtils {
+ var tablist: List<PlayerListEntry>? = null
+ private val areaPattern = "Area: (.+)".toRegex()
+ var area: String = ""
+
+ @EventHandler
+ fun onLongUpdate(event: LongUpdateEvent) {
+ if (mc.player == null) return
+ tablist = mc.inGameHud.playerListHud.collectPlayerEntries()
+ area = updateArea()
+ }
+
+ private fun updateArea(): String {
+ if (tablist == null) return ""
+ tablist!!.forEach {
+ val match = areaPattern.find(it.displayName?.string ?: return@forEach) ?: return@forEach
+ return match.groupValues[1]
+ }
+ return ""
+ }
+} \ No newline at end of file