diff options
| author | Appability <appable@icloud.com> | 2022-10-13 18:58:00 -0700 |
|---|---|---|
| committer | Appability <appable@icloud.com> | 2022-10-13 18:58:00 -0700 |
| commit | d0cbc11018c8126575117aaeb2b861957386fa9a (patch) | |
| tree | c5419fb1f00b147604bded231c1388d6b391d27e /src/main/kotlin/com/ambientaddons/utils | |
| parent | c599ee0d78ed8bc17488636f2d9b9b1d5b6dd4a8 (diff) | |
| download | AmbientAddons-d0cbc11018c8126575117aaeb2b861957386fa9a.tar.gz AmbientAddons-d0cbc11018c8126575117aaeb2b861957386fa9a.tar.bz2 AmbientAddons-d0cbc11018c8126575117aaeb2b861957386fa9a.zip | |
steal a bunch of code from sbc! +melodyhelper, kuudra ready, wither shield overlay
Diffstat (limited to 'src/main/kotlin/com/ambientaddons/utils')
| -rw-r--r-- | src/main/kotlin/com/ambientaddons/utils/Alignment.kt | 5 | ||||
| -rw-r--r-- | src/main/kotlin/com/ambientaddons/utils/Area.kt | 6 | ||||
| -rw-r--r-- | src/main/kotlin/com/ambientaddons/utils/SkyBlock.kt | 8 | ||||
| -rw-r--r-- | src/main/kotlin/com/ambientaddons/utils/dungeon/DungeonPlayers.kt | 2 | ||||
| -rw-r--r-- | src/main/kotlin/com/ambientaddons/utils/dungeon/TextStyle.kt | 14 | ||||
| -rw-r--r-- | src/main/kotlin/com/ambientaddons/utils/render/EntityUtils.kt | 195 | ||||
| -rw-r--r-- | src/main/kotlin/com/ambientaddons/utils/render/OverlayUtils.kt (renamed from src/main/kotlin/com/ambientaddons/utils/RenderUtils.kt) | 38 |
7 files changed, 259 insertions, 9 deletions
diff --git a/src/main/kotlin/com/ambientaddons/utils/Alignment.kt b/src/main/kotlin/com/ambientaddons/utils/Alignment.kt new file mode 100644 index 0000000..2b83309 --- /dev/null +++ b/src/main/kotlin/com/ambientaddons/utils/Alignment.kt @@ -0,0 +1,5 @@ +package com.ambientaddons.utils + +enum class Alignment { + Left, Center, Right +}
\ No newline at end of file diff --git a/src/main/kotlin/com/ambientaddons/utils/Area.kt b/src/main/kotlin/com/ambientaddons/utils/Area.kt index 8366a05..86065a3 100644 --- a/src/main/kotlin/com/ambientaddons/utils/Area.kt +++ b/src/main/kotlin/com/ambientaddons/utils/Area.kt @@ -12,10 +12,11 @@ enum class Area { CrimsonIsle, End, Park, - FarmingIslands; + FarmingIslands, + Kuudra; companion object { - fun fromString(str: String?): Area? = when (str?.lowercase()) { + fun fromString(str: String?): Area? = when (str) { "Crimson Isle" -> CrimsonIsle "Catacombs" -> Dungeon "Private Island" -> PrivateIsland @@ -28,6 +29,7 @@ enum class Area { "The Park" -> Park "The End" -> End "The Farming Islands" -> FarmingIslands + "Instanced" -> Kuudra else -> null } } diff --git a/src/main/kotlin/com/ambientaddons/utils/SkyBlock.kt b/src/main/kotlin/com/ambientaddons/utils/SkyBlock.kt index cb108ee..a6bbd57 100644 --- a/src/main/kotlin/com/ambientaddons/utils/SkyBlock.kt +++ b/src/main/kotlin/com/ambientaddons/utils/SkyBlock.kt @@ -6,6 +6,7 @@ import com.ambientaddons.utils.Extensions.cleanSB import com.ambientaddons.utils.Extensions.stripControlCodes import com.ambientaddons.utils.Extensions.substringBetween import com.ambientaddons.utils.TabListUtils.fetchTabEntries +import gg.essential.universal.UChat import net.minecraft.scoreboard.Score import net.minecraft.scoreboard.ScorePlayerTeam import net.minecraftforge.event.world.WorldEvent @@ -18,6 +19,7 @@ object SkyBlock { var onHypixel = false var inSkyblock = false var area: Area? = null + private var areaString: String? = null var dungeonFloor: DungeonFloor? = null var ticks = 0 @@ -64,12 +66,12 @@ object SkyBlock { inSkyblock = title?.contains("SKYBLOCK") == true } if (inSkyblock) { - if (area == null) { + if (areaString == null) { val tab = fetchTabEntries() - val locationString = tab.firstNotNullOfOrNull { areaRegex.find(it.text.stripControlCodes()) }?.let { + val areaString = tab.firstNotNullOfOrNull { areaRegex.find(it.text.stripControlCodes()) }?.let { it.groupValues.getOrNull(1) } - area = Area.fromString(locationString) + area = Area.fromString(areaString) } if (area == Area.Dungeon && dungeonFloor == null) { val dungeonLine = fetchScoreboardLines().find { diff --git a/src/main/kotlin/com/ambientaddons/utils/dungeon/DungeonPlayers.kt b/src/main/kotlin/com/ambientaddons/utils/dungeon/DungeonPlayers.kt index ba21a04..e57443d 100644 --- a/src/main/kotlin/com/ambientaddons/utils/dungeon/DungeonPlayers.kt +++ b/src/main/kotlin/com/ambientaddons/utils/dungeon/DungeonPlayers.kt @@ -21,7 +21,7 @@ object DungeonPlayers { val rawPlayers = TabListUtils.fetchTabEntries().let { tabEntries -> playerSlots.map { tabEntries[it].text.stripControlCodes() } } - playerCount = rawPlayers.size + playerCount = rawPlayers.filter { it.isNotBlank() }.size } ticks++ } diff --git a/src/main/kotlin/com/ambientaddons/utils/dungeon/TextStyle.kt b/src/main/kotlin/com/ambientaddons/utils/dungeon/TextStyle.kt new file mode 100644 index 0000000..b1a5dce --- /dev/null +++ b/src/main/kotlin/com/ambientaddons/utils/dungeon/TextStyle.kt @@ -0,0 +1,14 @@ +package com.ambientaddons.utils.dungeon + +enum class TextStyle { + Default, Shadow, Outline; + + companion object { + fun fromInt(number: Int): TextStyle? = when (number) { + 0 -> Default + 1 -> Shadow + 2 -> Outline + else -> null + } + } +}
\ No newline at end of file diff --git a/src/main/kotlin/com/ambientaddons/utils/render/EntityUtils.kt b/src/main/kotlin/com/ambientaddons/utils/render/EntityUtils.kt new file mode 100644 index 0000000..b3abbcf --- /dev/null +++ b/src/main/kotlin/com/ambientaddons/utils/render/EntityUtils.kt @@ -0,0 +1,195 @@ +package com.ambientaddons.utils.render + +import AmbientAddons.Companion.mc +import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.vertex.DefaultVertexFormats +import net.minecraft.entity.Entity +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.BlockPos +import org.lwjgl.opengl.GL11.* +import java.awt.Color + +// diretly stolen from Harry282/Skyblock-Client +object EntityUtils { + private fun drawFilledAABB(aabb: AxisAlignedBB, color: Color, alpha: Float = 0.5f) { + val tessellator = Tessellator.getInstance() + val worldRenderer = tessellator.worldRenderer + glColor4f(color.red / 255f, color.green / 255f, color.blue / 255f, alpha) + + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + tessellator.draw() + } + + private fun drawOutlinedAABB(aabb: AxisAlignedBB, color: Color, alpha: Float = 1.0f) { + val tessellator = Tessellator.getInstance() + val worldRenderer = tessellator.worldRenderer + glColor4f(color.red / 255f, color.green / 255f, color.blue / 255f, alpha) + + worldRenderer.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION) + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + + tessellator.draw() + } + + fun drawBlockBox(blockPos: BlockPos, color: Color, outline: Boolean, fill: Boolean, partialTicks: Float) { + if (!outline && !fill) return + val renderManager = mc.renderManager + val x = blockPos.x - renderManager.viewerPosX + val y = blockPos.y - renderManager.viewerPosY + val z = blockPos.z - renderManager.viewerPosZ + + var axisAlignedBB = AxisAlignedBB(x, y, z, x + 1.0, y + 1.0, z + 1.0) + val block = mc.theWorld.getBlockState(blockPos).block + if (block != null) { + val player: EntityPlayer = mc.thePlayer + val posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks + val posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks + val posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks + block.setBlockBoundsBasedOnState(mc.theWorld, blockPos) + axisAlignedBB = block.getSelectedBoundingBox(mc.theWorld, blockPos) + .expand(0.0020000000949949026, 0.0020000000949949026, 0.0020000000949949026) + .offset(-posX, -posY, -posZ) + } + + glPushMatrix() + glPushAttrib(GL_ALL_ATTRIB_BITS) + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + glDisable(GL_TEXTURE_2D) + glDisable(GL_DEPTH_TEST) + glDisable(GL_LIGHTING) + glDepthMask(false) + + if (outline) { + glLineWidth(1.5f) + drawOutlinedAABB(axisAlignedBB, color) + } + if (fill) { + drawFilledAABB(axisAlignedBB, color) + } + + glDepthMask(true) + glPopAttrib() + glPopMatrix() + } + + fun drawEntityBox(entity: Entity, color: Color, outline: Boolean, fill: Boolean, esp: Boolean, partialTicks: Float) { + if (!outline && !fill) return + val renderManager = mc.renderManager + val x = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * partialTicks - renderManager.viewerPosX + val y = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * partialTicks - renderManager.viewerPosY + val z = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * partialTicks - renderManager.viewerPosZ + + var axisAlignedBB: AxisAlignedBB + entity.entityBoundingBox.run { + axisAlignedBB = AxisAlignedBB( + minX - entity.posX, + minY - entity.posY, + minZ - entity.posZ, + maxX - entity.posX, + maxY - entity.posY, + maxZ - entity.posZ + ).offset(x, y, z) + } + + glPushMatrix() + glPushAttrib(GL_ALL_ATTRIB_BITS) + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + glEnable(GL_BLEND) + glEnable(GL_LINE_SMOOTH) + glDisable(GL_TEXTURE_2D) + if (esp) { + glDisable(GL_DEPTH_TEST) + } + glDisable(GL_LIGHTING) + glDepthMask(false) + + if (outline) { + glLineWidth(2.0f) + drawOutlinedAABB(axisAlignedBB, color) + } + if (fill) { + drawFilledAABB(axisAlignedBB, color) + } + + if (esp) { + glEnable(GL_DEPTH_TEST) + } + + glDepthMask(true) + glPopAttrib() + glPopMatrix() + } +}
\ No newline at end of file diff --git a/src/main/kotlin/com/ambientaddons/utils/RenderUtils.kt b/src/main/kotlin/com/ambientaddons/utils/render/OverlayUtils.kt index f10a711..69f3c99 100644 --- a/src/main/kotlin/com/ambientaddons/utils/RenderUtils.kt +++ b/src/main/kotlin/com/ambientaddons/utils/render/OverlayUtils.kt @@ -1,12 +1,17 @@ -package com.ambientaddons.utils +package com.ambientaddons.utils.render +import AmbientAddons.Companion.mc +import com.ambientaddons.utils.Alignment +import com.ambientaddons.utils.dungeon.TextStyle import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.Tessellator import net.minecraft.client.renderer.WorldRenderer import net.minecraft.client.renderer.vertex.DefaultVertexFormats import kotlin.math.roundToInt -object RenderUtils { +object OverlayUtils { + + private val removeColorCodesRegex = Regex("§[0-9a-f]") // from Mojang fun renderDurabilityBar(x: Int, y: Int, percentFilled: Double) { @@ -30,7 +35,9 @@ object RenderUtils { GlStateManager.enableDepth() } - private fun draw(renderer: WorldRenderer, x: Int, y: Int, width: Int, height: Int, red: Int, green: Int, blue: Int, alpha: Int) { + private fun draw( + renderer: WorldRenderer, x: Int, y: Int, width: Int, height: Int, red: Int, green: Int, blue: Int, alpha: Int + ) { renderer.begin(7, DefaultVertexFormats.POSITION_COLOR) renderer.pos((x + 0).toDouble(), (y + 0).toDouble(), 0.0).color(red, green, blue, alpha).endVertex() renderer.pos((x + 0).toDouble(), (y + height).toDouble(), 0.0).color(red, green, blue, alpha).endVertex() @@ -39,4 +46,29 @@ object RenderUtils { Tessellator.getInstance().draw() } + fun drawString(x: Int, y: Int, str: String, textStyle: TextStyle, alignment: Alignment) { + val text = "§r$str" + val startX = when (alignment) { + Alignment.Left -> x + Alignment.Center -> x - mc.fontRendererObj.getStringWidth(str) / 2 + Alignment.Right -> x - mc.fontRendererObj.getStringWidth(str) + } + when (textStyle) { + TextStyle.Default -> mc.fontRendererObj.drawString( + text, startX.toFloat(), y.toFloat(), -1, false + ) + TextStyle.Shadow -> mc.fontRendererObj.drawString( + text, startX.toFloat(), y.toFloat(), -1, true + ) + TextStyle.Outline -> { + val rawString = text.replace(removeColorCodesRegex, "") + mc.fontRendererObj.drawString(rawString, startX - 1, y, -16777216) + mc.fontRendererObj.drawString(rawString, startX + 1, y, -16777216) + mc.fontRendererObj.drawString(rawString, startX, y - 1, -16777216) + mc.fontRendererObj.drawString(rawString, startX, y + 1, -16777216) + mc.fontRendererObj.drawString(text, startX, y, -1) + } + } + } + }
\ No newline at end of file |
