diff options
| author | Jacob <admin@kath.lol> | 2025-06-21 19:14:16 +0800 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-06-22 14:54:02 +0200 |
| commit | db0174ca8c391e0b46cd013c53602679f99af398 (patch) | |
| tree | e160c6ceff49127ea469a75cd00521426babad87 /src/texturePacks/java/moe/nea/firmament/features | |
| parent | fc640a97d937f82b1022ff651c15987e8d063437 (diff) | |
| download | Firmament-db0174ca8c391e0b46cd013c53602679f99af398.tar.gz Firmament-db0174ca8c391e0b46cd013c53602679f99af398.tar.bz2 Firmament-db0174ca8c391e0b46cd013c53602679f99af398.zip | |
feat: move text in replace text colors
Diffstat (limited to 'src/texturePacks/java/moe/nea/firmament/features')
| -rw-r--r-- | src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt | 55 | ||||
| -rw-r--r-- | src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextColors.kt | 14 |
2 files changed, 63 insertions, 6 deletions
diff --git a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt index ec696ec..76047b4 100644 --- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt +++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt @@ -1,6 +1,8 @@ package moe.nea.firmament.features.texturepack +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import net.minecraft.client.MinecraftClient import net.minecraft.client.gui.DrawContext import net.minecraft.client.gui.screen.Screen import net.minecraft.client.gui.screen.ingame.HandledScreen @@ -8,12 +10,14 @@ import net.minecraft.client.render.RenderLayer import net.minecraft.resource.ResourceManager import net.minecraft.resource.SinglePreparationResourceReloader import net.minecraft.screen.slot.Slot +import net.minecraft.text.Text import net.minecraft.util.Identifier import net.minecraft.util.profiler.Profiler import moe.nea.firmament.Firmament import moe.nea.firmament.annotations.Subscribe import moe.nea.firmament.events.FinalizeResourceManagerEvent import moe.nea.firmament.events.ScreenChangeEvent +import moe.nea.firmament.features.texturepack.CustomTextColors.cache import moe.nea.firmament.mixins.accessor.AccessorHandledScreen import moe.nea.firmament.util.ErrorUtil.intoCatch import moe.nea.firmament.util.IdentifierSerializer @@ -25,6 +29,8 @@ object CustomScreenLayouts : SinglePreparationResourceReloader<List<CustomScreen val predicates: Preds, val background: BackgroundReplacer? = null, val slots: List<SlotReplacer> = listOf(), + val playerTitle: TitleReplacer = TitleReplacer(), + val containerTitle: TitleReplacer = TitleReplacer() ) @Serializable @@ -87,6 +93,55 @@ object CustomScreenLayouts : SinglePreparationResourceReloader<List<CustomScreen } } + @Serializable + enum class Alignment { + @SerialName("left") + LEFT, + @SerialName("center") + CENTER, + @SerialName("right") + RIGHT + } + + @Serializable + data class TitleReplacer( + val x: Int = 0, + val y: Int = 0, + val align: Alignment = Alignment.LEFT, + val replace: String? = null + ) + + fun alignText(text: Text, x: Int, width: Int): Int { + var currentText = mapReplaceText(text) + val align = if (currentText.string == "Inventory") activeScreenOverride?.playerTitle?.align ?: Alignment.LEFT + else activeScreenOverride?.containerTitle?.align ?: Alignment.LEFT + + val textWidth = MinecraftClient.getInstance().textRenderer.getWidth(Text.literal(currentText.string)) + + + return when (align) { + Alignment.LEFT -> x + Alignment.CENTER -> x + (width - textWidth) / 2 + Alignment.RIGHT -> x + (width - textWidth) + } + } + + fun mapReplaceText(text: Text): Text { + val replaceText = if (text.string == "Inventory") activeScreenOverride?.playerTitle?.replace ?: null else activeScreenOverride?.containerTitle?.replace ?: null + if (replaceText == null) return text + return Text.literal(replaceText) + } + + fun mapTextToX(text: Text, x: Int): Int { + return x + if (text.string == "Inventory") activeScreenOverride?.playerTitle?.x + ?: 0 else activeScreenOverride?.containerTitle?.x ?: 0 + } + + fun mapTextToY(text: Text, y: Int): Int { + return y + if (text.string == "Inventory") activeScreenOverride?.playerTitle?.y + ?: 0 else activeScreenOverride?.containerTitle?.y ?: 0 + } + @Subscribe fun onStart(event: FinalizeResourceManagerEvent) { diff --git a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextColors.kt b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextColors.kt index 1fcee48..3ac895a 100644 --- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextColors.kt +++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextColors.kt @@ -27,7 +27,8 @@ object CustomTextColors : SinglePreparationResourceReloader<CustomTextColors.Tex val baseOverride = TextOverride( StringMatcher.Equals("", false), defaultColor, - false + 0, + 0 ) } @@ -35,7 +36,8 @@ object CustomTextColors : SinglePreparationResourceReloader<CustomTextColors.Tex data class TextOverride( val predicate: StringMatcher, val override: Int, - val hidden: Boolean = false, + val x: Int = 0, + val y: Int = 0, ) @Subscribe @@ -43,14 +45,14 @@ object CustomTextColors : SinglePreparationResourceReloader<CustomTextColors.Tex event.resourceManager.registerReloader(this) } - val cache = WeakCache.memoize<Text, Optional<Int>>("CustomTextColor") { text -> + val cache = WeakCache.memoize<Text, Optional<TextOverride>>("CustomTextColor") { text -> val override = textOverrides ?: return@memoize Optional.empty() - Optional.of(override.overrides.find { it.predicate.matches(text) }?.override ?: override.defaultColor) + Optional.ofNullable(override.overrides.find { it.predicate.matches(text) }) } fun mapTextColor(text: Text, oldColor: Int): Int { - if (textOverrides == null) return oldColor - return cache(text).getOrNull() ?: oldColor + val override = cache(text).orElse(null) + return override?.override ?: textOverrides?.defaultColor ?: oldColor } override fun prepare( |
