diff --git a/README.md b/README.md index 079a3f9..ea8a693 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ ![Java 16](https://img.shields.io/badge/language-Java%2017-9B599A.svg?style=flat-square) [![GitHub license](https://img.shields.io/github/license/TeamMidnightDust/MidnightControls?style=flat-square)](https://raw.githubusercontent.com/TeamMidnightDust/MidnightControls/master/LICENSE) ![Environment: Client](https://img.shields.io/badge/environment-client-1976d2?style=flat-square) -[![Mod loader: Fabric]][fabric] +[![Mod loader: Quilt/Fabric]][quilt] ![Version](https://img.shields.io/github/v/tag/TeamMidnightDust/MidnightControls?label=version&style=flat-square) -[![CurseForge](http://cf.way2muchnoise.eu/title/354231.svg)](https://www.curseforge.com/minecraft/mc-mods/lambdacontrols) +[![CurseForge](http://cf.way2muchnoise.eu/title/354231.svg)](https://www.curseforge.com/minecraft/mc-mods/midnightcontrols) A Fabric Minecraft mod which adds better controls, reach-around and controller support. -Forked from [LambdaControls](https://github.com/LambdAurora/LambdaControls) by the amazing [LambdaAurora](https://github.com/LambdAurora), which was sadly discontinued +Forked from [LambdaControls](https://github.com/LambdAurora/LambdaControls) by the amazing [LambdAurora](https://github.com/LambdAurora), which was sadly discontinued. ## What's this mod? @@ -56,5 +56,5 @@ This mod also adds controller support. Just do `./gradlew build` and everything should build just fine! -[fabric]: https://fabricmc.net -[Mod loader: Fabric]: https://img.shields.io/badge/modloader-Fabric-1976d2?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTEyLTE2VDE2OjU0OjE3LTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0wNy0yOFQyMToxNzo0OC0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wNy0yOFQyMToxNzo0OC0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowZWRiMWMyYy1mZjhjLWU0NDEtOTMxZi00OTVkNGYxNGM3NjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MGVkYjFjMmMtZmY4Yy1lNDQxLTkzMWYtNDk1ZDRmMTRjNzYwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGVkYjFjMmMtZmY4Yy1lNDQxLTkzMWYtNDk1ZDRmMTRjNzYwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowZWRiMWMyYy1mZjhjLWU0NDEtOTMxZi00OTVkNGYxNGM3NjAiIHN0RXZ0OndoZW49IjIwMTgtMTItMTZUMTY6NTQ6MTctMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4/HiGMAAAAtUlEQVRYw+XXrQqAMBQF4D2P2eBL+QIG8RnEJFaNBjEum+0+zMQLtwwv+wV3ZzhhMDgfJ0wUSinxZUQWgKos1JP/AbD4OneIDyQPwCFniA+EJ4CaXm4TxAXCC0BNHgLhAdAnx9hC8PwGSRtAFVMQjF7cNTWED8B1cgwW20yfJgAvrssAsZ1cB3g/xckAxr6FmCDU5N6f488BrpCQ4rQBJkiMYh4ACmLzwOQF0CExinkCsvw7vgGikl+OotaKRwAAAABJRU5ErkJggg== +[quilt]: https://quiltmc.org +[Mod loader: Quilt]: https://img.shields.io/badge/modloader-Quilt%2FFabric-blueviolet?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAADGAAAAxgGwdJvFAAAFU0lEQVR4nO1bwW7bOBCdCHtP+wUNxIvhS7yA7kkPOjf9AKPam4/OF2zzB96bblXhH0jPPkS5G1jnIvgib/IFtX/ALoYZemmKtEWRRe3aDzAsURbJGQ6HM4/02Wq1gmNGcNTSnxQA8IdakDK4AOCfJpj3SpiI98r2rAMAbxrWNWFFOMeL1nCJdXQa1gPTbpCbnm34ABIeBThv2hgAfOyVcF+2ZwkAfHGo54kVIRe6NVxiny4d6vpn2g36ugfqFLhwFB6kkUoc67k0XLv0qYKj9wEnBXiqZwEAf/ZKOOuV8BkLWBFesyI8A4C/LOt6AoC39C7HtBvg9Vt65hUnC/BUDzrOf1MGq5S9WkDZnuVle7ZqsBKgw/tO73K0hku8/u64EmhxsoA96MMvxdEroBIKO+CWoshnqqJPYTAGRJ8sql3QO3Op7D19D3z7AV8KeAGArFf+32lWhDwnKNuzuaUCclaE93KBiOU9hMQV+FLAOxz9lPHRR0VkZXs2oBDUNon5ULZnKOgcYwl4FTwna/K+CtRRwIK+dTnCCwkP9I0fkXmh4FcN+6UKqqtHblvtb+18po4TvKaPilsS8qVuYx5havsbJXS1I0ZVAXP1B5jfyzm+hAnN+We1XPluioX03kJtY9oNtG1T+b1aburDxhRAQVMGHw3z9k65F41nktmjUnjjrAj7ZXv27ECIyEKgBd7saBuka7lsPu0GA1MjR0+KVpwgMTlrMkN4YoztlZ/2camTvD0QjcWZF6KxMgcLyKbdAN+HKOb1y6PYH49gEsUwUKw1G48gi2KQZcApkYxH1eldUQBxeKbkRfXEQjDZ21+h2bMiHJDwH2wk1rSX0XWueHZd2yCZ/oVSnilTaA3VAiqjRRahQ0JBjuov3ijfPqAua0kUg67tmyjWCmvsS504wGQRnywjPJ8wtY3xw3827fjMBXziUalL3DcNrIzYRwXcTbvBZ7lgPHoNxKKYky1/+2xsHxXQbw2X/EIoggQHyjC9Yh8VcC6NshDc66jLOHpC5KSAPejDL8U+KuArboTQZgjHeARn+MFnvhvbRyfYaQ2XfNkTVFgUr/mIxlvkJuyjAjCae6BrYQUPW37vhDpT4MnAsCyIgbHBnYbcADJt7/t+deBCiSWsCG8sOv5IgU2FnJh2g+RnBDl1oCpgogqEx1TEURUFokx+tpCYnEzzjg1kh+fq/Ix9OXpG6OjjgI1VIGWcOMhlXh4PPdAz1VTe90rIU8Z/L9JUnALXSK4SjSUzOY+Y1ekyOlzjaamTvf3X8cjunBH1v6OeVtsG1QI66qYEVkoVmyA/O5fYmIHjgSsrskUavAc6q1BLeXXiANMZu0HKwGav7opGv+LticZqHOToLBeZrJRxC97qjOsowCTgZYO9OlNa25haMwgvsFMJPp3gLW1ji8b6dO89fhfYIbzAl23T4adtjyNvD6/mbbs9Xgs1hRcwWoIvCxDb47nQNm5aRDHvoPGcblNYCi+gtQSfU+AdLYfioLXYtHA9eruBhsILVJRwUIGQo/ACG0o4GAV4El5grQSffMA3SqbEnBdb1zeunfYsvAB3jL4UwE92KauA2NnNbLerNKhEqJ6Q+FIAOjpcATAVzjFHoC3qC9OurCW0W9s+6vXpAy4p0hPkSUL3ziNHiY3tqfNdQN4jORgnSEGMLyU8Udbq1QIEdEyRF3hSwlp4vKkwQimrHDuxAR6S4tleFIPzERnhSFXQEtbkD1kbwiMOlhJroISK8IiDpcQsp4NWeMRBc4I1lWAUHnHwpOgOJWwVHvFbsMIGJewUHvFb7QuQYxR/ttgIzbUAgB9KOM3uc+PN7QAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/build.gradle b/build.gradle index a00dd9f..b52dc44 100644 --- a/build.gradle +++ b/build.gradle @@ -3,11 +3,9 @@ plugins { id 'java-library' id 'maven-publish' id 'com.github.johnrengelman.shadow' version '7.0.0' - id 'org.cadixdev.licenser' version '0.6.1' id 'com.modrinth.minotaur' version '1.2.+' } -import net.fabricmc.loom.task.RemapJarTask import com.google.gson.GsonBuilder import com.google.gson.JsonObject import com.modrinth.minotaur.TaskModrinthUpload @@ -41,14 +39,6 @@ String getMCVersionString() { return version[0] + '.' + version[1] } -String getTerraformersMCMaven() { - def terraformersUrl = 'https://maven.terraformersmc.com/' - if (pingUrl(terraformersUrl)) - return terraformersUrl - else - return 'https://maven.kotlindiscord.com/repository/terraformers/' -} - boolean pingUrl(String address) { try { def conn = (HttpURLConnection) new URL(address).openConnection() @@ -65,7 +55,6 @@ String parseReadme() { def readme = (String) file('README.md').text readme = readme.replaceAll(excludeRegex, '') - readme = readme.replaceAll(linkRegex, '![$1](https://raw.githubusercontent.com/LambdAurora/midnightcontrols/1.17/$2)') return readme } @@ -82,18 +71,12 @@ repositories { name 'CottonMC' url 'https://server.bbkr.space/artifactory/libs-snapshot' } - maven { - name 'TerraformersMC' - url getTerraformersMCMaven() - content { - includeGroup 'dev.emi' - includeGroup 'com.terraformersmc' - } - } + maven { url "https://maven.terraformersmc.com/releases/" } maven { url 'https://maven.kosmx.dev' } maven { url 'https://maven.shedaniel.me/' } maven { url 'https://jitpack.io' } maven { url "https://api.modrinth.com/maven" } + maven { url 'https://maven.quiltmc.org/repository/release'} } configurations { @@ -121,10 +104,10 @@ dependencies { modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" // Compatibility mods - modImplementation("com.github.EnnuiL:okzoomer:e6a801b1a3") { - exclude group: 'com.terraformersmc' - exclude group: 'dev.lambdaurora' - } + modImplementation("maven.modrinth:ok-zoomer:${project.ok_zoomer_version}") + modImplementation "io.github.ennuil:LibZoomer:${project.libzoomer_version}" + modImplementation "org.quiltmc:quilt-json5:1.0.0" + modImplementation("me.shedaniel:RoughlyEnoughItems-runtime-fabric:${project.rei_version}") modImplementation "maven.modrinth:emotecraft:${project.emotecraft_version}" modImplementation "io.github.kosmx:bendy-lib:${project.bendylib_version}" @@ -159,17 +142,6 @@ processResources { } } -jar { - from('LICENSE') { - rename { "${it}_${project.archivesBaseName}" } - } -} - -license { - header file('HEADER') - include '**/*.java' -} - task publishModrinth(type: TaskModrinthUpload) { dependsOn(build) onlyIf { diff --git a/gradle.properties b/gradle.properties index b1e9276..3c28ee5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=1.18.1+build.22 loader_version=0.13.3 # Mod Properties -mod_version = 0.1.0 +mod_version = 0.2.0 maven_group = eu.midnightdust archives_base_name = midnightcontrols modrinth_id=W1D3UXEc @@ -21,3 +21,6 @@ midnightlib_version=0.4.0 modmenu_version=2.0.2 emotecraft_version=2.1-MC1.18.1-fabric bendylib_version=2.0.+ +rei_version=7.4.456 +ok_zoomer_version=5.0.0-beta.3+1.17.1 +libzoomer_version = 0.3.0+1.17.1 diff --git a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java index 8a714ed..115bb05 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControls.java @@ -26,10 +26,10 @@ import java.util.Objects; import java.util.Optional; /** - * Represents the midnightcontrols mod. + * Represents the MidnightControls mod. * - * @author LambdAurora - * @version 1.7.0 + * @author LambdAurora & Motschen + * @version 1.8.0 * @since 1.0.0 */ public class MidnightControls implements ModInitializer { @@ -40,12 +40,12 @@ public class MidnightControls implements ModInitializer { public static final TranslatableText NOT_BOUND_TEXT = new TranslatableText("midnightcontrols.not_bound"); - public final Logger logger = LogManager.getLogger("midnightcontrols"); + public final Logger logger = LogManager.getLogger("MidnightControls"); @Override public void onInitialize() { INSTANCE = this; - this.log("Initializing midnightcontrols..."); + this.log("Initializing MidnightControls..."); ServerPlayNetworking.registerGlobalReceiver(HELLO_CHANNEL, (server, player, handler, buf, responseSender) -> { String version = buf.readString(32); @@ -68,7 +68,7 @@ public class MidnightControls implements ModInitializer { * @param info the message to print */ public void log(String info) { - this.logger.info("[midnightcontrols] " + info); + this.logger.info("[MidnightControls] " + info); } /** @@ -77,7 +77,7 @@ public class MidnightControls implements ModInitializer { * @param warning the warning to print */ public void warn(String warning) { - this.logger.info("[midnightcontrols] " + warning); + this.logger.info("[MidnightControls] " + warning); } /** @@ -119,9 +119,9 @@ public class MidnightControls implements ModInitializer { } /** - * Gets the midnightcontrols instance. + * Gets the MidnightControls instance. * - * @return the midnightcontrols instance + * @return the MidnightControls instance */ public static MidnightControls get() { return INSTANCE; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java index 9d70186..0593e7e 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/MidnightControlsConstants.java @@ -13,7 +13,7 @@ package eu.midnightdust.midnightcontrols; import net.minecraft.util.Identifier; /** - * Represents the constants used by midnightcontrols. + * Represents the constants used by MidnightControls. * * @author LambdAurora * @version 1.1.0 diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java index cb295c1..15f3827 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -46,7 +46,6 @@ public class MidnightControlsConfig extends MidnightConfig { @Entry public static int[] reacharoundOutlineColor = new int[]{255, 255, 255, 102}; // Controller @Entry public static ControllerType controllerType = ControllerType.DEFAULT; - //private static final double DEFAULT_DEAD_ZONE = 0.25; @Entry public static double rightDeadZone = 0.25; @Entry public static double leftDeadZone = 0.25; @Entry public static boolean invertRightYAxis = false; @@ -124,7 +123,7 @@ public class MidnightControlsConfig extends MidnightConfig { if (raw instanceof Number) { if (((Number) raw).intValue() == -1) return Optional.empty(); - return Optional.of(Controller.byId((Integer) raw)); + return Optional.of(Controller.byId(((Number) raw).intValue())); } else if (raw instanceof String) { return Optional.of(Controller.byGuid((String) raw).orElse(Controller.byId(GLFW.GLFW_JOYSTICK_1))); } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java index 70d2ab4..35ada2a 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java @@ -70,7 +70,7 @@ import static org.lwjgl.glfw.GLFW.*; public class MidnightInput { private static final Map BUTTON_COOLDOWNS = new HashMap<>(); // Cooldowns - private int actionGuiCooldown = 0; + public int actionGuiCooldown = 0; private boolean ignoreNextARelease = false; private double targetYaw = 0.0; private double targetPitch = 0.0; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java index 23abf68..0c13979 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java @@ -13,9 +13,7 @@ import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; import io.github.kosmx.emotes.arch.gui.screen.ingame.FastChosseScreen; import io.github.kosmx.emotes.main.network.ClientEmotePlay; -import net.minecraft.client.gui.screen.Screen; import org.jetbrains.annotations.NotNull; -import org.lwjgl.glfw.GLFW; /** * Represents a compatibility handler for Emotecraft. diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsCompat.java b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsCompat.java index cfc067e..563dfcc 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsCompat.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsCompat.java @@ -31,7 +31,7 @@ import java.util.stream.Stream; * @since 1.1.0 */ public class MidnightControlsCompat { - private static final List HANDLERS = new ArrayList<>(); + public static final List HANDLERS = new ArrayList<>(); /** * Initializes compatibility with other mods if needed. diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsMixinPlugin.java b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsMixinPlugin.java index 7a1d915..d746747 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsMixinPlugin.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/MidnightControlsMixinPlugin.java @@ -36,7 +36,7 @@ public class MidnightControlsMixinPlugin implements IMixinConfigPlugin { } private void putConditionalMixin(@NotNull String path, boolean condition) { - this.conditionalMixins.put("me.lambdaurora.midnightcontrols.client.compat.mixin." + path, condition); + this.conditionalMixins.put("eu.midnightdust.midnightcontrols.client.compat.mixin." + path, condition); } @Override diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/ReiCompat.java b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/ReiCompat.java index 31f7c74..8fa82e1 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/ReiCompat.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/ReiCompat.java @@ -11,15 +11,39 @@ package eu.midnightdust.midnightcontrols.client.compat; import eu.midnightdust.midnightcontrols.client.ButtonState; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; +import eu.midnightdust.midnightcontrols.client.compat.mixin.EntryListWidgetAccessor; +import eu.midnightdust.midnightcontrols.client.compat.mixin.EntryWidgetAccessor; import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; import eu.midnightdust.midnightcontrols.client.controller.InputHandlers; import eu.midnightdust.midnightcontrols.client.controller.PressAction; +import me.shedaniel.rei.RoughlyEnoughItemsCoreClient; +import me.shedaniel.rei.impl.client.ClientHelperImpl; +import me.shedaniel.rei.impl.client.REIRuntimeImpl; +import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; +import me.shedaniel.rei.impl.client.gui.screen.CompositeDisplayViewingScreen; +import me.shedaniel.rei.impl.client.gui.screen.DefaultDisplayViewingScreen; +import me.shedaniel.rei.impl.client.gui.widget.EntryListEntryWidget; +import me.shedaniel.rei.impl.client.gui.widget.EntryWidget; +import me.shedaniel.rei.impl.client.registry.screen.ScreenRegistryImpl; +import me.shedaniel.rei.impl.common.entry.AbstractEntryStack; +import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; +import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.EntryListWidget; import net.minecraft.util.Identifier; +import net.minecraft.util.Pair; +import org.aperlambda.lambdacommon.utils.LambdaReflection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; +import java.util.Optional; + +import static eu.midnightdust.midnightcontrols.client.compat.CompatHandler.SlotPos.INVALID_SLOT; import static org.lwjgl.glfw.GLFW.*; /** @@ -30,11 +54,11 @@ import static org.lwjgl.glfw.GLFW.*; * @since 1.2.0 */ public class ReiCompat implements CompatHandler { - //private static EntryListWidget ENTRY_LIST_WIDGET; + private static EntryListWidget ENTRY_LIST_WIDGET; @Override public void handle(@NotNull MidnightControlsClient mod) { - ButtonBinding.builder(new Identifier("rei", "category_back")) + /*ButtonBinding.builder(new Identifier("rei", "category_back")) .buttons(GLFW_GAMEPAD_BUTTON_LEFT_BUMPER) .filter((client, binding) -> isViewingScreen(client.currentScreen)) .action(handleTab(false)) @@ -87,38 +111,40 @@ public class ReiCompat implements CompatHandler { .action(handleShowRecipeUsage(false)) .cooldown(true) .register(); + */ } + /* @Override public boolean requireMouseOnScreen(Screen screen) { - return isViewingScreen(screen) /*|| screen instanceof PreRecipeViewingScreen*/; + return isViewingScreen(screen); } @Override - public @Nullable SlotPos getSlotAt(@NotNull Screen screen, int mouseX, int mouseY) { - /*var overlay = ScreenHelper.getOptionalOverlay(); - if (overlay.isPresent() && overlay.get().isInside(mouseX, mouseY)) { - var widget = getEntryListWidget(); + public @Nullable CompatHandler.SlotPos getSlotAt(@NotNull Screen screen, int mouseX, int mouseY) { + + ScreenOverlayImpl overlay = ScreenOverlayImpl.getInstance(); + if (overlay.isInside(mouseX, mouseY)) { + EntryListWidget widget = getEntryListWidget(); if (widget == null) return null; - var slot = this.getSlotAt(widget, mouseX, mouseY, false); - if (slot != null && slot != INVALID_SLOT) - return slot; + return this.getSlotAt(widget, mouseX, mouseY, false); } else if (isViewingScreen(screen)) { - for (var element : screen.children()) { + for (Element element : screen.children()) { var slot = this.getSlotAt(element, mouseX, mouseY, true); - if (slot != null && slot != INVALID_SLOT) + if (slot != null) return slot; } - }*/ + } return null; } - /*private @Nullable SlotPos getSlotAt(@NotNull Element element, int mouseX, int mouseY, boolean allowEmpty) { - if (element instanceof EntryWidget entry) { + private @Nullable CompatHandler.SlotPos getSlotAt(@NotNull Element element, int mouseX, int mouseY, boolean allowEmpty) { + if (element instanceof EntryWidget) { + EntryWidget entry = (EntryWidget) element; if (entry.containsMouse(mouseX, mouseY)) { - if (!allowEmpty && entry.entries().isEmpty()) + if (!allowEmpty && entry.getEntries().isEmpty()) return INVALID_SLOT; return new SlotPos(entry.getBounds().getX() + 1, entry.getBounds().getY() + 1); } @@ -137,11 +163,10 @@ public class ReiCompat implements CompatHandler { } } return null; - }*/ + } private static boolean isViewingScreen(Screen screen) { - return true; - //return screen instanceof DefaultDisplayViewingScreen || screen instanceof CompositeDisplayViewingScreen; + return screen instanceof DefaultDisplayViewingScreen || screen instanceof CompositeDisplayViewingScreen; } @Override @@ -149,12 +174,12 @@ public class ReiCompat implements CompatHandler { if (!isViewingScreen(screen)) return false; - /*MinecraftClient.getInstance().openScreen(REIRuntimeImpl.getInstance().getPreviousContainerScreen()); - ScreenHelper.getLastOverlay().init();*/ + MinecraftClient.getInstance().setScreen(REIRuntimeImpl.getInstance().getPreviousContainerScreen()); + REIRuntimeImpl.getInstance().getLastOverlay().init(); return true; } - /*private static EntryListWidget getEntryListWidget() { + private static EntryListWidget getEntryListWidget() { if (ENTRY_LIST_WIDGET == null) { ENTRY_LIST_WIDGET = LambdaReflection.getFirstFieldOfType(ContainerScreenOverlay.class, EntryListWidget.class) .map(field -> (EntryListWidget) LambdaReflection.getFieldValue(null, field)) @@ -163,55 +188,56 @@ public class ReiCompat implements CompatHandler { return ENTRY_LIST_WIDGET; } - private static @Nullable EntryStack getCurrentStack(@NotNull MinecraftClient client) { + private static @Nullable AbstractEntryStack getCurrentStack(@NotNull MinecraftClient client) { double x = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth(); double y = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight(); if (isViewingScreen(client.currentScreen)) { - for (var element : client.currentScreen.children()) { - var stack = getCurrentStack(element, x, y); + for (Element element : client.currentScreen.children()) { + EntryStack stack = getCurrentStack(element, x, y); if (stack != null) return stack; } } - var overlay = ScreenHelper.getOptionalOverlay(); + Optional overlay = REIRuntimeImpl.getInstance().getOverlay(false,false); if (!overlay.isPresent()) return RecipeHelper.getInstance().getScreenFocusedStack(client.currentScreen); - var widget = getEntryListWidget(); + EntryListWidget widget = getEntryListWidget(); if (widget == null) - return RecipeHelper.getInstance().getScreenFocusedStack(client.currentScreen); + return ScreenOverlayImpl.getInstance().getInstance().getOverlayMenu()..getScreenFocusedStack(client.currentScreen); return getCurrentStack(widget, x, y); } private static @Nullable EntryStack getCurrentStack(@NotNull Element element, double mouseX, double mouseY) { - if (element instanceof EntryWidget entry) { + if (element instanceof EntryWidget) { + EntryWidget entry = (EntryWidget) element; if (entry.containsMouse(mouseX, mouseY)) - return ((EntryWidgetAccessor) entry).midnightcontrols_getCurrentEntry(); + return ((EntryWidgetAccessor) entry).lambdacontrols_getCurrentEntry(); } else if (element instanceof EntryListWidget) { - var entries = ((EntryListWidgetAccessor) element).getEntries(); + List entries = ((EntryListWidgetAccessor) element).getEntries(); for (EntryListEntryWidget entry : entries) { if (entry.containsMouse(mouseX, mouseY)) { - return ((EntryWidgetAccessor) entry).midnightcontrols_getCurrentEntry(); + return ((EntryWidgetAccessor) entry).lambdacontrols_getCurrentEntry(); } } - } else if (!(element instanceof ButtonWidget) && element instanceof WidgetWithBounds widgetWithBounds) { - for (var child : widgetWithBounds.children()) { - var stack = getCurrentStack(child, mouseX, mouseY); + } else if (!(element instanceof ButtonWidget) && element instanceof WidgetWithBounds) { + for (Element child : ((WidgetWithBounds) element).children()) { + EntryStack stack = getCurrentStack(child, mouseX, mouseY); if (stack != null) return stack; } } return null; - }*/ + } private static PressAction handleShowRecipeUsage(boolean usage) { return (client, button, value, action) -> { if (action.isUnpressed()) return false; - /*EntryStack stack = RecipeHelper.getInstance().getScreenFocusedStack(client.currentScreen); + EntryStack stack = RecipeHelper.getInstance().getScreenFocusedStack(client.currentScreen); if (stack == null) { stack = getCurrentStack(client); } @@ -223,7 +249,7 @@ public class ReiCompat implements CompatHandler { } else { return ClientHelper.getInstance().openView(ClientHelper.ViewSearchBuilder.builder().addRecipesFor(stack).setOutputNotice(stack).fillPreferredOpenedCategory()); } - }*/ + } return false; }; @@ -234,11 +260,11 @@ public class ReiCompat implements CompatHandler { if (action == ButtonState.RELEASE) return false; - /*Optional overlay = ScreenHelper.getOptionalOverlay(); + Optional overlay = ScreenHelper.getOptionalOverlay(); if (!overlay.isPresent()) return false; - var widget = getEntryListWidget(); + EntryListWidget widget = getEntryListWidget(); if (widget == null) return false; @@ -246,7 +272,7 @@ public class ReiCompat implements CompatHandler { widget.nextPage(); else widget.previousPage(); - widget.updateEntriesPosition();*/ + widget.updateEntriesPosition(); return true; }; @@ -258,27 +284,28 @@ public class ReiCompat implements CompatHandler { * @param next True if the action is to switch to the next tab. * @return The handler. */ + /* private static PressAction handleTab(boolean next) { return (client, button, value, action) -> { if (action != ButtonState.RELEASE) return false; - /*if (client.currentScreen instanceof DefaultDisplayViewingScreen) { + if (client.currentScreen instanceof RecipeViewingScreen) { RecipeViewingScreenAccessor screen = (RecipeViewingScreenAccessor) client.currentScreen; if (next) screen.getCategoryNext().onClick(); else screen.getCategoryBack().onClick(); return true; - } else if (client.currentScreen instanceof CompositeDisplayViewingScreen) { + } else if (client.currentScreen instanceof VillagerRecipeViewingScreen) { VillagerRecipeViewingScreenAccessor screen = (VillagerRecipeViewingScreenAccessor) client.currentScreen; List> categories = screen.getCategories(); int currentTab = screen.getSelectedCategoryIndex(); screen.setSelectedCategoryIndex(getNextIndex(currentTab, categories.size(), next)); screen.setSelectedRecipeIndex(0); - screen.midnightcontrols_init(); + screen.lambdacontrols_init(); return true; - }*/ + } return false; }; } @@ -288,13 +315,15 @@ public class ReiCompat implements CompatHandler { if (action.isUnpressed()) return false; - /*if (client.currentScreen instanceof RecipeViewingScreenAccessor screen) { + if (client.currentScreen instanceof RecipeViewingScreen) { + RecipeViewingScreenAccessor screen = (RecipeViewingScreenAccessor) client.currentScreen; if (next) screen.getRecipeNext().onClick(); else screen.getRecipeBack().onClick(); return true; - } else if (client.currentScreen instanceof VillagerRecipeViewingScreenAccessor screen) { + } else if (client.currentScreen instanceof VillagerRecipeViewingScreen) { + VillagerRecipeViewingScreenAccessor screen = (VillagerRecipeViewingScreenAccessor) client.currentScreen; List> categories = screen.getCategories(); int currentTab = screen.getSelectedCategoryIndex(); List recipes = screen.getCategoryMap().get(categories.get(currentTab)); @@ -315,10 +344,10 @@ public class ReiCompat implements CompatHandler { } screen.setSelectedRecipeIndex(nextRecipe); - screen.midnightcontrols_init(); + screen.lambdacontrols_init(); return true; - }*/ + } return false; }; @@ -332,4 +361,5 @@ public class ReiCompat implements CompatHandler { nextIndex = 0; return nextIndex; } -} + */ +} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/mixin/EntryListWidgetAccessor.java b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/mixin/EntryListWidgetAccessor.java index 4ebf374..ee027a9 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/mixin/EntryListWidgetAccessor.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/mixin/EntryListWidgetAccessor.java @@ -9,6 +9,13 @@ package eu.midnightdust.midnightcontrols.client.compat.mixin; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.widget.EntryListWidget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + /** * Represents an accessor to REI's EntryListWidget. * @@ -16,8 +23,8 @@ package eu.midnightdust.midnightcontrols.client.compat.mixin; * @version 1.5.0 * @since 1.5.0 */ -//@Mixin(value = EntryListWidget.class, remap = false) +@Mixin(value = EntryListWidget.class, remap = false) public interface EntryListWidgetAccessor { - /*@Accessor(value = "entries") - List getEntries();*/ + @Accessor(value = "children") + List getEntries(); } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java index 544176e..1153ee2 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java @@ -14,6 +14,7 @@ import eu.midnightdust.midnightcontrols.MidnightControlsConstants; import eu.midnightdust.midnightcontrols.client.HudSide; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; +import eu.midnightdust.midnightcontrols.client.MidnightInput; import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat; import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; import dev.lambdaurora.spruceui.hud.Hud; @@ -77,7 +78,7 @@ public class MidnightControlsHud extends Hud { */ @Override public void render(MatrixStack matrices, float tickDelta) { - if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && this.client.currentScreen == null) { + if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && this.client.currentScreen == null && MidnightControlsConfig.getController().isConnected() && MidnightControlsConfig.getController().isGamepad()) { int y = bottom(2); this.renderFirstIcons(matrices, MidnightControlsConfig.hudSide == HudSide.LEFT ? 2 : client.getWindow().getScaledWidth() - 2, y); this.renderSecondIcons(matrices, MidnightControlsConfig.hudSide == HudSide.RIGHT ? 2 : client.getWindow().getScaledWidth() - 2, y); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java index c545e43..4e3ab21 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java @@ -9,6 +9,10 @@ package eu.midnightdust.midnightcontrols.client.gui; +import com.mojang.blaze3d.systems.RenderSystem; +import dev.lambdaurora.spruceui.background.Background; +import dev.lambdaurora.spruceui.widget.SpruceWidget; +import eu.midnightdust.lib.util.MidnightColorUtil; import eu.midnightdust.midnightcontrols.MidnightControls; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; @@ -27,6 +31,7 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.render.*; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.LiteralText; @@ -35,8 +40,11 @@ import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; import net.minecraft.util.Util; +import net.minecraft.util.math.Matrix4f; import org.lwjgl.glfw.GLFW; +import java.awt.*; + /** * Represents the midnightcontrols settings screen. */ @@ -158,7 +166,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { ClientPlayNetworking.getSender().sendPacket(MidnightControls.CONTROLS_MODE_CHANNEL, this.mod.makeControlsModeBuffer(next)); } }, option -> option.getDisplayText(new TranslatableText(MidnightControlsConfig.controlsMode.getTranslationKey())), - new TranslatableText("midnightcontrols.tooltip.controls_mode")); + new TranslatableText("midnightcontrols.tooltip.controlsMidnightColorUtil.radialRainbow(1f,1f);_mode")); this.autoSwitchModeOption = new SpruceToggleBooleanOption("midnightcontrols.menu.auto_switch_mode", () -> MidnightControlsConfig.autoSwitchMode, value -> MidnightControlsConfig.autoSwitchMode = value, new TranslatableText("midnightcontrols.tooltip.auto_switch_mode")); this.rotationSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.rotation_speed", 0.0, 100.0, .5f, @@ -262,6 +270,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { var tabs = new SpruceTabbedWidget(Position.of(0, 24), this.width, this.height - 32 - 24, null, Math.max(116, this.width / 8), 0); + tabs.getList().setBackground(new MidnightControlsBackground()); this.addDrawableChild(tabs); tabs.addSeparatorEntry(new TranslatableText("midnightcontrols.menu.separator.general")); @@ -368,4 +377,35 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { public void renderTitle(MatrixStack matrices, int mouseX, int mouseY, float delta) { drawCenteredText(matrices, this.textRenderer, I18n.translate("midnightcontrols.menu.title"), this.width / 2, 8, 16777215); } + + public static class MidnightControlsBackground implements Background { + @Override + public void render(MatrixStack matrixStack, SpruceWidget widget, int vOffset, int mouseX, int mouseY, float delta) { + fill(matrixStack, widget.getX(), widget.getY(), widget.getX() + widget.getWidth(), widget.getY() + widget.getHeight(), MidnightColorUtil.hex2Rgb("#000000")); + } + private void fill(MatrixStack matrixStack, int x2, int y2, int x1, int y1, Color color) { + matrixStack.push(); + + Matrix4f matrix = matrixStack.peek().getPositionMatrix(); + float r = (float)(color.getRed()) / 255.0F; + float g = (float)(color.getGreen()) / 255.0F; + float b = (float)(color.getBlue()) / 255.0F; + float t = (float)(160) / 255.0F; + BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.enableBlend(); + RenderSystem.disableTexture(); + RenderSystem.defaultBlendFunc(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + bufferBuilder.vertex(matrix, (float)x1, (float)y2, 0.0F).color(r, g, b, t).next(); + bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t).next(); + bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t).next(); + bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t).next(); + bufferBuilder.end(); + BufferRenderer.draw(bufferBuilder); + RenderSystem.enableTexture(); + RenderSystem.disableBlend(); + matrixStack.pop(); + } + } } diff --git a/src/main/resources/assets/midnightcontrols/textures/gui/controller_axis.png b/src/main/resources/assets/midnightcontrols/textures/gui/controller_axis.png index de1f6b5..f52f81e 100644 Binary files a/src/main/resources/assets/midnightcontrols/textures/gui/controller_axis.png and b/src/main/resources/assets/midnightcontrols/textures/gui/controller_axis.png differ diff --git a/src/main/resources/assets/midnightcontrols/textures/gui/controller_buttons.png b/src/main/resources/assets/midnightcontrols/textures/gui/controller_buttons.png index 45573c6..8fa618c 100644 Binary files a/src/main/resources/assets/midnightcontrols/textures/gui/controller_buttons.png and b/src/main/resources/assets/midnightcontrols/textures/gui/controller_buttons.png differ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7f93078..024d159 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -9,8 +9,8 @@ "Motschen" ], "contact": { - "homepage": "https://github.com/TeamMidnightDust/MidnightControls", - "sources": "https://github.com/TeamMidnightDust/MidnightControls.git", + "homepage": "https://modrinth.com/mod/midnightcontrols", + "sources": "https://github.com/TeamMidnightDust/MidnightControls", "issues": "https://github.com/TeamMidnightDust/MidnightControls/issues" }, "license": "MIT", @@ -37,17 +37,16 @@ "fabric": ">=0.36.0", "minecraft": ">=1.17", "spruceui": ">=3.2.0", - "java": ">=16" + "java": ">=17" }, "recommends": { "modmenu": ">=1.12.2" }, "suggests": { - "flamingo": "*" + "quilt_loader": "*" }, "breaks": { "lambdacontrols": "*", - "modmenu": "<1.12.2", - "optifabric": "*" + "modmenu": "<1.12.2" } } diff --git a/src/main/resources/midnightcontrols_compat.mixins.json b/src/main/resources/midnightcontrols_compat.mixins.json index a41c333..040f2dc 100644 --- a/src/main/resources/midnightcontrols_compat.mixins.json +++ b/src/main/resources/midnightcontrols_compat.mixins.json @@ -1,6 +1,6 @@ { "required": true, - "package": "dev.lambdaurora.midnightcontrols.client.compat.mixin", + "package": "eu.midnightdust.midnightcontrols.client.compat.mixin", "plugin": "eu.midnightdust.midnightcontrols.client.compat.MidnightControlsMixinPlugin", "compatibilityLevel": "JAVA_16", "client": [