forked from RepoMirrors/kami-blue
139 lines
5.8 KiB
Kotlin
139 lines
5.8 KiB
Kotlin
package me.zeroeightsix.kami.module.modules.render
|
|
|
|
import me.zeroeightsix.kami.KamiMod
|
|
import me.zeroeightsix.kami.event.events.RenderEvent
|
|
import me.zeroeightsix.kami.module.Module
|
|
import me.zeroeightsix.kami.module.modules.combat.CrystalAura
|
|
import me.zeroeightsix.kami.setting.Settings
|
|
import me.zeroeightsix.kami.util.GeometryMasks
|
|
import me.zeroeightsix.kami.util.KamiTessellator
|
|
import net.minecraft.init.Blocks
|
|
import net.minecraft.util.math.BlockPos
|
|
import org.lwjgl.opengl.GL11
|
|
import java.awt.Color
|
|
import java.util.concurrent.ConcurrentHashMap
|
|
import kotlin.math.ceil
|
|
|
|
/**
|
|
* Created 16 November 2019 by hub
|
|
* Updated by dominikaaaa on 15/12/19
|
|
*/
|
|
@Module.Info(
|
|
name = "HoleESP",
|
|
category = Module.Category.RENDER,
|
|
description = "Show safe holes for crystal pvp"
|
|
)
|
|
class HoleESP : Module() {
|
|
private val surroundOffset = arrayOf(
|
|
BlockPos(0, -1, 0), // down
|
|
BlockPos(0, 0, -1), // north
|
|
BlockPos(1, 0, 0), // east
|
|
BlockPos(0, 0, 1), // south
|
|
BlockPos(-1, 0, 0) // west
|
|
)
|
|
private val renderDistance = register(Settings.d("Render Distance", 8.0))
|
|
private val a0 = register(Settings.integerBuilder("Transparency").withMinimum(0).withValue(32).withMaximum(255).build())
|
|
private val r1 = register(Settings.integerBuilder("Red (Obby)").withMinimum(0).withValue(208).withMaximum(255).withVisibility { v: Int? -> obbySettings() }.build())
|
|
private val g1 = register(Settings.integerBuilder("Green (Obby)").withMinimum(0).withValue(144).withMaximum(255).withVisibility { v: Int? -> obbySettings() }.build())
|
|
private val b1 = register(Settings.integerBuilder("Blue (Obby)").withMinimum(0).withValue(255).withMaximum(255).withVisibility { v: Int? -> obbySettings() }.build())
|
|
private val r2 = register(Settings.integerBuilder("Red (Bedrock)").withMinimum(0).withValue(144).withMaximum(255).withVisibility { v: Int? -> bedrockSettings() }.build())
|
|
private val g2 = register(Settings.integerBuilder("Green (Bedrock)").withMinimum(0).withValue(144).withMaximum(255).withVisibility { v: Int? -> bedrockSettings() }.build())
|
|
private val b2 = register(Settings.integerBuilder("Blue (Bedrock)").withMinimum(0).withValue(255).withMaximum(255).withVisibility { v: Int? -> bedrockSettings() }.build())
|
|
private val renderModeSetting = register(Settings.e<RenderMode>("Render Mode", RenderMode.BLOCK))
|
|
private val renderBlocksSetting = register(Settings.e<RenderBlocks>("Render", RenderBlocks.BOTH))
|
|
private var safeHoles: ConcurrentHashMap<BlockPos, Boolean>? = null
|
|
|
|
private enum class RenderMode {
|
|
DOWN, BLOCK
|
|
}
|
|
|
|
private enum class RenderBlocks {
|
|
OBBY, BEDROCK, BOTH
|
|
}
|
|
|
|
private fun obbySettings(): Boolean {
|
|
return renderBlocksSetting.value == RenderBlocks.OBBY || renderBlocksSetting.value == RenderBlocks.BOTH
|
|
}
|
|
|
|
private fun bedrockSettings(): Boolean {
|
|
return renderBlocksSetting.value == RenderBlocks.BEDROCK || renderBlocksSetting.value == RenderBlocks.BOTH
|
|
}
|
|
|
|
override fun onUpdate() {
|
|
if (safeHoles == null) {
|
|
safeHoles = ConcurrentHashMap()
|
|
} else {
|
|
safeHoles!!.clear()
|
|
}
|
|
val range = ceil(renderDistance.value).toInt()
|
|
val crystalAura = KamiMod.MODULE_MANAGER.getModuleT(CrystalAura::class.java)
|
|
val blockPosList = crystalAura.getSphere(CrystalAura.getPlayerPos(), range.toFloat(), range, false, true, 0)
|
|
for (pos in blockPosList) {
|
|
|
|
// block gotta be air
|
|
if (mc.world.getBlockState(pos).block != Blocks.AIR) {
|
|
continue
|
|
}
|
|
|
|
// block 1 above gotta be air
|
|
if (mc.world.getBlockState(pos.add(0, 1, 0)).block != Blocks.AIR) {
|
|
continue
|
|
}
|
|
|
|
// block 2 above gotta be air
|
|
if (mc.world.getBlockState(pos.add(0, 2, 0)).block != Blocks.AIR) {
|
|
continue
|
|
}
|
|
var isSafe = true
|
|
var isBedrock = true
|
|
for (offset in surroundOffset) {
|
|
val block = mc.world.getBlockState(pos.add(offset)).block
|
|
if (block !== Blocks.BEDROCK) {
|
|
isBedrock = false
|
|
}
|
|
if (block !== Blocks.BEDROCK && block !== Blocks.OBSIDIAN && block !== Blocks.ENDER_CHEST && block !== Blocks.ANVIL) {
|
|
isSafe = false
|
|
break
|
|
}
|
|
}
|
|
if (isSafe) {
|
|
safeHoles!![pos] = isBedrock
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onWorldRender(event: RenderEvent) {
|
|
if (mc.player == null || safeHoles == null) {
|
|
return
|
|
}
|
|
if (safeHoles!!.isEmpty()) {
|
|
return
|
|
}
|
|
KamiTessellator.prepare(GL11.GL_QUADS)
|
|
safeHoles!!.forEach { (blockPos: BlockPos, isBedrock: Boolean) ->
|
|
when (renderBlocksSetting.value) {
|
|
RenderBlocks.BOTH -> if (isBedrock) {
|
|
drawBox(blockPos, r2.value, g2.value, b2.value)
|
|
} else {
|
|
drawBox(blockPos, r1.value, g1.value, b1.value)
|
|
}
|
|
RenderBlocks.OBBY -> if (!isBedrock) {
|
|
drawBox(blockPos, r1.value, g1.value, b1.value)
|
|
}
|
|
RenderBlocks.BEDROCK -> if (isBedrock) {
|
|
drawBox(blockPos, r2.value, g2.value, b2.value)
|
|
}
|
|
}
|
|
}
|
|
KamiTessellator.release()
|
|
}
|
|
|
|
private fun drawBox(blockPos: BlockPos, r: Int, g: Int, b: Int) {
|
|
val color = Color(r, g, b, a0.value)
|
|
if (renderModeSetting.value == RenderMode.DOWN) {
|
|
KamiTessellator.drawBox(blockPos, color.rgb, GeometryMasks.Quad.DOWN)
|
|
} else if (renderModeSetting.value == RenderMode.BLOCK) {
|
|
KamiTessellator.drawBox(blockPos, color.rgb, GeometryMasks.Quad.ALL)
|
|
}
|
|
}
|
|
} |