diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-09-14 19:46:52 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-09-14 19:46:52 +0200 |
| commit | 0a96dd618acba15269627c7eae8a2291fb2dc84a (patch) | |
| tree | f31a66cbd13cefbfb2d006f07d3ef3da1010f7e7 /src/main/kotlin/util | |
| parent | 9abe9f46f04f188037687adb2740b32220ad21b2 (diff) | |
| download | Firmament-0a96dd618acba15269627c7eae8a2291fb2dc84a.tar.gz Firmament-0a96dd618acba15269627c7eae8a2291fb2dc84a.tar.bz2 Firmament-0a96dd618acba15269627c7eae8a2291fb2dc84a.zip | |
snapshot
Diffstat (limited to 'src/main/kotlin/util')
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 |
