commit 3f90d46028e3e678f1f8a8c66f2487ef82716cea Author: liquidev Date: Tue Dec 31 22:36:29 2024 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5f737e --- /dev/null +++ b/.gitignore @@ -0,0 +1,119 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Cache of project +.gradletasknamecache + +**/build/ + +# Common working directory +run/ +runs/ + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..68a49da --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md new file mode 100644 index 0000000..24b7c60 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# No Auto Iconify + +A Minecraft mod which disables GLFW's default `AUTO_ICONIFY` behaviour. +This means your game will no longer minimise when you unfocus the window in fullscreen. + +I personally find this default behaviour annoying, so I made this mod in like 15 minutes to alleviate that. diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..3b68886 --- /dev/null +++ b/build.gradle @@ -0,0 +1,102 @@ +plugins { + id 'fabric-loom' version '1.9-SNAPSHOT' + id 'maven-publish' +} + +version = project.mod_version +group = project.maven_group + +base { + archivesName = project.archives_base_name +} + +loom { + splitEnvironmentSourceSets() + + mods { + "no-auto-iconify" { + sourceSet sourceSets.main + sourceSet sourceSets.client + } + } +} + +repositories { + // Add repositories to retrieve artifacts from in here. + // You should only use this when depending on other mods because + // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. + // See https://docs.gradle.org/current/userguide/declaring_repositories.html + // for more information about repositories. +} + +dependencies { + // To change the versions see the gradle.properties file + minecraft "com.mojang:minecraft:${project.minecraft_version}" + mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" +} + +processResources { + inputs.property "version", project.version + inputs.property "minecraft_version", project.minecraft_version + inputs.property "loader_version", project.loader_version + filteringCharset "UTF-8" + + filesMatching("fabric.mod.json") { + expand "version": project.version, + "minecraft_version": project.minecraft_version, + "loader_version": project.loader_version + } +} + +def targetJavaVersion = 21 +tasks.withType(JavaCompile).configureEach { + // ensure that the encoding is set to UTF-8, no matter what the system default is + // this fixes some edge cases with special characters not displaying correctly + // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html + // If Javadoc is generated, this must be specified in that task too. + it.options.encoding = "UTF-8" + if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { + it.options.release.set(targetJavaVersion) + } +} + +java { + def javaVersion = JavaVersion.toVersion(targetJavaVersion) + if (JavaVersion.current() < javaVersion) { + toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) + } + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() +} + +tasks { + jar { + from("LICENSE") { + rename { "${it}_${project.archivesBaseName}" } + } + } +} + + +// configure the maven publication +publishing { + publications { + create("mavenJava", MavenPublication) { + artifactId = project.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..81430cb --- /dev/null +++ b/gradle.properties @@ -0,0 +1,14 @@ +# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx1G +# Fabric Properties +# check these on https://modmuss50.me/fabric.html +minecraft_version=1.21.4 +yarn_mappings=1.21.4+build.4 +loader_version=0.16.9 +# Mod Properties +mod_version=1.0-SNAPSHOT +maven_group=net.liquidev +archives_base_name=NoAutoIconify +# Dependencies +# check this on https://modmuss50.me/fabric.html +fabric_version=0.112.0+1.21.4 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ab6f03b --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..f91a4fe --- /dev/null +++ b/settings.gradle @@ -0,0 +1,9 @@ +pluginManagement { + repositories { + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + gradlePluginPortal() + } +} diff --git a/src/client/java/net/liquidev/noAutoIconify/client/NoAutoIconifyClient.java b/src/client/java/net/liquidev/noAutoIconify/client/NoAutoIconifyClient.java new file mode 100644 index 0000000..af298e0 --- /dev/null +++ b/src/client/java/net/liquidev/noAutoIconify/client/NoAutoIconifyClient.java @@ -0,0 +1,10 @@ +package net.liquidev.noAutoIconify.client; + +import net.fabricmc.api.ClientModInitializer; + +public class NoAutoIconifyClient implements ClientModInitializer { + + @Override + public void onInitializeClient() { + } +} diff --git a/src/client/java/net/liquidev/noAutoIconify/mixin/client/NoAutoIconifyMixin.java b/src/client/java/net/liquidev/noAutoIconify/mixin/client/NoAutoIconifyMixin.java new file mode 100644 index 0000000..1a4b723 --- /dev/null +++ b/src/client/java/net/liquidev/noAutoIconify/mixin/client/NoAutoIconifyMixin.java @@ -0,0 +1,23 @@ +package net.liquidev.noAutoIconify.mixin.client; + +import net.minecraft.client.WindowEventHandler; +import net.minecraft.client.WindowSettings; +import net.minecraft.client.util.MonitorTracker; +import net.minecraft.client.util.Window; +import org.jetbrains.annotations.Nullable; +import org.lwjgl.glfw.GLFW; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Window.class) +public class NoAutoIconifyMixin { + @Inject( + method = "(Lnet/minecraft/client/WindowEventHandler;Lnet/minecraft/client/util/MonitorTracker;Lnet/minecraft/client/WindowSettings;Ljava/lang/String;Ljava/lang/String;)V", + at = @At(value = "INVOKE", target = "Lorg/lwjgl/glfw/GLFW;glfwWindowHint(II)V", ordinal = 1) + ) + private void constructor(WindowEventHandler eventHandler, MonitorTracker monitorTracker, WindowSettings settings, @Nullable String fullscreenVideoMode, String title, CallbackInfo info) { + GLFW.glfwWindowHint(GLFW.GLFW_AUTO_ICONIFY, GLFW.GLFW_FALSE); + } +} diff --git a/src/client/resources/no-auto-iconify.client.mixins.json b/src/client/resources/no-auto-iconify.client.mixins.json new file mode 100644 index 0000000..4de4d0f --- /dev/null +++ b/src/client/resources/no-auto-iconify.client.mixins.json @@ -0,0 +1,12 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.liquidev.noAutoIconify.mixin.client", + "compatibilityLevel": "JAVA_21", + "client": [ + "NoAutoIconifyMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/main/java/net/liquidev/noAutoIconify/NoAutoIconify.java b/src/main/java/net/liquidev/noAutoIconify/NoAutoIconify.java new file mode 100644 index 0000000..27dd725 --- /dev/null +++ b/src/main/java/net/liquidev/noAutoIconify/NoAutoIconify.java @@ -0,0 +1,10 @@ +package net.liquidev.noAutoIconify; + +import net.fabricmc.api.ModInitializer; + +public class NoAutoIconify implements ModInitializer { + + @Override + public void onInitialize() { + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..c54fe87 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "id": "no-auto-iconify", + "version": "${version}", + "name": "No Auto Iconify", + "description": "Disable the GLFW_AUTO_ICONIFY hint to prevent Minecraft from minimising itself when unfocused in fullscreen", + "authors": [], + "contact": {}, + "license": "unlicense", + "icon": "assets/no-auto-iconify/icon.png", + "environment": "client", + "entrypoints": { + "client": [ + "net.liquidev.noAutoIconify.client.NoAutoIconifyClient" + ], + "main": [ + "net.liquidev.noAutoIconify.NoAutoIconify" + ] + }, + "mixins": [ + "no-auto-iconify.mixins.json", + { + "config": "no-auto-iconify.client.mixins.json", + "environment": "client" + } + ], + "depends": { + "fabricloader": ">=${loader_version}", + "fabric": "*", + "minecraft": "${minecraft_version}" + } +} diff --git a/src/main/resources/no-auto-iconify.mixins.json b/src/main/resources/no-auto-iconify.mixins.json new file mode 100644 index 0000000..755aaef --- /dev/null +++ b/src/main/resources/no-auto-iconify.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.liquidev.noAutoIconify.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + ], + "injectors": { + "defaultRequire": 1 + } +}