aboutsummaryrefslogtreecommitdiff
path: root/src/texturePacks/java/moe/nea/firmament/features
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-09-17 22:24:09 +0200
committerLinnea Gräf <nea@nea.moe>2025-09-17 22:32:13 +0200
commit21817efdfe62135704571908b9f72ed3ace4bdf1 (patch)
tree3bf6df2ae75f2c3029b2dd0c192244a8b8b98a9a /src/texturePacks/java/moe/nea/firmament/features
parentd65824989ac32c7c5ee5ba2957f3cc76c76546b9 (diff)
downloadFirmament-21817efdfe62135704571908b9f72ed3ace4bdf1.tar.gz
Firmament-21817efdfe62135704571908b9f72ed3ace4bdf1.tar.bz2
Firmament-21817efdfe62135704571908b9f72ed3ace4bdf1.zip
feat: add sign text & background movers
Diffstat (limited to 'src/texturePacks/java/moe/nea/firmament/features')
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt43
1 files changed, 37 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 69a1c7e..3554372 100644
--- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt
+++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt
@@ -7,11 +7,15 @@ import net.minecraft.client.font.TextRenderer
import net.minecraft.client.gl.RenderPipelines
import net.minecraft.client.gui.DrawContext
import net.minecraft.client.gui.screen.Screen
+import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen
import net.minecraft.client.gui.screen.ingame.HandledScreen
+import net.minecraft.client.gui.screen.ingame.HangingSignEditScreen
+import net.minecraft.client.gui.screen.ingame.SignEditScreen
import net.minecraft.client.render.RenderLayer
import net.minecraft.registry.Registries
import net.minecraft.resource.ResourceManager
import net.minecraft.resource.SinglePreparationResourceReloader
+import net.minecraft.screen.ScreenHandler
import net.minecraft.screen.slot.Slot
import net.minecraft.text.Text
import net.minecraft.util.Identifier
@@ -24,6 +28,7 @@ import moe.nea.firmament.features.texturepack.CustomScreenLayouts.Alignment.CENT
import moe.nea.firmament.features.texturepack.CustomScreenLayouts.Alignment.LEFT
import moe.nea.firmament.features.texturepack.CustomScreenLayouts.Alignment.RIGHT
import moe.nea.firmament.mixins.accessor.AccessorHandledScreen
+import moe.nea.firmament.mixins.accessor.AccessorScreenHandler
import moe.nea.firmament.util.ErrorUtil.intoCatch
import moe.nea.firmament.util.IdentifierSerializer
@@ -38,7 +43,13 @@ object CustomScreenLayouts : SinglePreparationResourceReloader<List<CustomScreen
val containerTitle: TitleReplacer? = null,
val repairCostTitle: TitleReplacer? = null,
val nameField: ComponentMover? = null,
- )
+ val signLines: List<ComponentMover>? = null,
+ ) {
+ init {
+ if (signLines != null)
+ require(signLines.size == 4)
+ }
+ }
@Serializable
data class ComponentMover(
@@ -56,11 +67,17 @@ object CustomScreenLayouts : SinglePreparationResourceReloader<List<CustomScreen
) {
fun matches(screen: Screen): Boolean {
// TODO: does this deserve the restriction to handled screen
- val s = screen as? HandledScreen<*>? ?: return false
- val typeMatches = screenType == null || s.screenHandler.type.equals(Registries.SCREEN_HANDLER
- .get(screenType));
+ val type = when (screen) {
+ is HandledScreen<*> -> (screen.screenHandler as AccessorScreenHandler).type_firmament?.let {
+ Registries.SCREEN_HANDLER.getId(it)
+ }
- return label.matches(s.title) && typeMatches
+ is HangingSignEditScreen -> Identifier.of("firmskyblock", "hanging_sign")
+ is SignEditScreen -> Identifier.of("firmskyblock", "sign")
+ else -> null
+ }
+ val typeMatches = screenType == null || type == screenType;
+ return label.matches(screen.title) && typeMatches
}
}
@@ -74,6 +91,16 @@ object CustomScreenLayouts : SinglePreparationResourceReloader<List<CustomScreen
val width: Int,
val height: Int,
) {
+ fun renderDirect(context: DrawContext) {
+ context.drawTexture(
+ RenderPipelines.GUI_TEXTURED,
+ this.texture,
+ this.x, this.y,
+ 0F, 0F,
+ this.width, this.height, this.width, this.height,
+ )
+ }
+
fun renderGeneric(context: DrawContext, screen: HandledScreen<*>) {
screen as AccessorHandledScreen
val originalX: Int = (screen.width - screen.backgroundWidth_Firmament) / 2
@@ -197,10 +224,14 @@ object CustomScreenLayouts : SinglePreparationResourceReloader<List<CustomScreen
val DO_NOTHING_TEXT_REPLACER = TitleReplacer()
@JvmStatic
- fun <T>getMover(selector: (CustomScreenLayout)-> (T?)) =
+ fun <T> getMover(selector: (CustomScreenLayout) -> (T?)) =
activeScreenOverride?.let(selector)
@JvmStatic
+ fun getSignTextMover(index: Int) =
+ getMover { it.signLines?.get(index) }
+
+ @JvmStatic
fun getTextMover(selector: (CustomScreenLayout) -> (TitleReplacer?)) =
getMover(selector) ?: DO_NOTHING_TEXT_REPLACER