diff --git a/build.gradle.kts b/build.gradle.kts index d81dc4b..2d3c829 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -66,6 +66,10 @@ dependencies { listOf( "fabric-resource-loader-v0", "fabric-lifecycle-events-v1", + + // sodium requirements + "fabric-rendering-data-attachment-v1", + "fabric-rendering-fluids-v1", ).forEach { modImplementation(fabricApi.module(it, libs.versions.fabric.api.get())) } @@ -88,7 +92,7 @@ dependencies { // sodium compat modImplementation(libs.sodium) // iris compat - modImplementation(files("libs/iris-5d0efad3.jar")) + modImplementation(libs.iris) modRuntimeOnly("org.anarres:jcpp:1.4.14") modRuntimeOnly("io.github.douira:glsl-transformer:2.0.0-pre9") @@ -155,10 +159,10 @@ if (modrinthId.isNotEmpty()) { versionNumber.set("${project.version}") versionType.set("release") uploadFile.set(tasks["remapJar"]) - gameVersions.set(listOf("1.19.3")) + gameVersions.set(listOf("1.19.4")) loaders.set(listOf("fabric", "quilt")) changelog.set(changelogText) - syncBodyFrom.set(file("README.md").readText()) + syncBodyFrom.set(file(".github/README.md").readText()) } } @@ -173,7 +177,7 @@ if (hasProperty("curseforge.token") && curseforgeId.isNotEmpty()) { id = curseforgeId releaseType = "release" - addGameVersion("1.19.3") + addGameVersion("1.19.4") addGameVersion("Fabric") addGameVersion("Java 17") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8a7a4aa..bf3415e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,16 +7,17 @@ github_release = "2.+" machete = "1.+" grgit = "5.0.+" -minecraft = "1.19.4-rc1" +minecraft = "1.19.4" quilt_mappings = "1" fabric_loader = "0.14.17" -fabric_api = "0.75.1+1.19.4" +fabric_api = "0.76.0+1.19.4" mixin_extras = "0.2.0-beta.1" -yet_another_config_lib = "2.3.0+beta.3+update.1.19.4-SNAPSHOT" -mod_menu = "6.1.0-alpha.1" +yet_another_config_lib = "2.3.0" +mod_menu = "6.1.0-rc.1" hid4java = "0.7.0" quilt_json5 = "1.0.3" -sodium = "0.4.10+build.211" +sodium = "mc1.19.4-0.4.10" +iris = "1.5.2+1.19.4" [libraries] minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } @@ -28,7 +29,8 @@ yet_another_config_lib = { module = "dev.isxander:yet-another-config-lib", versi mod_menu = { module = "com.terraformersmc:modmenu", version.ref = "mod_menu" } hid4java = { module = "org.hid4java:hid4java", version.ref = "hid4java" } quilt_json5 = { module = "org.quiltmc:quilt-json5", version.ref = "quilt_json5" } -sodium = { module = "me.jellysquid.mods:sodium-fabric", version.ref = "sodium" } +sodium = { module = "maven.modrinth:sodium", version.ref = "sodium" } +iris = { module = "maven.modrinth:iris", version.ref = "iris" } test_fabric_loader = { module = "net.fabricmc:fabric-loader-junit", version.ref = "fabric_loader" } diff --git a/libs/iris-5d0efad3.jar b/libs/iris-5d0efad3.jar deleted file mode 100644 index 7aeadd4..0000000 Binary files a/libs/iris-5d0efad3.jar and /dev/null differ diff --git a/src/main/java/dev/isxander/controlify/Controlify.java b/src/main/java/dev/isxander/controlify/Controlify.java index 346efbe..b7ce382 100644 --- a/src/main/java/dev/isxander/controlify/Controlify.java +++ b/src/main/java/dev/isxander/controlify/Controlify.java @@ -72,6 +72,10 @@ public class Controlify implements ControlifyApi { } } + if (Controller.CONTROLLERS.isEmpty()) { + LOGGER.info("No controllers found."); + } + if (currentController() == Controller.DUMMY && config().isFirstLaunch()) { this.setCurrentController(Controller.CONTROLLERS.values().stream().findFirst().orElse(null)); } diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/screenop/vanilla/CreateWorldScreenMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/screenop/vanilla/CreateWorldScreenMixin.java deleted file mode 100644 index bc3557b..0000000 --- a/src/main/java/dev/isxander/controlify/mixins/feature/screenop/vanilla/CreateWorldScreenMixin.java +++ /dev/null @@ -1,41 +0,0 @@ -package dev.isxander.controlify.mixins.feature.screenop.vanilla; - -import dev.isxander.controlify.screenop.ScreenProcessor; -import dev.isxander.controlify.screenop.ScreenProcessorProvider; -import dev.isxander.controlify.screenop.compat.vanilla.CreateWorldScreenProcessor; -import net.minecraft.client.gui.components.tabs.Tab; -import net.minecraft.client.gui.components.tabs.TabManager; -import net.minecraft.client.gui.components.tabs.TabNavigationBar; -import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; - -import java.util.List; - -@Mixin(CreateWorldScreen.class) -public class CreateWorldScreenMixin implements ScreenProcessorProvider { - @Shadow private @Nullable TabNavigationBar tabNavigationBar; - @Shadow @Final private TabManager tabManager; - - @Unique private final CreateWorldScreenProcessor controlify$screenProcessor - = new CreateWorldScreenProcessor((CreateWorldScreen) (Object) this, this::changeTab); - - @Override - public ScreenProcessor screenProcessor() { - return controlify$screenProcessor; - } - - private void changeTab(boolean reverse) { - List tabs = ((TabNavigationBarAccessor) tabNavigationBar).getTabs(); - int currentIndex = tabs.indexOf(tabManager.getCurrentTab()); - - int newIndex = currentIndex + (reverse ? -1 : 1); - if (newIndex < 0) newIndex = tabs.size() - 1; - if (newIndex >= tabs.size()) newIndex = 0; - - tabNavigationBar.selectTab(newIndex, true); - } -} diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/screenop/vanilla/TabNavigationBarAccessor.java b/src/main/java/dev/isxander/controlify/mixins/feature/screenop/vanilla/TabNavigationBarAccessor.java index c490666..e877c1b 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/screenop/vanilla/TabNavigationBarAccessor.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/screenop/vanilla/TabNavigationBarAccessor.java @@ -2,6 +2,7 @@ package dev.isxander.controlify.mixins.feature.screenop.vanilla; import com.google.common.collect.ImmutableList; import net.minecraft.client.gui.components.tabs.Tab; +import net.minecraft.client.gui.components.tabs.TabManager; import net.minecraft.client.gui.components.tabs.TabNavigationBar; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @@ -10,4 +11,7 @@ import org.spongepowered.asm.mixin.gen.Accessor; public interface TabNavigationBarAccessor { @Accessor ImmutableList getTabs(); + + @Accessor + TabManager getTabManager(); } diff --git a/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java b/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java index d110bf8..26333a3 100644 --- a/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java +++ b/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java @@ -5,8 +5,11 @@ import dev.isxander.controlify.InputMode; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.api.event.ControlifyEvents; import dev.isxander.controlify.mixins.feature.screenop.vanilla.ScreenAccessor; +import dev.isxander.controlify.mixins.feature.screenop.vanilla.TabNavigationBarAccessor; import net.minecraft.client.gui.ComponentPath; import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.components.tabs.Tab; +import net.minecraft.client.gui.components.tabs.TabNavigationBar; import net.minecraft.client.gui.navigation.FocusNavigationEvent; import net.minecraft.client.gui.navigation.ScreenDirection; import net.minecraft.client.gui.screens.Screen; @@ -30,6 +33,8 @@ public class ScreenProcessor { } else { handleVMouseNavigation(controller); } + + handleTabNavigation(controller); } public void onInputModeChanged(InputMode mode) { @@ -104,6 +109,29 @@ public class ScreenProcessor { } + protected void handleTabNavigation(Controller controller) { + var nextTab = controller.bindings().GUI_NEXT_TAB.justPressed(); + var prevTab = controller.bindings().GUI_PREV_TAB.justPressed(); + + if (nextTab || prevTab) { + screen.children().stream() + .filter(child -> child instanceof TabNavigationBar) + .map(TabNavigationBar.class::cast) + .findAny() + .ifPresent(navBar -> { + var accessor = (TabNavigationBarAccessor) navBar; + List tabs = accessor.getTabs(); + int currentIndex = tabs.indexOf(accessor.getTabManager().getCurrentTab()); + + int newIndex = currentIndex + (prevTab ? -1 : 1); + if (newIndex < 0) newIndex = tabs.size() - 1; + if (newIndex >= tabs.size()) newIndex = 0; + + navBar.selectTab(newIndex, true); + }); + } + } + public void onWidgetRebuild() { setInitialFocus(); } diff --git a/src/main/java/dev/isxander/controlify/screenop/compat/vanilla/CreateWorldScreenProcessor.java b/src/main/java/dev/isxander/controlify/screenop/compat/vanilla/CreateWorldScreenProcessor.java deleted file mode 100644 index acc805d..0000000 --- a/src/main/java/dev/isxander/controlify/screenop/compat/vanilla/CreateWorldScreenProcessor.java +++ /dev/null @@ -1,30 +0,0 @@ -package dev.isxander.controlify.screenop.compat.vanilla; - -import dev.isxander.controlify.controller.Controller; -import dev.isxander.controlify.screenop.ScreenProcessor; -import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; - -import java.util.function.Consumer; - -public class CreateWorldScreenProcessor extends ScreenProcessor { - private final Consumer tabChangeMethod; - - public CreateWorldScreenProcessor(CreateWorldScreen screen, Consumer tabChangeMethod) { - super(screen); - this.tabChangeMethod = tabChangeMethod; - } - - @Override - protected void handleButtons(Controller controller) { - if (controller.bindings().GUI_NEXT_TAB.justPressed()) { - tabChangeMethod.accept(false); - return; - } - if (controller.bindings().GUI_PREV_TAB.justPressed()) { - tabChangeMethod.accept(true); - return; - } - - super.handleButtons(controller); - } -} diff --git a/src/main/resources/controlify.mixins.json b/src/main/resources/controlify.mixins.json index 6fc45af..a63d922 100644 --- a/src/main/resources/controlify.mixins.json +++ b/src/main/resources/controlify.mixins.json @@ -32,7 +32,7 @@ "feature.screenop.vanilla.AbstractSelectionListMixin", "feature.screenop.vanilla.AbstractSliderButtonMixin", "feature.screenop.vanilla.ContainerObjectSelectionListEntryMixin", - "feature.screenop.vanilla.CreateWorldScreenMixin", + "feature.screenop.vanilla.CreativeModeInventoryScreenAccessor", "feature.screenop.vanilla.CreativeModeInventoryScreenMixin", "feature.screenop.vanilla.JoinMultiplayerScreenAccessor",