diff options
| author | ronald <inglettronald@gmail.com> | 2023-07-29 00:13:53 -0500 |
|---|---|---|
| committer | ronald <inglettronald@gmail.com> | 2023-07-29 00:13:53 -0500 |
| commit | d3e13e38e22b8eecd5198c59cf6a132cc9425b33 (patch) | |
| tree | e70a8fdc86d00cf22a281fcde09b856f09b45a11 /src/main/kotlin/com/dulkirfabric/features | |
| parent | 71b8238eff91de0243e641c2eeadacd61b8f0f88 (diff) | |
| download | DulkirMod-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.kt | 17 | ||||
| -rw-r--r-- | src/main/kotlin/com/dulkirfabric/features/KeyShortCutImpl.kt | 2 | ||||
| -rw-r--r-- | src/main/kotlin/com/dulkirfabric/features/chat/ChatStacking.kt | 23 | ||||
| -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.kt | 19 | ||||
| -rw-r--r-- | src/main/kotlin/com/dulkirfabric/features/slayer/Demonlord.kt | 43 | ||||
| -rw-r--r-- | src/main/kotlin/com/dulkirfabric/features/slayer/MiniBossHighlight.kt | 26 |
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 |
