aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-09-14 19:46:52 +0200
committerLinnea Gräf <nea@nea.moe>2025-09-14 19:46:52 +0200
commit0a96dd618acba15269627c7eae8a2291fb2dc84a (patch)
treef31a66cbd13cefbfb2d006f07d3ef3da1010f7e7 /src/main/kotlin/util
parent9abe9f46f04f188037687adb2740b32220ad21b2 (diff)
downloadFirmament-0a96dd618acba15269627c7eae8a2291fb2dc84a.tar.gz
Firmament-0a96dd618acba15269627c7eae8a2291fb2dc84a.tar.bz2
Firmament-0a96dd618acba15269627c7eae8a2291fb2dc84a.zip
snapshot
Diffstat (limited to 'src/main/kotlin/util')
-rw-r--r--src/main/kotlin/util/LegacyTagParser.kt2
-rw-r--r--src/main/kotlin/util/MoulConfigUtils.kt1
-rw-r--r--src/main/kotlin/util/TemplateUtil.kt3
-rw-r--r--src/main/kotlin/util/WarpUtil.kt141
-rw-r--r--src/main/kotlin/util/accessors/GetRectangle.kt2
-rw-r--r--src/main/kotlin/util/data/DataHolder.kt5
-rw-r--r--src/main/kotlin/util/data/IDataHolder.kt20
-rw-r--r--src/main/kotlin/util/json/DashlessUUIDSerializer.kt1
-rw-r--r--src/main/kotlin/util/json/jsonConversion.kt1
-rw-r--r--src/main/kotlin/util/mc/NbtPrism.kt6
-rw-r--r--src/main/kotlin/util/render/DrawContextExt.kt1
-rw-r--r--src/main/kotlin/util/render/FacingThePlayerContext.kt2
-rw-r--r--src/main/kotlin/util/render/FirmamentShaders.kt8
-rw-r--r--src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt1
-rw-r--r--src/main/kotlin/util/render/RenderCircleProgress.kt1
-rw-r--r--src/main/kotlin/util/render/RenderInWorldContext.kt1
-rw-r--r--src/main/kotlin/util/render/TranslatedScissors.kt1
-rw-r--r--src/main/kotlin/util/skyblock/SackUtil.kt2
18 files changed, 89 insertions, 110 deletions
diff --git a/src/main/kotlin/util/LegacyTagParser.kt b/src/main/kotlin/util/LegacyTagParser.kt
index 4e08da1..5a26335 100644
--- a/src/main/kotlin/util/LegacyTagParser.kt
+++ b/src/main/kotlin/util/LegacyTagParser.kt
@@ -2,7 +2,7 @@
package moe.nea.firmament.util
-import java.util.*
+import java.util.Stack
import net.minecraft.nbt.AbstractNbtNumber
import net.minecraft.nbt.NbtByte
import net.minecraft.nbt.NbtCompound
diff --git a/src/main/kotlin/util/MoulConfigUtils.kt b/src/main/kotlin/util/MoulConfigUtils.kt
index 2f2fd5c..fb955ae 100644
--- a/src/main/kotlin/util/MoulConfigUtils.kt
+++ b/src/main/kotlin/util/MoulConfigUtils.kt
@@ -9,7 +9,6 @@ import io.github.notenoughupdates.moulconfig.gui.GuiImmediateContext
import io.github.notenoughupdates.moulconfig.gui.KeyboardEvent
import io.github.notenoughupdates.moulconfig.gui.MouseEvent
import io.github.notenoughupdates.moulconfig.observer.GetSetter
-import io.github.notenoughupdates.moulconfig.platform.MoulConfigPlatform
import io.github.notenoughupdates.moulconfig.platform.MoulConfigRenderContext
import io.github.notenoughupdates.moulconfig.platform.MoulConfigScreenComponent
import io.github.notenoughupdates.moulconfig.xml.ChildCount
diff --git a/src/main/kotlin/util/TemplateUtil.kt b/src/main/kotlin/util/TemplateUtil.kt
index f4ff37c..44d9ccd 100644
--- a/src/main/kotlin/util/TemplateUtil.kt
+++ b/src/main/kotlin/util/TemplateUtil.kt
@@ -2,10 +2,9 @@
package moe.nea.firmament.util
-import java.util.*
+import java.util.Base64
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerializationStrategy
-import kotlinx.serialization.json.Json
import kotlinx.serialization.serializer
import moe.nea.firmament.Firmament
diff --git a/src/main/kotlin/util/WarpUtil.kt b/src/main/kotlin/util/WarpUtil.kt
index f733af7..1943edb 100644
--- a/src/main/kotlin/util/WarpUtil.kt
+++ b/src/main/kotlin/util/WarpUtil.kt
@@ -13,84 +13,87 @@ import moe.nea.firmament.commands.thenExecute
import moe.nea.firmament.events.CommandEvent
import moe.nea.firmament.events.ProcessChatEvent
import moe.nea.firmament.repo.RepoManager
+import moe.nea.firmament.util.data.Config
import moe.nea.firmament.util.data.ProfileSpecificDataHolder
object WarpUtil {
- val warps: Sequence<Islands.Warp> get() = RepoManager.neuRepo.constants.islands.warps
- .asSequence()
- .filter { it.warp !in ignoredWarps }
+ val warps: Sequence<Islands.Warp>
+ get() = RepoManager.neuRepo.constants.islands.warps
+ .asSequence()
+ .filter { it.warp !in ignoredWarps }
- val ignoredWarps = setOf("carnival", "")
+ val ignoredWarps = setOf("carnival", "")
- @Serializable
- data class Data(
- val excludedWarps: MutableSet<String> = mutableSetOf(),
- )
+ @Serializable
+ data class Data(
+ val excludedWarps: MutableSet<String> = mutableSetOf(),
+ )
- object DConfig : ProfileSpecificDataHolder<Data>(serializer(), "warp-util", ::Data)
+ @Config
+ object DConfig : ProfileSpecificDataHolder<Data>(serializer(), "warp-util", ::Data)
- private var lastAttemptedWarp = ""
- private var lastWarpAttempt = TimeMark.farPast()
- fun findNearestWarp(island: SkyBlockIsland, pos: Position): Islands.Warp? {
- return warps.asSequence().filter { it.mode == island.locrawMode }.minByOrNull {
- if (DConfig.data?.excludedWarps?.contains(it.warp) == true) {
- return@minByOrNull Double.MAX_VALUE
- } else {
- return@minByOrNull squaredDist(pos, it)
- }
- }
- }
+ private var lastAttemptedWarp = ""
+ private var lastWarpAttempt = TimeMark.farPast()
+ fun findNearestWarp(island: SkyBlockIsland, pos: Position): Islands.Warp? {
+ return warps.asSequence().filter { it.mode == island.locrawMode }.minByOrNull {
+ if (DConfig.data?.excludedWarps?.contains(it.warp) == true) {
+ return@minByOrNull Double.MAX_VALUE
+ } else {
+ return@minByOrNull squaredDist(pos, it)
+ }
+ }
+ }
- private fun squaredDist(pos: Position, warp: Warp): Double {
- val dx = pos.x - warp.x
- val dy = pos.y - warp.y
- val dz = pos.z - warp.z
- return dx * dx + dy * dy + dz * dz
- }
+ private fun squaredDist(pos: Position, warp: Warp): Double {
+ val dx = pos.x - warp.x
+ val dy = pos.y - warp.y
+ val dz = pos.z - warp.z
+ return dx * dx + dy * dy + dz * dz
+ }
- fun teleportToNearestWarp(island: SkyBlockIsland, pos: Position) {
- val nearestWarp = findNearestWarp(island, pos)
- if (nearestWarp == null) {
- MC.sendChat(Text.translatable("firmament.warp-util.no-warp-found", island.userFriendlyName))
- return
- }
- if (island == SBData.skyblockLocation
- && sqrt(squaredDist(pos, nearestWarp)) > 1.1 * sqrt(squaredDist((MC.player ?: return).pos, nearestWarp))
- ) {
- MC.sendChat(Text.translatable("firmament.warp-util.already-close", nearestWarp.warp))
- return
- }
- MC.sendChat(Text.translatable("firmament.warp-util.attempting-to-warp", nearestWarp.warp))
- lastWarpAttempt = TimeMark.now()
- lastAttemptedWarp = nearestWarp.warp
- MC.sendServerCommand("warp ${nearestWarp.warp}")
- }
+ fun teleportToNearestWarp(island: SkyBlockIsland, pos: Position) {
+ val nearestWarp = findNearestWarp(island, pos)
+ if (nearestWarp == null) {
+ MC.sendChat(Text.translatable("firmament.warp-util.no-warp-found", island.userFriendlyName))
+ return
+ }
+ if (island == SBData.skyblockLocation
+ && sqrt(squaredDist(pos, nearestWarp)) > 1.1 * sqrt(squaredDist((MC.player ?: return).pos, nearestWarp))
+ ) {
+ MC.sendChat(Text.translatable("firmament.warp-util.already-close", nearestWarp.warp))
+ return
+ }
+ MC.sendChat(Text.translatable("firmament.warp-util.attempting-to-warp", nearestWarp.warp))
+ lastWarpAttempt = TimeMark.now()
+ lastAttemptedWarp = nearestWarp.warp
+ MC.sendServerCommand("warp ${nearestWarp.warp}")
+ }
- @Subscribe
- fun clearUnlockedWarpsCommand(event: CommandEvent.SubCommand) {
- event.subcommand("clearwarps") {
- thenExecute {
- DConfig.data?.excludedWarps?.clear()
- DConfig.markDirty()
- source.sendFeedback(Text.translatable("firmament.warp-util.clear-excluded"))
- }
- }
- }
+ @Subscribe
+ fun clearUnlockedWarpsCommand(event: CommandEvent.SubCommand) {
+ event.subcommand("clearwarps") {
+ thenExecute {
+ DConfig.data?.excludedWarps?.clear()
+ DConfig.markDirty()
+ source.sendFeedback(Text.translatable("firmament.warp-util.clear-excluded"))
+ }
+ }
+ }
- init {
- ProcessChatEvent.subscribe("WarpUtil:processChat") {
- if (it.unformattedString == "You haven't unlocked this fast travel destination!"
- && lastWarpAttempt.passedTime() < 2.seconds
- ) {
- DConfig.data?.excludedWarps?.add(lastAttemptedWarp)
- DConfig.markDirty()
- MC.sendChat(Text.stringifiedTranslatable("firmament.warp-util.mark-excluded", lastAttemptedWarp))
- lastWarpAttempt = TimeMark.farPast()
- }
- if (it.unformattedString.startsWith("You may now fast travel to")) {
- DConfig.data?.excludedWarps?.clear()
- DConfig.markDirty()
- }
- }
- }
+ init {
+ ProcessChatEvent.subscribe("WarpUtil:processChat") {
+ if (it.unformattedString == "You haven't unlocked this fast travel destination!"
+ && lastWarpAttempt.passedTime() < 2.seconds
+ ) {
+ DConfig.data?.excludedWarps?.add(lastAttemptedWarp)
+ DConfig.markDirty()
+ MC.sendChat(Text.stringifiedTranslatable("firmament.warp-util.mark-excluded", lastAttemptedWarp))
+ lastWarpAttempt = TimeMark.farPast()
+ }
+ if (it.unformattedString.startsWith("You may now fast travel to")) {
+ DConfig.data?.excludedWarps?.clear()
+ DConfig.markDirty()
+ }
+ }
+ }
}
diff --git a/src/main/kotlin/util/accessors/GetRectangle.kt b/src/main/kotlin/util/accessors/GetRectangle.kt
index 37acfd9..56f420c 100644
--- a/src/main/kotlin/util/accessors/GetRectangle.kt
+++ b/src/main/kotlin/util/accessors/GetRectangle.kt
@@ -3,8 +3,8 @@
package moe.nea.firmament.util.accessors
import me.shedaniel.math.Rectangle
-import moe.nea.firmament.mixins.accessor.AccessorHandledScreen
import net.minecraft.client.gui.screen.ingame.HandledScreen
+import moe.nea.firmament.mixins.accessor.AccessorHandledScreen
fun HandledScreen<*>.getRectangle(): Rectangle {
this as AccessorHandledScreen
diff --git a/src/main/kotlin/util/data/DataHolder.kt b/src/main/kotlin/util/data/DataHolder.kt
index 9f21125..c138d78 100644
--- a/src/main/kotlin/util/data/DataHolder.kt
+++ b/src/main/kotlin/util/data/DataHolder.kt
@@ -1,11 +1,6 @@
package moe.nea.firmament.util.data
-import java.nio.file.Path
import kotlinx.serialization.KSerializer
-import kotlin.io.path.exists
-import kotlin.io.path.readText
-import kotlin.io.path.writeText
-import moe.nea.firmament.Firmament
import moe.nea.firmament.gui.config.storage.ConfigStorageClass
abstract class DataHolder<T>(
diff --git a/src/main/kotlin/util/data/IDataHolder.kt b/src/main/kotlin/util/data/IDataHolder.kt
index 81198ee..541fc1b 100644
--- a/src/main/kotlin/util/data/IDataHolder.kt
+++ b/src/main/kotlin/util/data/IDataHolder.kt
@@ -9,23 +9,27 @@ import moe.nea.firmament.gui.config.storage.ConfigStorageClass
import moe.nea.firmament.gui.config.storage.FirmamentConfigLoader
import moe.nea.firmament.util.SBData
-sealed interface IDataHolder<T> {
+sealed class IDataHolder<T> {
fun markDirty() {
FirmamentConfigLoader.markDirty(this)
}
- fun keys(): Collection<T>
- fun saveTo(key: T): JsonObject
- fun loadFrom(key: T, jsonObject: JsonObject)
- fun clear()
- val storageClass: ConfigStorageClass
+ init {
+ require(this.javaClass.getAnnotation(Config::class.java) != null)
+ }
+
+ abstract fun keys(): Collection<T>
+ abstract fun saveTo(key: T): JsonObject
+ abstract fun loadFrom(key: T, jsonObject: JsonObject)
+ abstract fun clear()
+ abstract val storageClass: ConfigStorageClass
}
open class ProfileKeyedConfig<T>(
val prefix: String,
val serializer: KSerializer<T>,
val default: () -> T,
-) : IDataHolder<UUID> {
+) : IDataHolder<UUID>() {
override val storageClass: ConfigStorageClass
get() = ConfigStorageClass.PROFILE
@@ -65,7 +69,7 @@ abstract class GenericConfig<T>(
val prefix: String,
val serializer: KSerializer<T>,
val default: () -> T,
-) : IDataHolder<Unit> {
+) : IDataHolder<Unit>() {
private var _data: T? = null
diff --git a/src/main/kotlin/util/json/DashlessUUIDSerializer.kt b/src/main/kotlin/util/json/DashlessUUIDSerializer.kt
index 6bafebe..f4b073a 100644
--- a/src/main/kotlin/util/json/DashlessUUIDSerializer.kt
+++ b/src/main/kotlin/util/json/DashlessUUIDSerializer.kt
@@ -9,7 +9,6 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
-import moe.nea.firmament.util.parseDashlessUUID
import moe.nea.firmament.util.parsePotentiallyDashlessUUID
object DashlessUUIDSerializer : KSerializer<UUID> {
diff --git a/src/main/kotlin/util/json/jsonConversion.kt b/src/main/kotlin/util/json/jsonConversion.kt
index 899ae11..f921f7b 100644
--- a/src/main/kotlin/util/json/jsonConversion.kt
+++ b/src/main/kotlin/util/json/jsonConversion.kt
@@ -6,7 +6,6 @@ import com.google.gson.JsonNull
import com.google.gson.JsonObject
import com.google.gson.JsonPrimitive
import com.google.gson.internal.LazilyParsedNumber
-import kotlin.collections.map
fun JsonElement.intoKotlinJson(): kotlinx.serialization.json.JsonElement {
diff --git a/src/main/kotlin/util/mc/NbtPrism.kt b/src/main/kotlin/util/mc/NbtPrism.kt
index f034210..f13fad5 100644
--- a/src/main/kotlin/util/mc/NbtPrism.kt
+++ b/src/main/kotlin/util/mc/NbtPrism.kt
@@ -7,13 +7,7 @@ import com.google.gson.JsonPrimitive
import com.mojang.brigadier.StringReader
import com.mojang.brigadier.arguments.ArgumentType
import com.mojang.brigadier.arguments.StringArgumentType
-import com.mojang.brigadier.context.CommandContext
-import com.mojang.brigadier.suggestion.Suggestions
-import com.mojang.brigadier.suggestion.SuggestionsBuilder
import com.mojang.serialization.JsonOps
-import java.util.concurrent.CompletableFuture
-import kotlin.collections.indices
-import kotlin.collections.map
import kotlin.jvm.optionals.getOrNull
import net.minecraft.nbt.NbtCompound
import net.minecraft.nbt.NbtElement
diff --git a/src/main/kotlin/util/render/DrawContextExt.kt b/src/main/kotlin/util/render/DrawContextExt.kt
index e63bf5f..e96fab9 100644
--- a/src/main/kotlin/util/render/DrawContextExt.kt
+++ b/src/main/kotlin/util/render/DrawContextExt.kt
@@ -2,7 +2,6 @@ package moe.nea.firmament.util.render
import com.mojang.blaze3d.systems.RenderSystem
import me.shedaniel.math.Color
-import org.joml.Vector2f
import org.joml.Vector3f
import util.render.CustomRenderLayers
import kotlin.math.abs
diff --git a/src/main/kotlin/util/render/FacingThePlayerContext.kt b/src/main/kotlin/util/render/FacingThePlayerContext.kt
index 76270c5..e5cb78a 100644
--- a/src/main/kotlin/util/render/FacingThePlayerContext.kt
+++ b/src/main/kotlin/util/render/FacingThePlayerContext.kt
@@ -6,8 +6,6 @@ import util.render.CustomRenderLayers
import net.minecraft.client.font.TextRenderer
import net.minecraft.client.render.LightmapTextureManager
import net.minecraft.client.render.RenderLayer
-import net.minecraft.client.render.RenderLayers
-import net.minecraft.client.render.TexturedRenderLayers
import net.minecraft.client.render.VertexConsumer
import net.minecraft.text.Text
import net.minecraft.util.Identifier
diff --git a/src/main/kotlin/util/render/FirmamentShaders.kt b/src/main/kotlin/util/render/FirmamentShaders.kt
index cc6cd49..53afdf5 100644
--- a/src/main/kotlin/util/render/FirmamentShaders.kt
+++ b/src/main/kotlin/util/render/FirmamentShaders.kt
@@ -1,15 +1,7 @@
package moe.nea.firmament.util.render
-import com.mojang.blaze3d.vertex.VertexFormat
-import net.minecraft.client.gl.CompiledShader
-import net.minecraft.client.gl.Defines
-import net.minecraft.client.gl.ShaderProgram
-import net.minecraft.client.render.RenderPhase
-import net.minecraft.client.render.VertexFormats
-import moe.nea.firmament.Firmament
import moe.nea.firmament.annotations.Subscribe
import moe.nea.firmament.events.DebugInstantiateEvent
-import moe.nea.firmament.util.MC
object FirmamentShaders {
diff --git a/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt b/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt
index ce56df3..d05e71e 100644
--- a/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt
+++ b/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt
@@ -1,6 +1,5 @@
package moe.nea.firmament.util.render
-import org.joml.Matrix3x2f
import net.minecraft.client.gui.ScreenRect
import net.minecraft.client.gui.render.SpecialGuiElementRenderer
import net.minecraft.client.gui.render.state.GuiRenderState
diff --git a/src/main/kotlin/util/render/RenderCircleProgress.kt b/src/main/kotlin/util/render/RenderCircleProgress.kt
index 301eec4..7ea4ca8 100644
--- a/src/main/kotlin/util/render/RenderCircleProgress.kt
+++ b/src/main/kotlin/util/render/RenderCircleProgress.kt
@@ -1,7 +1,6 @@
package moe.nea.firmament.util.render
import com.mojang.blaze3d.vertex.VertexFormat
-import org.joml.Matrix3x2f
import util.render.CustomRenderLayers
import net.minecraft.client.gui.DrawContext
import net.minecraft.client.gui.ScreenRect
diff --git a/src/main/kotlin/util/render/RenderInWorldContext.kt b/src/main/kotlin/util/render/RenderInWorldContext.kt
index 154c413..12a061d 100644
--- a/src/main/kotlin/util/render/RenderInWorldContext.kt
+++ b/src/main/kotlin/util/render/RenderInWorldContext.kt
@@ -1,7 +1,6 @@
package moe.nea.firmament.util.render
import com.mojang.blaze3d.systems.RenderSystem
-import java.lang.Math.pow
import org.joml.Matrix4f
import org.joml.Vector3f
import util.render.CustomRenderLayers
diff --git a/src/main/kotlin/util/render/TranslatedScissors.kt b/src/main/kotlin/util/render/TranslatedScissors.kt
index a091648..ee90a2d 100644
--- a/src/main/kotlin/util/render/TranslatedScissors.kt
+++ b/src/main/kotlin/util/render/TranslatedScissors.kt
@@ -2,7 +2,6 @@ package moe.nea.firmament.util.render
import org.joml.Matrix3x2f
import org.joml.Vector3f
-import org.joml.Vector4f
import net.minecraft.client.gui.DrawContext
fun DrawContext.enableScissorWithTranslation(x1: Float, y1: Float, x2: Float, y2: Float) {
diff --git a/src/main/kotlin/util/skyblock/SackUtil.kt b/src/main/kotlin/util/skyblock/SackUtil.kt
index 8c82022..af03363 100644
--- a/src/main/kotlin/util/skyblock/SackUtil.kt
+++ b/src/main/kotlin/util/skyblock/SackUtil.kt
@@ -13,6 +13,7 @@ import moe.nea.firmament.gui.config.storage.ConfigStorageClass
import moe.nea.firmament.repo.ItemNameLookup
import moe.nea.firmament.util.SHORT_NUMBER_FORMAT
import moe.nea.firmament.util.SkyblockId
+import moe.nea.firmament.util.data.Config
import moe.nea.firmament.util.data.ProfileSpecificDataHolder
import moe.nea.firmament.util.mc.displayNameAccordingToNbt
import moe.nea.firmament.util.mc.iterableView
@@ -30,6 +31,7 @@ object SackUtil {
// val sackTypes:
)
+ @Config
object Store : ProfileSpecificDataHolder<SackContents>(serializer(), "sacks", ::SackContents)
@Subscribe