diff options
Diffstat (limited to 'src/main/kotlin/dulkirmod/features')
5 files changed, 149 insertions, 11 deletions
diff --git a/src/main/kotlin/dulkirmod/features/ArachneTimer.kt b/src/main/kotlin/dulkirmod/features/ArachneTimer.kt index a4cfa1a..5c97c86 100644 --- a/src/main/kotlin/dulkirmod/features/ArachneTimer.kt +++ b/src/main/kotlin/dulkirmod/features/ArachneTimer.kt @@ -57,7 +57,7 @@ class ArachneTimer { (18 - (System.currentTimeMillis() - spawnmillis) / 1000).toInt() } if (time < 0) time = 0 - WorldRenderUtils.render(Vec3(-282.5, 50.8, -178.5), "${color}${time}", false) + WorldRenderUtils.renderString(Vec3(-282.5, 50.8, -178.5), "${color}${time}", false) } } }
\ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/features/DragonTimer.kt b/src/main/kotlin/dulkirmod/features/DragonTimer.kt new file mode 100644 index 0000000..459c291 --- /dev/null +++ b/src/main/kotlin/dulkirmod/features/DragonTimer.kt @@ -0,0 +1,136 @@ +package dulkirmod.features + +import dulkirmod.DulkirMod.Companion.mc +import dulkirmod.config.Config +import dulkirmod.utils.ScoreBoardUtils +import dulkirmod.utils.WorldRenderUtils +import net.minecraft.util.BlockPos +import net.minecraft.util.Vec3 +import net.minecraft.world.World +import net.minecraftforge.client.event.RenderWorldLastEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.awt.Color +import kotlin.math.max + +class DragonTimer { + data class Dragon (val color: String, val pos: Vec3, var spawnTime: Long) + + companion object { + var dragons = arrayOf( + Dragon("orange", Vec3(84.0, 18.0, 56.0), 0), + Dragon("red", Vec3(27.0, 18.0, 56.0), 0), + Dragon("green", Vec3(26.0, 18.0, 95.0), 0), + Dragon("purple", Vec3(57.0, 18.0, 125.0), 0), + Dragon("blue", Vec3(84.0, 18.0, 95.0), 0) + ) + } + + /** + * Called from within the MixinWorld Class + */ + fun handleNewParticle(particleID: Int, xCoord: Double, yCoord: Double, zCoord: Double) { + if (particleID != 26) return + // if (!TabListUtils.isInDungeons) return + if (!Config.dragonTimer) return + //TextUtils.info("§6particle id ${particleID} 175 = $p_175720_2_") + + val particleVec = Vec3(xCoord, yCoord, zCoord) + for (d in dragons) { + if (inRangeOf(d.color, particleVec)) { + if (System.currentTimeMillis() - d.spawnTime > 10000) { + d.spawnTime = System.currentTimeMillis() + } + } + } + } + + @SubscribeEvent + fun onRenderWorld(event: RenderWorldLastEvent) { + val curTime: Long = System.currentTimeMillis() + // for some reason this really doesn't like the syntax for (d in dragons) + for (i in 0..4) { + // d.spawnTime + 5000 is when dragon actually spawn + val d = dragons[i] + if (d.spawnTime + 5000 > curTime) { + if (isDead(d.color)) + return + val timeUntilSpawn: Float = ((d.spawnTime + 5000 - curTime).toFloat() / 1000f) + val color = when { + timeUntilSpawn <= 1 -> "§c" + timeUntilSpawn <= 3 -> "§e" + else -> "§a" + } + val playerVec = mc.thePlayer.positionVector + val scale = max(1f, playerVec.distanceTo(d.pos).toFloat()/5f) + WorldRenderUtils.renderString(d.pos, "${color}${String.format("%.2f", timeUntilSpawn)}", + false, scale, true) + } + } + } + + /** + * true = dead + */ + private fun isDead(color:String): Boolean { + val world: World = mc.theWorld + val pos = when (color) { + "orange" -> BlockPos(90, 21, 56) + "red" -> BlockPos(20,22,59) + "green" -> BlockPos(22,21,94) + "purple" -> BlockPos(56,20,130) + "blue" -> BlockPos(89,21,94) + else -> BlockPos(0,0,0) + } + return world.isAirBlock(pos) + } + private fun inRangeOf(color: String, pos: Vec3): Boolean { + when (color) { + "orange" -> { + return (pos.xCoord.toInt() in 82..88 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 53..59) + } + "red" -> { + return (pos.xCoord.toInt() in 24..30 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 56..62) + } + "green" -> { + return (pos.xCoord.toInt() in 23..29 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 91..97) + } + "purple" -> { + return (pos.xCoord.toInt() in 53..59 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 122..128) + } + "blue" -> { + return (pos.xCoord.toInt() in 82..88 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 91..97) + } + else -> { + return false + } + } + } + + @SubscribeEvent + fun dragonBoxes(event: RenderWorldLastEvent) { + if (!Config.dragonKillBox) return + if (!ScoreBoardUtils.isInM7) return + if (mc.thePlayer.positionVector.yCoord > 45) return + // Blue + WorldRenderUtils.drawCustomBox(71.5, 25.0, 16.0, 10.0, 82.5, 25.0, Color(0, 170, 170, 255), 3f, phase = false) + // Purple + WorldRenderUtils.drawCustomBox(45.5, 23.0, 13.0, 10.0, 113.5, 23.0, Color(170, 0, 170, 255), 3f, phase = false) + // Green + WorldRenderUtils.drawCustomBox(7.0, 30.0, 8.0, 20.0, 80.0, 30.0, Color(85, 255, 85, 255), 3f, phase = false) + // Red + WorldRenderUtils.drawCustomBox(14.5, 25.0, 13.0, 15.0, 45.5, 25.0, Color(255, 85, 85, 255), 3f, phase = false) + // Orange + WorldRenderUtils.drawCustomBox(72.0, 30.0, 8.0, 20.0, 47.0, 30.0, Color(255, 170, 0, 255), 3f, phase = false) + } +} + diff --git a/src/main/kotlin/dulkirmod/features/ItemAnimations.kt b/src/main/kotlin/dulkirmod/features/ItemAnimations.kt index 7e9b85d..8fa55f2 100644 --- a/src/main/kotlin/dulkirmod/features/ItemAnimations.kt +++ b/src/main/kotlin/dulkirmod/features/ItemAnimations.kt @@ -19,6 +19,7 @@ import kotlin.math.pow * @author Aton - THANK YOU */ object ItemAnimations { + /** * Directly referenced hook for the itemTransform Inject in the ItemRenderer Mixin. * Takes care of scaling and positioning the held item. @@ -111,4 +112,5 @@ object ItemAnimations { GlStateManager.translate(-newX, -newY, -newZ) return true } + }
\ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt b/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt index bb053a3..6e47a59 100644 --- a/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt +++ b/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt @@ -38,15 +38,15 @@ class KeeperWaypoints { val scale9 = max(1f, playerVec.distanceTo(vec9).toFloat()/10f) val color = Utils.getColorString(Config.bestiaryNotifColor) - WorldRenderUtils.render(vec1, "${color}1", false, scale1, true) - WorldRenderUtils.render(vec2, "${color}2", false, scale2, true) - WorldRenderUtils.render(vec3, "${color}3", false, scale3, true) - WorldRenderUtils.render(vec4, "${color}4", false, scale4, true) - WorldRenderUtils.render(vec5, "${color}5", false, scale5, true) - WorldRenderUtils.render(vec6, "${color}6", false, scale6, true) - WorldRenderUtils.render(vec7, "${color}7", false, scale7, true) - WorldRenderUtils.render(vec8, "${color}8", false, scale8, true) - WorldRenderUtils.render(vec9, "${color}9", false, scale9, true) + WorldRenderUtils.renderString(vec1, "${color}1", false, scale1, true) + WorldRenderUtils.renderString(vec2, "${color}2", false, scale2, true) + WorldRenderUtils.renderString(vec3, "${color}3", false, scale3, true) + WorldRenderUtils.renderString(vec4, "${color}4", false, scale4, true) + WorldRenderUtils.renderString(vec5, "${color}5", false, scale5, true) + WorldRenderUtils.renderString(vec6, "${color}6", false, scale6, true) + WorldRenderUtils.renderString(vec7, "${color}7", false, scale7, true) + WorldRenderUtils.renderString(vec8, "${color}8", false, scale8, true) + WorldRenderUtils.renderString(vec9, "${color}9", false, scale9, true) } } diff --git a/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt b/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt index e1b618f..8e4d2dd 100644 --- a/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt +++ b/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt @@ -4,7 +4,7 @@ import dulkirmod.utils.TextUtils import net.minecraftforge.client.event.ClientChatReceivedEvent object FakeMsg { - private val dulkirRegex = "From \\[MVP(\\+|\\+\\+)] Dulkir: c:".toRegex() + private val dulkirRegex = "^From \\[MVP(\\+|\\+\\+)] Dulkir: c:".toRegex() fun handle(event: ClientChatReceivedEvent, unformatted: String) { if (dulkirRegex.matches(unformatted)) { event.isCanceled = true |