aboutsummaryrefslogtreecommitdiff
path: root/ingame/src/main/kotlin/moe/nea89
diff options
context:
space:
mode:
authornea <romangraef@gmail.com>2022-04-20 17:49:59 +0200
committernea <romangraef@gmail.com>2022-04-20 17:49:59 +0200
commitd9296584270f1e902944fc7390d0b43c34aa2dbb (patch)
tree09d04658c94cdaf7a4fb4fc9e8a81d111edab959 /ingame/src/main/kotlin/moe/nea89
parenta61b3f9e2b8b2eeb9d556b5f477d2a479b9f7643 (diff)
downloadsbdata-d9296584270f1e902944fc7390d0b43c34aa2dbb.tar.gz
sbdata-d9296584270f1e902944fc7390d0b43c34aa2dbb.tar.bz2
sbdata-d9296584270f1e902944fc7390d0b43c34aa2dbb.zip
literal tos violations
Diffstat (limited to 'ingame/src/main/kotlin/moe/nea89')
-rw-r--r--ingame/src/main/kotlin/moe/nea89/sbdata/SBData.kt2
-rw-r--r--ingame/src/main/kotlin/moe/nea89/sbdata/dungeon/DungeonMapCoordinates.kt29
-rw-r--r--ingame/src/main/kotlin/moe/nea89/sbdata/souls/SoulESP.kt122
-rw-r--r--ingame/src/main/kotlin/moe/nea89/sbdata/utils/base64.kt8
4 files changed, 161 insertions, 0 deletions
diff --git a/ingame/src/main/kotlin/moe/nea89/sbdata/SBData.kt b/ingame/src/main/kotlin/moe/nea89/sbdata/SBData.kt
index 979e26d..fd839d6 100644
--- a/ingame/src/main/kotlin/moe/nea89/sbdata/SBData.kt
+++ b/ingame/src/main/kotlin/moe/nea89/sbdata/SBData.kt
@@ -1,6 +1,7 @@
package moe.nea89.sbdata
import moe.nea89.sbdata.dungeon.DungeonMapCoordinates
+import moe.nea89.sbdata.souls.SoulESP
import net.minecraftforge.client.ClientCommandHandler
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.fml.common.Mod
@@ -34,6 +35,7 @@ class SBData {
@Mod.EventHandler
fun init(event: FMLInitializationEvent) {
MinecraftForge.EVENT_BUS.register(DungeonMapCoordinates)
+ MinecraftForge.EVENT_BUS.register(SoulESP)
}
@Mod.EventHandler
diff --git a/ingame/src/main/kotlin/moe/nea89/sbdata/dungeon/DungeonMapCoordinates.kt b/ingame/src/main/kotlin/moe/nea89/sbdata/dungeon/DungeonMapCoordinates.kt
index 02df59c..4fe9a8a 100644
--- a/ingame/src/main/kotlin/moe/nea89/sbdata/dungeon/DungeonMapCoordinates.kt
+++ b/ingame/src/main/kotlin/moe/nea89/sbdata/dungeon/DungeonMapCoordinates.kt
@@ -14,6 +14,8 @@ import java.awt.datatransfer.StringSelection
object DungeonMapCoordinates {
+ var logMarkers = false
+
init {
Commands.addSubCommand("map") {
when (args.firstOrNull()) {
@@ -34,6 +36,25 @@ object DungeonMapCoordinates {
}
}
}
+ "logmarkers" -> {
+ if (args.size == 2) {
+ when (args[1]) {
+ "on" -> {
+ logMarkers = true
+ reply("Turned on marker order logging")
+ }
+ "off" -> {
+ logMarkers = false
+ reply("Turned off marker order logging")
+ }
+ else -> {
+ reply("logmarkers <on/off>")
+ }
+ }
+ } else {
+ reply("Marker order logging is ${if (logMarkers) "on" else "off"}.")
+ }
+ }
"load" -> {
val base = SBData.configDirectory.resolve("mapdata")
base.mkdirs()
@@ -89,8 +110,16 @@ object DungeonMapCoordinates {
.firstNotNullOfOrNull { FLOOR_REGEX.find(it) }
?.let { it.groupValues[1] } ?: return
logPosition(player, playerMarker, floor)
+ if (logMarkers) {
+ println("-----------")
+ mapData.mapDecorations.entries.sortedBy { it.key }.forEach { (key, value) ->
+ println(" $key -> ${value.func_176112_b().toInt() / 2 + 64} ${value.func_176113_c().toInt() / 2 + 64}")
+ }
+ println("-----------")
+ }
}
+
fun logPosition(player: EntityPlayerSP, playerMarker: Vec4b, floor: String) {
val coordList = coords.computeIfAbsent(floor) { hashSetOf() }
val coordEntry = Coordinates(
diff --git a/ingame/src/main/kotlin/moe/nea89/sbdata/souls/SoulESP.kt b/ingame/src/main/kotlin/moe/nea89/sbdata/souls/SoulESP.kt
new file mode 100644
index 0000000..dd7cad8
--- /dev/null
+++ b/ingame/src/main/kotlin/moe/nea89/sbdata/souls/SoulESP.kt
@@ -0,0 +1,122 @@
+package moe.nea89.sbdata.souls
+
+import com.google.gson.Gson
+import com.google.gson.JsonObject
+import moe.nea89.sbdata.Commands
+import moe.nea89.sbdata.utils.base64decode
+import moe.nea89.sbdata.utils.interpolate
+import net.minecraft.client.Minecraft
+import net.minecraft.client.renderer.GlStateManager
+import net.minecraft.client.renderer.Tessellator
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats
+import net.minecraft.entity.item.EntityArmorStand
+import net.minecraft.init.Items
+import net.minecraft.util.BlockPos
+import net.minecraft.util.EnumFacing
+import net.minecraft.util.Vec3
+import net.minecraftforge.client.event.RenderWorldLastEvent
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import net.minecraftforge.fml.common.gameevent.TickEvent
+import org.lwjgl.opengl.GL11
+
+object SoulESP {
+ var showESP = false
+
+ init {
+ Commands.addSubCommand("soulesp") {
+ when (args.firstOrNull()) {
+ "on" -> {
+ showESP = true
+ reply("Turned soul ESP on.")
+ }
+ "off" -> {
+ showESP = false
+ reply("Turned soul ESP off.")
+ }
+ null -> {
+ reply("Use /soulesp <on/off/size <range>>")
+ }
+ }
+ }
+ }
+
+ val soulLocations = mutableSetOf<BlockPos>()
+
+ @SubscribeEvent
+ fun onWorldChange(ev: WorldEvent.Load) {
+ soulLocations.clear()
+ }
+
+ val fairySoulTexture =
+ "http://textures.minecraft.net/texture/b96923ad247310007f6ae5d326d847ad53864cf16c3565a181dc8e6b20be2387"
+
+ @SubscribeEvent
+ fun onTick(ev: TickEvent.PlayerTickEvent) {
+ if (ev.phase != TickEvent.Phase.END) return
+ if (!showESP) return
+
+ val player = ev.player
+ player.worldObj.getEntities(EntityArmorStand::class.java) {
+ if (it == null) return@getEntities false
+ val helm = it.getEquipmentInSlot(4)
+ if (helm == null || helm.item != Items.skull) return@getEntities false
+ val skindata = helm
+ .getSubCompound("SkullOwner", true)
+ .getCompoundTag("Properties")
+ .getTagList("textures", 10)
+ .getCompoundTagAt(0)
+ .getString("Value")
+ .base64decode()
+ if (skindata.isEmpty()) return@getEntities false
+ try {
+ val skinJson = Gson().fromJson(skindata.decodeToString(), JsonObject::class.java)
+ return@getEntities skinJson.getAsJsonObject("textures").getAsJsonObject("SKIN").get("url").asString == fairySoulTexture
+ } catch (ex: Exception) {
+ }
+ return@getEntities false
+ }.map {
+ soulLocations.add(it.position.offset(EnumFacing.UP, 1))
+ }
+ }
+
+ @SubscribeEvent
+ fun onRender(ev: RenderWorldLastEvent) {
+ if (!showESP) return
+ val thePlayer = Minecraft.getMinecraft().renderViewEntity
+ GlStateManager.disableCull()
+ GlStateManager.disableDepth()
+ GlStateManager.disableTexture2D()
+ val tesselator = Tessellator.getInstance()
+ val worldrenderer = tesselator.worldRenderer
+ GlStateManager.color(1.0F, 0.0F, 1.0F, 1.0F)
+ soulLocations.forEach { soul ->
+ val part = ev.partialTicks.toDouble()
+ val x = soul.x - part.interpolate(thePlayer.lastTickPosX, thePlayer.posX)
+ val y = soul.y - part.interpolate(thePlayer.lastTickPosY, thePlayer.posY)
+ val z = soul.z - part.interpolate(thePlayer.lastTickPosZ, thePlayer.posZ)
+
+ worldrenderer.begin(GL11.GL_TRIANGLE_STRIP, DefaultVertexFormats.POSITION)
+ worldrenderer.pos(x + 1, y + 1, z).endVertex()
+ worldrenderer.pos(x, y + 1, z).endVertex()
+ worldrenderer.pos(x + 1, y, z).endVertex()
+ worldrenderer.pos(x, y, z).endVertex()
+ worldrenderer.pos(x, y, z + 1).endVertex()
+ worldrenderer.pos(x, y + 1, z).endVertex()
+ worldrenderer.pos(x, y + 1, z + 1).endVertex()
+ worldrenderer.pos(x + 1, y + 1, z).endVertex()
+ worldrenderer.pos(x + 1, y + 1, z + 1).endVertex()
+ worldrenderer.pos(x + 1, y, z).endVertex()
+ worldrenderer.pos(x + 1, y, z + 1).endVertex()
+ worldrenderer.pos(x, y, z + 1).endVertex()
+ worldrenderer.pos(x + 1, y + 1, z + 1).endVertex()
+ worldrenderer.pos(x, y + 1, z + 1).endVertex()
+ tesselator.draw()
+ }
+ GlStateManager.enableCull()
+ GlStateManager.enableDepth()
+ GlStateManager.enableTexture2D()
+
+ }
+
+}
diff --git a/ingame/src/main/kotlin/moe/nea89/sbdata/utils/base64.kt b/ingame/src/main/kotlin/moe/nea89/sbdata/utils/base64.kt
new file mode 100644
index 0000000..4e95335
--- /dev/null
+++ b/ingame/src/main/kotlin/moe/nea89/sbdata/utils/base64.kt
@@ -0,0 +1,8 @@
+package moe.nea89.sbdata.utils
+
+import java.util.*
+
+
+fun String.base64decode() = Base64.getDecoder().decode(this)
+
+fun Double.interpolate(left: Double, right: Double): Double = left * (1 - this) + right * this