diff options
Diffstat (limited to 'src/main/kotlin/com/ambientaddons/features/misc/CrimsonFishing.kt')
-rw-r--r-- | src/main/kotlin/com/ambientaddons/features/misc/CrimsonFishing.kt | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/main/kotlin/com/ambientaddons/features/misc/CrimsonFishing.kt b/src/main/kotlin/com/ambientaddons/features/misc/CrimsonFishing.kt new file mode 100644 index 0000000..6ed1d1b --- /dev/null +++ b/src/main/kotlin/com/ambientaddons/features/misc/CrimsonFishing.kt @@ -0,0 +1,95 @@ +package com.ambientaddons.features.misc + +import AmbientAddons.Companion.config +import AmbientAddons.Companion.mc +import com.ambientaddons.utils.Area +import com.ambientaddons.utils.SBLocation +import com.ambientaddons.utils.render.EntityUtils +import gg.essential.universal.UChat +import net.minecraft.entity.Entity +import net.minecraft.entity.item.EntityArmorStand +import net.minecraft.entity.monster.EntityGuardian +import net.minecraft.entity.monster.EntityIronGolem +import net.minecraft.entity.passive.EntityMooshroom +import net.minecraft.item.ItemSkull +import net.minecraftforge.client.event.RenderWorldLastEvent +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.math.pow +import kotlin.math.roundToInt +import kotlin.math.sqrt + +object CrimsonFishing { + private const val sparkTexture = + "ewogICJ0aW1lc3RhbXAiIDogMTY0MzUwNDM3MjI1NiwKICAicHJvZmlsZUlkIiA6ICI2MzMyMDgwZTY3YTI0Y2MxYjE3ZGJhNzZmM2MwMGYxZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUZWFtSHlkcmEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2IzMzI4ZDNlOWQ3MTA0MjAzMjI1NTViMTcyMzkzMDdmMTIyNzBhZGY4MWJmNjNhZmM1MGZhYTA0YjVjMDZlMSIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9" + private val knownEntities = mutableSetOf<Entity>() + + fun isSpark(entity: Entity): Boolean { + return (entity is EntityArmorStand) && run { + entity.heldItem?.let { + if (it.item !is ItemSkull) return false + val nbt = it.tagCompound ?: return false + if (!nbt.hasKey("SkullOwner", 10)) return false + sparkTexture == nbt + .getCompoundTag("SkullOwner") + .getCompoundTag("Properties") + .getTagList("textures", 10) + .getCompoundTagAt(0) + .getString("Value") + } ?: false + } + } + + @SubscribeEvent + fun onWorldUnload(event: WorldEvent.Unload) { + knownEntities.clear() + } + + @SubscribeEvent + fun onRenderWorld(event: RenderWorldLastEvent) { + if (SBLocation.area != Area.CrimsonIsle) return + mc.theWorld.loadedEntityList.forEach { + if (it is EntityIronGolem || it is EntityGuardian) { + if (config.crimsonHighlight != 0) { + EntityUtils.drawEntityBox( + entity = it, + color = config.crimsonColor, + outline = true, + fill = false, + esp = config.crimsonHighlight == 2, + partialTicks = event.partialTicks + ) + } + if (config.crimsonNotify && !knownEntities.contains(it)) { + val distance = sqrt((it.posX - mc.thePlayer.posX).pow(2) + + (it.posY - mc.thePlayer.posY).pow(2) + + (it.posZ - mc.thePlayer.posZ).pow(2) + ) + if (it is EntityIronGolem) { + UChat.chat("\n§c§lA legendary creature has been spotted nearby... Lord Jawbus has arrived.") + mc.thePlayer.playSound("random.orb", 1f, 0.5f) + } else { + UChat.chat("\n§c§lYou hear a massive rumble as a Thunder emerges nearby.") + mc.thePlayer.playSound("random.orb", 1f, 0.5f) + } + UChat.chat("§cSpotted §6§l${distance.roundToInt()} §cblocks away.\n") + + } + knownEntities.add(it) + } else if (isSpark(it) && config.crimsonHighlight != 0) { + EntityUtils.drawEntityBox( + entity = it, + color = config.crimsonColor, + outline = true, + fill = true, + esp = config.crimsonHighlight == 2, + partialTicks = event.partialTicks, + offset = Triple(-0.2F, -0.5F, -0.1F), + expansion = Triple(-0.1, -0.85, -0.1) + ) + } + } + } + + +}
\ No newline at end of file |