aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/dulkirfabric/features
diff options
context:
space:
mode:
authorronald <inglettronald@gmail.com>2023-07-29 00:13:53 -0500
committerronald <inglettronald@gmail.com>2023-07-29 00:13:53 -0500
commitd3e13e38e22b8eecd5198c59cf6a132cc9425b33 (patch)
treee70a8fdc86d00cf22a281fcde09b856f09b45a11 /src/main/kotlin/com/dulkirfabric/features
parent71b8238eff91de0243e641c2eeadacd61b8f0f88 (diff)
downloadDulkirMod-Fabric-d3e13e38e22b8eecd5198c59cf6a132cc9425b33.tar.gz
DulkirMod-Fabric-d3e13e38e22b8eecd5198c59cf6a132cc9425b33.tar.bz2
DulkirMod-Fabric-d3e13e38e22b8eecd5198c59cf6a132cc9425b33.zip
Lots of slayer backend and a smattering of random features (Lightning/fire culling, chat stacking improvements, aotv highlight stuff, etc)
Diffstat (limited to 'src/main/kotlin/com/dulkirfabric/features')
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/AotvHighlight.kt17
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/KeyShortCutImpl.kt2
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/chat/ChatStacking.kt23
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/filters/CullExplosionParticles.kt (renamed from src/main/kotlin/com/dulkirfabric/features/CullExplosionParticles.kt)2
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/filters/Lightning.kt19
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/slayer/Demonlord.kt43
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/slayer/MiniBossHighlight.kt26
7 files changed, 120 insertions, 12 deletions
diff --git a/src/main/kotlin/com/dulkirfabric/features/AotvHighlight.kt b/src/main/kotlin/com/dulkirfabric/features/AotvHighlight.kt
index 283886f..9091351 100644
--- a/src/main/kotlin/com/dulkirfabric/features/AotvHighlight.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/AotvHighlight.kt
@@ -5,6 +5,7 @@ import com.dulkirfabric.config.DulkirConfig
import com.dulkirfabric.events.ClientTickEvent
import com.dulkirfabric.events.LongUpdateEvent
import com.dulkirfabric.events.WorldRenderLastEvent
+import com.dulkirfabric.util.TextUtils
import com.dulkirfabric.util.render.WorldRenderUtils
import meteordevelopment.orbit.EventHandler
import net.minecraft.client.MinecraftClient
@@ -12,6 +13,7 @@ import net.minecraft.client.util.InputUtil
import net.minecraft.entity.Entity
import net.minecraft.util.hit.BlockHitResult
import net.minecraft.util.hit.HitResult
+import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.Vec3d
import net.minecraft.world.RaycastContext
import org.lwjgl.glfw.GLFW
@@ -43,20 +45,26 @@ object AotvHighlight {
// check that holding aotv
if (heldItemID != "ASPECT_OF_THE_VOID") return
val handle = MinecraftClient.getInstance().window.handle
- if (!InputUtil.isKeyPressed(handle, GLFW.GLFW_KEY_LEFT_SHIFT)) return
+ if (!InputUtil.isKeyPressed(handle, GLFW.GLFW_KEY_LEFT_SHIFT) || mc.currentScreen != null) return
// Find the targeted block with a range of 60.9
val entity = mc.cameraEntity
if (mc.player == null) return
val blockHit = raycast(entity!!, 60.9, mc.tickDelta)
if (blockHit.type != HitResult.Type.BLOCK) return
- val pos = (blockHit as BlockHitResult).blockPos
+ val pos: BlockPos = (blockHit as BlockHitResult).blockPos
+ if (!isValidTeleportLocation(pos)) return
// if found display box
WorldRenderUtils.drawBox(event.context, pos.x.toDouble(), pos.y.toDouble(), pos.z.toDouble(), 1.0, 1.0, 1.0,
Color(DulkirConfig.configOptions.etherwarpPreviewColor, true), false)
}
+ private fun isValidTeleportLocation(pos: BlockPos): Boolean {
+ // TODO: Implement this (LOTS OF CASES, seems annoying)
+ return true
+ }
+
private fun raycast(entity: Entity, maxDistance: Double, tickDelta: Float): HitResult {
// 1.7 if not crouch, 1.54 if crouch
val crouching = mc.player!!.isSneaking
@@ -74,4 +82,9 @@ object AotvHighlight {
)
)
}
+
+ private fun err(): Boolean {
+ TextUtils.info("§6Error in getting block info for AOTV highlight, please report.")
+ return true
+ }
} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/features/KeyShortCutImpl.kt b/src/main/kotlin/com/dulkirfabric/features/KeyShortCutImpl.kt
index f0ca052..97ea6e4 100644
--- a/src/main/kotlin/com/dulkirfabric/features/KeyShortCutImpl.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/KeyShortCutImpl.kt
@@ -4,6 +4,7 @@ import com.dulkirfabric.commands.DynamicKeyCommand
import com.dulkirfabric.config.DulkirConfig
import com.dulkirfabric.events.WorldKeyPressEvent
import com.dulkirfabric.util.TextUtils
+import com.dulkirfabric.util.Utils
import meteordevelopment.orbit.EventHandler
object KeyShortCutImpl {
@@ -12,6 +13,7 @@ object KeyShortCutImpl {
@EventHandler
fun onKeyPress(event: WorldKeyPressEvent) {
+ if (DulkirConfig.configOptions.macrosSkyBlockOnly && !Utils.isInSkyblock()) return
DulkirConfig.configOptions.macrosList.forEach {
if (it.keyBinding.code == event.key) {
// Spam Prevention
diff --git a/src/main/kotlin/com/dulkirfabric/features/chat/ChatStacking.kt b/src/main/kotlin/com/dulkirfabric/features/chat/ChatStacking.kt
index 02d1914..d222540 100644
--- a/src/main/kotlin/com/dulkirfabric/features/chat/ChatStacking.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/chat/ChatStacking.kt
@@ -4,7 +4,9 @@ import com.dulkirfabric.DulkirModFabric.mc
import com.dulkirfabric.events.LongUpdateEvent
import com.dulkirfabric.events.chat.ChatEvents
import com.dulkirfabric.util.ScoreBoardUtils.formattedString
+import com.dulkirfabric.util.TextUtils
import meteordevelopment.orbit.EventHandler
+import net.minecraft.text.MutableText
import net.minecraft.text.Text
object ChatStacking {
@@ -12,19 +14,32 @@ object ChatStacking {
data class ChatLog(var timestamp: Long, val message: Text, var frequency: Int)
private var chatLogs = mutableSetOf<ChatLog>()
+ private val stackRegex = """ §7\((\d+)\)$""".toRegex()
+ private val whiteListedMessages = listOf(
+ "".toRegex(),
+ "(-+)".toRegex()
+ )
@EventHandler
- fun modifyChat(event: ChatEvents.ModifyChat) {
+ fun modifyChat(event: ChatEvents.AllowChat) {
chatLogs.forEach { curMsg ->
if (curMsg.message.string.equals(event.message.string)) {
+ // Probably don't stack empty lines and the long bars
+ if (whiteListedMessages.any {
+ it matches event.message.string
+ }) return
+
curMsg.timestamp = System.currentTimeMillis()
curMsg.frequency++
mc.inGameHud.chatHud.messages.removeIf { msg ->
- msg.content.string == curMsg.message.string
- && mc.inGameHud.ticks - msg.creationTick >= 1200
+ TextUtils.stripColorCodes(msg.content.string.replace(stackRegex, "")) == curMsg.message.string
+ && mc.inGameHud.ticks - msg.creationTick <= 1200
}
+ mc.inGameHud.chatHud.addMessage(Text.literal("${curMsg.message.formattedString()} §7(${curMsg.frequency})"))
mc.inGameHud.chatHud.refresh()
- event.setReturnValue(Text.literal("${curMsg.message.formattedString()} §7(${curMsg .frequency})"))
+ // TODO: implement something like this to avoid stripColorCodes call
+ // MutableText.of(event.message.content).append(Text.literal(" §7(${curMsg.frequency})"))
+ event.cancel()
return
}
}
diff --git a/src/main/kotlin/com/dulkirfabric/features/CullExplosionParticles.kt b/src/main/kotlin/com/dulkirfabric/features/filters/CullExplosionParticles.kt
index 302beb9..3ab193d 100644
--- a/src/main/kotlin/com/dulkirfabric/features/CullExplosionParticles.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/filters/CullExplosionParticles.kt
@@ -1,4 +1,4 @@
-package com.dulkirfabric.features
+package com.dulkirfabric.features.filters
import com.dulkirfabric.config.DulkirConfig
import com.dulkirfabric.events.AddParticleEvent
diff --git a/src/main/kotlin/com/dulkirfabric/features/filters/Lightning.kt b/src/main/kotlin/com/dulkirfabric/features/filters/Lightning.kt
new file mode 100644
index 0000000..3c3339a
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/features/filters/Lightning.kt
@@ -0,0 +1,19 @@
+package com.dulkirfabric.features.filters
+
+import com.dulkirfabric.config.DulkirConfig
+import com.dulkirfabric.events.AddParticleEvent
+import com.dulkirfabric.events.EntityLoadEvent
+import com.dulkirfabric.util.Utils
+import meteordevelopment.orbit.EventHandler
+import net.minecraft.entity.LightningEntity
+
+object Lightning {
+ @EventHandler
+ fun cull(event: EntityLoadEvent) {
+ if (!DulkirConfig.configOptions.hideLightning) return
+ if (!Utils.isInSkyblock()) return
+ if (event.entity is LightningEntity) {
+ event.entity.kill()
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/features/slayer/Demonlord.kt b/src/main/kotlin/com/dulkirfabric/features/slayer/Demonlord.kt
new file mode 100644
index 0000000..434c866
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/features/slayer/Demonlord.kt
@@ -0,0 +1,43 @@
+package com.dulkirfabric.features.slayer
+
+import com.dulkirfabric.DulkirModFabric.mc
+import com.dulkirfabric.events.PlaySoundEvent
+import com.dulkirfabric.events.WorldRenderLastEvent
+import com.dulkirfabric.util.TablistUtils
+import com.dulkirfabric.util.TextUtils
+import com.dulkirfabric.util.Utils.debugSound
+import com.dulkirfabric.util.Utils.getInterpolatedPos
+import com.dulkirfabric.util.render.WorldRenderUtils
+import meteordevelopment.orbit.EventHandler
+import net.minecraft.entity.decoration.ArmorStandEntity
+import net.minecraft.util.math.Box
+import java.awt.Color
+
+object Demonlord {
+ private val phaseColors = listOf(
+ "CRYSTAL ♨" to Color(15, 247, 236, 255),
+ "ASHEN ♨" to Color(0, 0, 0, 255),
+ "AURIC ♨" to Color(206, 219, 57, 255),
+ "SPIRIT ♨" to Color(255, 255, 255, 255)
+ )
+ private val box = Box(-.5, -.4, -.5, .5, -1.9, .5)
+
+ @EventHandler
+ fun attunementHighlight(event: WorldRenderLastEvent) {
+ if (TablistUtils.persistentInfo.area != "Crimson Isle") return
+ val ents = mc.world?.entities ?: return
+ ents.forEach { ent ->
+ if (ent is ArmorStandEntity && ent.hasCustomName()) {
+ val name = TextUtils.stripColorCodes(ent.customName?.string ?: return@forEach)
+ val color = phaseColors.firstOrNull { name.contains(it.first) }?.second ?: return@forEach
+ val pos = ent.getInterpolatedPos(event.context.tickDelta())
+ WorldRenderUtils.drawWireFrame(
+ event.context,
+ box.offset(pos.x, pos.y, pos.z),
+ color,
+ 8f
+ )
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/features/slayer/MiniBossHighlight.kt b/src/main/kotlin/com/dulkirfabric/features/slayer/MiniBossHighlight.kt
index 4720890..61c712a 100644
--- a/src/main/kotlin/com/dulkirfabric/features/slayer/MiniBossHighlight.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/slayer/MiniBossHighlight.kt
@@ -1,24 +1,30 @@
package com.dulkirfabric.features.slayer
import com.dulkirfabric.DulkirModFabric.mc
+import com.dulkirfabric.config.DulkirConfig
+import com.dulkirfabric.events.PlaySoundEvent
import com.dulkirfabric.events.WorldRenderLastEvent
import com.dulkirfabric.util.ScoreBoardUtils
-import com.dulkirfabric.util.TextUtils
import com.dulkirfabric.util.Utils.getInterpolatedPos
+import com.dulkirfabric.util.render.HudRenderUtil
import com.dulkirfabric.util.render.WorldRenderUtils
import meteordevelopment.orbit.EventHandler
import net.minecraft.entity.decoration.ArmorStandEntity
+import net.minecraft.text.Style
+import net.minecraft.text.Text
+import net.minecraft.util.Formatting
import net.minecraft.util.math.Box
import java.awt.Color
+import java.time.Duration
object MiniBossHighlight {
data class MiniBoss(val name: String, val box: Box)
- private val zombieBox = Box(-.3, .1, -.3, .3, -1.9, .3)
+ private val zombieBox = Box(-.4, .1, -.4, .4, -1.9, .4)
private val spiderBox = Box(-.7, -.3, -.7, .7, -1.2, .7)
- private val wolfBox = Box(-.3, -0.0, -.3, .3, -.85, .3)
- private val emanBox = Box(-.3, 0.0, -.3, .3, -2.9, .3)
+ private val wolfBox = Box(-.4, -0.0, -.4, .4, -.85, .4)
+ private val emanBox = Box(-.4, 0.0, -.4, .4, -2.9, .4)
private val blazeBox = Box(-.4, -.2, -.4, .4, -2.0, .4)
private val miniBosses = listOf(
@@ -43,8 +49,8 @@ object MiniBossHighlight {
@EventHandler
fun drawMiniBossBoxes(event: WorldRenderLastEvent) {
- // TODO: check for a slayer quest being active
if (!ScoreBoardUtils.hasActiveSlayerQuest) return
+ if (!DulkirConfig.configOptions.boxMinis) return
val ents = mc.world?.entities ?: return
@@ -57,4 +63,14 @@ object MiniBossHighlight {
}
}
+ // TODO: fix
+ @EventHandler
+ fun onSound(event: PlaySoundEvent) {
+ if (!DulkirConfig.configOptions.announceMinis) return
+ if (event.sound.id.path != "entity.generic.explode") return
+ if (event.sound.pitch != 1.2857143f) return
+ if (event.sound.volume != .6f) return
+ HudRenderUtil.drawTitle(Text.literal("MiniBoss Spawned").setStyle(Style.EMPTY.withColor(Formatting.RED)),
+ Duration.ofMillis(1000))
+ }
} \ No newline at end of file