diff options
author | nea <romangraef@gmail.com> | 2022-04-20 17:49:59 +0200 |
---|---|---|
committer | nea <romangraef@gmail.com> | 2022-04-20 17:49:59 +0200 |
commit | d9296584270f1e902944fc7390d0b43c34aa2dbb (patch) | |
tree | 09d04658c94cdaf7a4fb4fc9e8a81d111edab959 /ingame/src/main/kotlin/moe/nea89 | |
parent | a61b3f9e2b8b2eeb9d556b5f477d2a479b9f7643 (diff) | |
download | sbdata-d9296584270f1e902944fc7390d0b43c34aa2dbb.tar.gz sbdata-d9296584270f1e902944fc7390d0b43c34aa2dbb.tar.bz2 sbdata-d9296584270f1e902944fc7390d0b43c34aa2dbb.zip |
literal tos violations
Diffstat (limited to 'ingame/src/main/kotlin/moe/nea89')
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 |