aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md26
-rw-r--r--build.gradle6
-rw-r--r--src/main/kotlin/com/dulkirfabric/Registrations.kt2
-rw-r--r--src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt10
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/BrokenHyp.kt1
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt33
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/slayer/Vampire.kt93
-rw-r--r--src/main/kotlin/com/dulkirfabric/util/Utils.kt9
8 files changed, 167 insertions, 13 deletions
diff --git a/README.md b/README.md
index 31d98ef..561d73a 100644
--- a/README.md
+++ b/README.md
@@ -26,8 +26,9 @@ DulkirMod 1.8.9 Can be found [here](https://github.com/inglettronald/DulkirMod).
<li>Custom Selected Block outline</li>
<li>Inactive Effigy Waypoints (rift)</li>
<li>Custom Held Item Placement/Animations</li>
- <li>Glow Utility (ESP Toggle currently broken on AMD, HMU if you're a wizard with OpenGL and feel inclined to help)</li>
- <li>Cooldown Tracking through Durability Display (Working for some sound cooldowns, need to input some data)</li>
+ <li>Commands for Preset Export/Import to/from Clipboard (see /animations)</li>
+ <li>Glow Utility (no ESP toggle, currently not used for anything)</li>
+ <li>Cooldown Tracking through Durability Display (Working for some sound cooldowns)</li>
<li>NO DOWNTIME alarm. Plays Iphone alarm if you stop moving after a certain amount of time.</li>
<li>Large Explosion Particle render toggle</li>
<li>Hide Scoreboard Numbers</li>
@@ -35,6 +36,16 @@ DulkirMod 1.8.9 Can be found [here](https://github.com/inglettronald/DulkirMod).
<li>Hide Hunger Display option</li>
<li>AOTV Etherwarp display</li>
<li>Action Bar HUD replacements (HEALTH, MANA, DEF, SPEED)</li>
+ <li>Hide Lightning in Skyblock</li>
+ <li>Hide Fire Overlay</li>
+ <li>Slayer Miniboss Alerts + Boxes</li>
+ <li>Boss Kill time Feedback for slayers</li>
+ <li>Clean Blaze Slayer Mode! (Removes particles and kills fireballs)</li>
+ <li>Damage Splash Truncate/Hide</li>
+ <li>Blaze Attunement Display</li>
+ <li>Broken Hyperion Notification</li>
+ <li>Max Visitors Notification</li>
+ <li>Garden HUD for Composter/Visitors</li>
</ul>
</details>
@@ -43,12 +54,7 @@ DulkirMod 1.8.9 Can be found [here](https://github.com/inglettronald/DulkirMod).
<b>Planned</b>
</summary>
<ul>
- <li>Most features from DulkirMod 1.8.9</li>
- <li>Lots more Rendering Utility</li>
- <li>OldAnimations ??</li>
- <li>Etherwarp display</li>
- <li>HUD for health, Mana, Speed</li>
- <li>A lot more I'm forgetting about</li>
+ <li>More Enderman Slayer Features</li>
</ul>
</details>
@@ -75,4 +81,6 @@ Opening the settings menu can be achieved through the escape menu or through the
Editing HUD positioning makes use of the [JARVIS API](https://github.com/romangraef/jarvis). This library is still in development, but is a fantastic library for a common HUD element editor.
This allows multiple mods to handle the rendering on their own, but have the positioning logic be handled in one place.
-Use the command `/jarvis gui` to access the main editor. \ No newline at end of file
+Use the command `/jarvis gui` to access the main editor.
+
+Use the command `/animations` to share animation profiles. \ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 5f38eaa..69aa3eb 100644
--- a/build.gradle
+++ b/build.gradle
@@ -43,9 +43,9 @@ dependencies {
include "com.github.llamalad7.mixinextras:mixinextras-fabric:0.2.0-beta.9"
implementation "com.github.llamalad7.mixinextras:mixinextras-fabric:0.2.0-beta.9"
annotationProcessor "com.github.llamalad7.mixinextras:mixinextras-fabric:0.2.0-beta.9"
- modImplementation("moe.nea.jarvis:jarvis-fabric:1.1.0")
- include("moe.nea.jarvis:jarvis-fabric:1.1.0")
- modLocalRuntime("moe.nea.jarvis:jarvis-fabric:1.1.0")
+ modImplementation("moe.nea.jarvis:jarvis-fabric:1.1.1")
+ include("moe.nea.jarvis:jarvis-fabric:1.1.1")
+ modLocalRuntime("moe.nea.jarvis:jarvis-fabric:1.1.1")
}
loom {
diff --git a/src/main/kotlin/com/dulkirfabric/Registrations.kt b/src/main/kotlin/com/dulkirfabric/Registrations.kt
index 650fe87..355abb8 100644
--- a/src/main/kotlin/com/dulkirfabric/Registrations.kt
+++ b/src/main/kotlin/com/dulkirfabric/Registrations.kt
@@ -15,6 +15,7 @@ import com.dulkirfabric.features.filters.Lightning
import com.dulkirfabric.features.slayer.BossTimer
import com.dulkirfabric.features.slayer.Demonlord
import com.dulkirfabric.features.slayer.MiniBossHighlight
+import com.dulkirfabric.features.slayer.Vampire
import com.dulkirfabric.hud.ActionBarHudReplacements
import com.dulkirfabric.hud.Garden
import com.dulkirfabric.hud.SpeedOverlay
@@ -97,6 +98,7 @@ object Registrations {
EVENT_BUS.subscribe(Garden)
EVENT_BUS.subscribe(VisitorAlert)
EVENT_BUS.subscribe(BrokenHyp)
+ EVENT_BUS.subscribe(Vampire)
if (FabricLoader.getInstance().isDevelopmentEnvironment)
EVENT_BUS.subscribe(RenderTest)
diff --git a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt
index 3118275..1457a85 100644
--- a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt
+++ b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt
@@ -298,6 +298,14 @@ class DulkirConfig {
slayer.addEntry(
entryBuilder.mkToggle(Text.literal("Disable ALL particles during Blaze slayer boss"), configOptions::cleanBlaze)
)
+ slayer.addEntry(
+ entryBuilder.mkToggle(Text.literal("Vampire Steak Display"), configOptions::steakDisplay,
+ Text.literal("Shows a wireframe on vampire boss when you can 1 tap it"))
+ )
+ slayer.addEntry(
+ entryBuilder.mkToggle(Text.literal("Blood Ichor Highlight"), configOptions::ichorHighlight,
+ Text.literal("Highlights the T5 mechanic that you line up with the boss."))
+ )
val garden = builder.getOrCreateCategory(Text.literal("Garden"))
garden.addEntry(
@@ -367,6 +375,8 @@ class DulkirConfig {
var visitorAlert: Boolean = false,
var persistentVisitorAlert: Boolean = false,
var brokenHypNotif: Boolean = false,
+ var steakDisplay: Boolean = false,
+ var ichorHighlight: Boolean = false,
)
@Serializable
diff --git a/src/main/kotlin/com/dulkirfabric/features/BrokenHyp.kt b/src/main/kotlin/com/dulkirfabric/features/BrokenHyp.kt
index dfae99b..85c1f7b 100644
--- a/src/main/kotlin/com/dulkirfabric/features/BrokenHyp.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/BrokenHyp.kt
@@ -31,6 +31,7 @@ object BrokenHyp {
// get info about held item
val tag = stack.nbt ?: return
id = tag.getCompound("ExtraAttributes")?.getString("id") ?: ""
+
kill = tag.getCompound("ExtraAttributes")?.getInt("stats_book") ?: -1
championXp = tag.getCompound("ExtraAttributes")?.getDouble("champion_combat_xp") ?: -1.0
diff --git a/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt b/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt
index 9bdfa13..0476d51 100644
--- a/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt
@@ -7,6 +7,7 @@ import com.dulkirfabric.util.SoundInfo
import com.dulkirfabric.util.TrackedCooldown
import com.dulkirfabric.util.Utils
import meteordevelopment.orbit.EventHandler
+import net.minecraft.client.sound.Sound
import net.minecraft.item.ItemStack
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
import kotlin.math.round
@@ -24,9 +25,31 @@ object CooldownDisplays {
Pair(
SoundInfo("entity.firework_rocket.launch", 1f, 3f),
TrackedCooldown("SOS_FLARE".toRegex(), 20000, 0)
+ ),
+ Pair(
+ SoundInfo("block.lever.click", 2f, .55f),
+ TrackedCooldown("RAGNAROCK_AXE".toRegex(), 20000, 0)
+ ),
+ Pair(
+ SoundInfo("entity.generic.drink", 1.7936507f, 1f),
+ TrackedCooldown("HOLY_ICE".toRegex(), 4000, 0)
+ ),
+ Pair(
+ SoundInfo("entity.wolf.howl", 1.5238096f, .5f),
+ TrackedCooldown("WEIRDER_TUBA".toRegex(), 20000, 0)
+ ),
+ Pair(
+ SoundInfo("block.lava.pop", 2f, .4f),
+ TrackedCooldown("ROGUE_SWORD".toRegex(), 30000, 0)
+ ),
+ Pair(
+ SoundInfo("block.anvil.land", 0.4920635f, 1f),
+ TrackedCooldown("GIANTS_SWORD".toRegex(), 30000, 0)
)
)
+ private var lastRagTick: Long = 0
+
fun shouldDisplay(stack: ItemStack, cir: CallbackInfoReturnable<Boolean>) {
val cooldown = fetchCooldownItem(stack) ?: return
cir.returnValue = System.currentTimeMillis() - cooldown.lastUsage < cooldown.cooldownDuration
@@ -39,13 +62,21 @@ object CooldownDisplays {
@EventHandler
fun onSound(event: PlaySoundEvent) {
if (!DulkirConfig.configOptions.duraCooldown) return
- // Utils.debugSound(event)
val path = event.sound.id.path
val pitch = event.sound.pitch
val volume = event.sound.volume
// Figure out if we have a match in trackedCooldowns
val matchResult = trackedCooldowns[SoundInfo(path, pitch, volume)] ?: return
+
+ if (matchResult.itemID matches "RAGNAROCK_AXE") {
+ if (System.currentTimeMillis() - lastRagTick < 5000) {
+ lastRagTick = System.currentTimeMillis()
+ return
+ } else {
+ lastRagTick = System.currentTimeMillis()
+ }
+ }
matchResult.lastUsage = System.currentTimeMillis()
}
diff --git a/src/main/kotlin/com/dulkirfabric/features/slayer/Vampire.kt b/src/main/kotlin/com/dulkirfabric/features/slayer/Vampire.kt
new file mode 100644
index 0000000..322d58a
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/features/slayer/Vampire.kt
@@ -0,0 +1,93 @@
+package com.dulkirfabric.features.slayer
+
+import com.dulkirfabric.DulkirModFabric.mc
+import com.dulkirfabric.config.DulkirConfig
+import com.dulkirfabric.events.SlayerBossEvents
+import com.dulkirfabric.events.WorldRenderLastEvent
+import com.dulkirfabric.util.ScoreBoardUtils
+import com.dulkirfabric.util.TablistUtils
+import com.dulkirfabric.util.Utils.getInterpolatedPos
+import com.dulkirfabric.util.Utils.getSkullTexture
+import com.dulkirfabric.util.render.WorldRenderUtils
+import meteordevelopment.orbit.EventHandler
+import net.minecraft.block.entity.SkullBlockEntity
+import net.minecraft.client.texture.PlayerSkinProvider
+import net.minecraft.entity.EquipmentSlot
+import net.minecraft.entity.decoration.ArmorStandEntity
+import net.minecraft.item.Items
+import net.minecraft.nbt.NbtHelper
+import net.minecraft.util.math.Box
+import java.awt.Color
+
+object Vampire {
+
+ private const val char = "҉"
+ private const val ichorTexture =
+ "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzAzNDA5MjNhNmRlNDgyNWExNzY4MTNkMTMzNTAzZWZmMTg2ZGIwODk2ZTMyYjY3MDQ5MjhjMmEyYmY2ODQyMiJ9fX0="
+ private val box = Box(-.4, .1, -.4, .4, -1.9, .4)
+ private var inT5 = false
+ private val ichorBox = Box(- .5, 1.0, -.5, .5, 2.0, .5,)
+
+ @EventHandler
+ fun steakDisplay(event: WorldRenderLastEvent) {
+ if (!DulkirConfig.configOptions.steakDisplay) return
+ if (TablistUtils.persistentInfo.area != "The Rift") return
+
+ val ents = mc.world?.entities ?: return
+ ents.forEach {
+ if (it !is ArmorStandEntity || !it.hasCustomName()) return@forEach
+ if (!it.isMarker) return@forEach
+ if (!it.isCustomNameVisible) return@forEach
+ val name = it.customName?.string ?: return@forEach
+ if (name.contains(char) && name.contains("Bloodfiend")) {
+ val pos = it.getInterpolatedPos(mc.tickDelta)
+ WorldRenderUtils.drawWireFrame(
+ event.context,
+ box.offset(pos.x, pos.y, pos.z),
+ Color(0, 255, 255),
+ 8f
+ )
+ }
+ }
+ }
+
+ @EventHandler
+ fun ichorHighlight(event: WorldRenderLastEvent) {
+ if (!inT5) return
+ if (!DulkirConfig.configOptions.ichorHighlight) return
+ if (TablistUtils.persistentInfo.area != "The Rift") return
+
+ val ents = mc.world?.entities ?: return
+ ents.forEach {
+ if (it !is ArmorStandEntity) return@forEach
+ val itemStack = it.getEquippedStack(EquipmentSlot.HEAD) ?: return@forEach
+ val item = itemStack.item ?: return@forEach
+ if (item !== Items.PLAYER_HEAD) return@forEach
+ val textureId = getSkullTexture(itemStack) ?: return@forEach
+ if (textureId != ichorTexture) return@forEach
+ val pos = it.getInterpolatedPos(mc.tickDelta)
+ WorldRenderUtils.drawWireFrame(
+ event.context,
+ ichorBox.offset(pos.x, pos.y, pos.z),
+ Color(0, 255, 255),
+ 8f,
+ )
+ }
+ }
+
+ @EventHandler
+ fun onSlayerStart(event: SlayerBossEvents.Spawn) {
+ if (ScoreBoardUtils.slayerType == "Riftstalker Bloodfiend V")
+ inT5 = true
+ }
+
+ @EventHandler
+ fun onSlayerKill(event: SlayerBossEvents.Kill) {
+ inT5 = false
+ }
+
+ @EventHandler
+ fun onSlayerFail(event: SlayerBossEvents.Fail) {
+ inT5 = false
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/util/Utils.kt b/src/main/kotlin/com/dulkirfabric/util/Utils.kt
index c2d65c3..18a442e 100644
--- a/src/main/kotlin/com/dulkirfabric/util/Utils.kt
+++ b/src/main/kotlin/com/dulkirfabric/util/Utils.kt
@@ -4,7 +4,11 @@ import com.dulkirfabric.events.PlaySoundEvent
import com.dulkirfabric.events.SlayerBossEvents
import com.dulkirfabric.events.chat.ChatEvents
import meteordevelopment.orbit.EventHandler
+import net.minecraft.block.entity.SkullBlockEntity
+import net.minecraft.client.texture.PlayerSkinProvider
import net.minecraft.entity.Entity
+import net.minecraft.item.ItemStack
+import net.minecraft.nbt.NbtHelper
import net.minecraft.util.math.Vec3d
object Utils {
@@ -42,4 +46,9 @@ object Utils {
SlayerBossEvents.Fail(ScoreBoardUtils.slayerType ?: return ScoreBoardUtils.err()).post()
}
}
+
+ fun getSkullTexture(itemStack: ItemStack): String? {
+ return itemStack.getSubNbt(SkullBlockEntity.SKULL_OWNER_KEY)?.let(NbtHelper::toGameProfile)?.properties?.get(
+ PlayerSkinProvider.TEXTURES)?.first()?.value
+ }
} \ No newline at end of file