diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a1cbb6d..7d8a599 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,31 +3,23 @@ on: push: branches: - 'main' + - 'master' + - '[0-9]+.[0-9]+.[0-9]+' - '[0-9]+.[0-9]+.x' - '[0-9]+.[0-9]+' paths-ignore: - '*.md' - 'LICENSE' - - '.github/**' tags-ignore: - '[0-9]+.[0-9]+.[0-9]+-[0-9]+.[0-9]+' - '[0-9]+.[0-9]+-[0-9]+.[0-9]+' + jobs: build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 17 - uses: actions/setup-java@v1 - with: - java-version: 17 - - name: Setup Build - run: chmod 777 gradlew - - name: Build with Gradle - id: build - env: - MAVEN_URL: ${{ vars.MAVEN_URL }} - MAVEN_USER: ${{ vars.MAVEN_USER }} - MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} - RELEASE_TYPE: snapshot - run: ./gradlew build publish + uses: MinecraftschurliMods/.github/.github/workflows/build-library.yml@main + with: + maven-url: ${{ vars.MAVEN_URL }} + maven-user: ${{ vars.MAVEN_USER }} + publish-to-maven: true + secrets: + MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 5cb2296..e2f1aa3 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -10,15 +10,4 @@ on: jobs: build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 17 - uses: actions/setup-java@v1 - with: - java-version: 17 - - name: Setup Build - run: chmod 777 gradlew - - name: Build with Gradle - id: build - run: ./gradlew build + uses: MinecraftschurliMods/.github/.github/workflows/build-library.yml@main diff --git a/README.md b/README.md new file mode 100644 index 0000000..a90bbb0 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +Better HUD Lib +============== diff --git a/build.gradle b/build.gradle deleted file mode 100644 index b6199cb..0000000 --- a/build.gradle +++ /dev/null @@ -1,201 +0,0 @@ -plugins { - id 'idea' - id 'eclipse' - id 'maven-publish' - id 'net.minecraftforge.gradle' - id 'org.parchmentmc.librarian.forgegradle' -} - -group = "${project.lib_group}" -version = "${project.mc_version}-${project.lib_version}" -archivesBaseName = "${project.lib_id}" - -if (System.getenv('RELEASE_TYPE') != null) { - status = System.getenv('RELEASE_TYPE').toLowerCase() - if (status == 'snapshot') status = status.toUpperCase() -} else { - status = 'SNAPSHOT' -} -if (status != 'release') { - version = "${version}-${status}" -} - -archivesBaseName = lib_id - -java { - toolchain { - languageVersion = JavaLanguageVersion.of(java_version as int) - vendor = JvmVendorSpec.ADOPTOPENJDK - } - withSourcesJar() - withJavadocJar() -} - -minecraft { - mappings channel: "${mappings_channel}", version: "${mappings_version}" - runs { - client - server - gameTestServer - data { - args '--mod', lib_id, '--all', '--output', file('src/main/generated/'), '--existing', file('src/main/resources/') - } - } - runs.configureEach { - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' - if (it.name != 'data') { - property 'forge.enabledGameTestNamespaces', lib_id - } - - mods.create(lib_id) { - source sourceSets.main - source sourceSets.test - } - } -} - -// Include resources generated by data generators. -sourceSets.main.resources { srcDir 'src/main/generated' } - -configurations { - deobfJar { - canBeConsumed = true - canBeResolved = false - } -} - -repositories { -} - -dependencies { - minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}" -} - -javadoc { - options.encoding = 'UTF-8' - options.tags = [ - 'side:a:Side:', - 'apiNote:a:API Note:', - 'implSpec:a:Implementation Requirements:', - 'implNote:a:Implementation Note:' - ] - if(JavaVersion.current().isJava9Compatible()) { - options.addBooleanOption('html5', true) - } -} - -tasks.withType(Jar).configureEach { - from 'LICENSE.md' - manifest { - attributes([ - 'Maven-Artifact' : "${group}:${archivesBaseName}:${version}", - 'Specification-Title' : archivesBaseName, - 'Specification-Vendor' : vendor, - 'Specification-Version' : project.jar.archiveVersion, - 'Implementation-Title' : archivesBaseName, - 'Implementation-Version' : project.jar.archiveVersion, - 'Implementation-Vendor' : vendor, - 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), - 'Timestampe' : System.currentTimeMillis(), - 'Built-On-Java' : "${System.getProperty('java.vm.version')} (${System.getProperty('java.vm.vendor')})", - 'Build-On-Minecraft' : mc_version, - 'FMLModType' : 'GAMELIBRARY', - 'LICENSE' : 'MIT' - ]) - } -} - -task deobfJar(type: Jar, dependsOn: classes) { - archiveClassifier.set('deobf') - from sourceSets.main.output -} - -tasks.withType(JavaCompile).configureEach { - it.options.encoding = 'UTF-8' - it.options.release = java_version as int -} - -artifacts { - archives jar - archives deobfJar - archives sourcesJar - archives javadocJar - deobfJar(deobfJar) -} - -tasks.withType(GenerateModuleMetadata) { - enabled = false -} - -publishing { - publications.create(project.archivesBaseName+'ToMaven', MavenPublication) { - artifacts = [deobfJar] - groupId = project.group - artifactId = project.archivesBaseName - version = project.version - from components.java - pom { - name = project.name - url = project.url - packaging = 'jar' - scm { - connection = "scm:git:git://github.com/${project.github}.git" - developerConnection = "scm:git:git@github.com:${project.github}.git" - url = "https://github.com/${project.github}" - } - issueManagement { - system = 'github' - url = "https://github.com/${project.github}.git/issues" - } - organization { - name = 'Minecraftschurli Mods' - url = 'https://github.com/Minecraftschurli' - } - developers { - developer { - id = 'minecraftschurli' - name = 'Minecraftschurli' - email = 'minecraftschurli@gmail.com' - organization = 'Minecraftschurli Mods' - organizationUrl = 'https://github.com/Minecraftschurli' - timezone = 'Europe/Vienna' - } - } - licenses { - license { - name = 'MIT' - url = "https://github.com/${project.github}/blob/main/LICENSE" - distribution = 'repo' - } - } - withXml { - asNode().dependencies.dependency.each { dep -> - if(dep.version.last().value().last().contains('_mapped_')) { - assert dep.parent().remove(dep) - } - } - } - } - } - repositories { - maven { - if ( - (System.getenv("MAVEN_USER") != null) && - (System.getenv("MAVEN_PASSWORD") != null) && - (System.getenv("MAVEN_URL") != null) - ) { - url System.getenv("MAVEN_URL") - credentials { - username System.getenv("MAVEN_USER") - password System.getenv("MAVEN_PASSWORD") - } - } else { - url "$buildDir/repo" - } - } - } -} - -jar.finalizedBy('reobfJar') diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..a382365 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,165 @@ +import java.time.Instant +import java.time.format.DateTimeFormatter + +plugins { + `java-library` + eclipse + idea + `maven-publish` + id("org.ec4j.editorconfig") + id("net.neoforged.gradle.userdev") +} +//============================================= + +editorconfig { + excludes = listOf("**/run/**", "**/out/**", "**/.idea/**", "**/gradlew*") + isExcludeNonSourceFiles = true +} + +group = "${project.properties["lib_group"]}" +version = "${project.properties["mc_version"]}-${project.properties["lib_version"]}" +base.archivesName = "${project.properties["lib_name"]}" + +if (System.getenv("RELEASE_TYPE") != null) { + status = System.getenv("RELEASE_TYPE").lowercase() + if (status == "snapshot") status = (status as String).uppercase() +} else { + status = "SNAPSHOT" +} + +if (status != "release") { + version = "${version}-${status}" +} + +java { + withSourcesJar() + withJavadocJar() + + toolchain { + languageVersion = JavaLanguageVersion.of((project.properties["java_version"] as String).toInt()) + vendor = if (System.getenv("CI").toBoolean()) { JvmVendorSpec.ADOPTIUM } else { JvmVendorSpec.JETBRAINS } + } +} + +tasks.withType().configureEach { + options.encoding = "UTF-8" +} + +repositories { + mavenLocal() + mavenCentral() + maven { + name = "Minecraftschurli Maven" + url = uri("https://minecraftschurli.ddns.net/repository/maven-public") + } +} + +dependencies { + implementation("net.neoforged:neoforge:${project.properties["neo_version"]}") + compileOnly("org.jetbrains:annotations:23.0.0") +} + +tasks.javadoc { + options.encoding = "UTF-8" + (options as StandardJavadocDocletOptions).tags = listOf( + "side:a:Side:", + "apiNote:a:API Note:", + "implSpec:a:Implementation Requirements:", + "implNote:a:Implementation Note:" + ) + if (JavaVersion.current().isJava9Compatible) { + (options as CoreJavadocOptions).addBooleanOption("html5", true) + } +} + +tasks.withType().configureEach { + from("LICENSE") + manifest { + attributes(mapOf( + "Maven-Artifact" to "${project.group}:${project.base.archivesName.get()}:${project.version}", + "Specification-Title" to base.archivesName.get(), + "Specification-Vendor" to project.properties["lib_vendor"], + "Specification-Version" to "1", + "Implementation-Title" to base.archivesName.get(), + "Implementation-Version" to project.properties["lib_version"], + "Implementation-Vendor" to project.properties["lib_vendor"], + "Built-On-Java" to "${System.getProperty("java.vm.version")} (${System.getProperty("java.vm.vendor")})", + "Built-On-Minecraft" to project.properties["mc_version"], + "Built-On" to project.properties["neo_version"], + "Timestamp" to DateTimeFormatter.ISO_INSTANT.format(Instant.now()), + "FMLModType" to "GAMELIBRARY", + "LICENSE" to "MIT" + )) + } +} + +artifacts { + archives(tasks.jar) + archives(tasks.named("sourcesJar")) + archives(tasks.named("javadocJar")) +} + +publishing { + publications.create(base.archivesName.get()+"ToMaven") { + groupId = project.group as String + artifactId = base.archivesName.get() + version = project.version as String + from(components.getByName("java")) + pom { + name = project.name + url = (project.properties["url"] as String) + packaging = "jar" + scm { + connection = "scm:git:git://github.com/${project.properties["github"]}.git" + developerConnection = "scm:git:git@github.com:${project.properties["github"]}.git" + url = "https://github.com/${project.properties["github"]}" + } + issueManagement { + system = "github" + url = "https://github.com/${project.properties["github"]}.git/issues" + } + organization { + name = "Minecraftschurli Mods" + url = "https://github.com/Minecraftschurli" + } + developers { + developer { + id = "minecraftschurli" + name = "Minecraftschurli" + email = "minecraftschurli@gmail.com" + organization = "Minecraftschurli Mods" + organizationUrl = "https://github.com/Minecraftschurli" + timezone = "Europe/Vienna" + } + } + licenses { + license { + name = "MIT" + url = "https://github.com/${project.properties["github"]}/blob/main/LICENSE" + distribution = "repo" + } + } + } + } + repositories { + maven { + if ((System.getenv("MAVEN_USER") != null) && + (System.getenv("MAVEN_PASSWORD") != null) && + (System.getenv("MAVEN_URL") != null) + ) { + url = uri(System.getenv("MAVEN_URL")) + credentials { + username = System.getenv("MAVEN_USER") + password = System.getenv("MAVEN_PASSWORD") + } + } else { + println("Using repo folder") + url = uri(project.layout.buildDirectory.dir("repo")) + } + } + } +} + +tasks.publish { + dependsOn(tasks.check) +} diff --git a/gradle.properties b/gradle.properties index 1f09c1b..a89acb7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,19 @@ -org.gradle.jvmargs=-Xmx3G +org.gradle.jvmargs=-Xmx4G org.gradle.daemon=false - -java_version=17 +org.gradle.caching=true lib_group=com.github.minecraftschurlimods +lib_name=betterhudlib lib_version=1.0 -lib_id=betterhudlib -vendor=Minecraftschurli +lib_vendor=Minecraftschurli github=MinecraftschurliMods/BetterHUDLib url=https://github.com/MinecraftschurliMods/BetterHUDLib -mc_version=1.20.1 -forge_version=47.0.34 +vendor=Minecraftschurli +java_version=17 + +neogradle.subsystems.parchment.minecraftVersion=1.20.3 +neogradle.subsystems.parchment.mappingsVersion=2023.12.31 -mappings_channel=parchment -mappings_version=2023.06.26-1.20.1 +mc_version=1.20.4 +neo_version=20.4.80-beta diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927..d64cd49 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fc..a80b22c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..1aa94a4 100644 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index ad9cac4..0000000 --- a/settings.gradle +++ /dev/null @@ -1,41 +0,0 @@ -pluginManagement { - plugins { - id 'org.ec4j.editorconfig' version '0.0.3' - id 'net.minecraftforge.gradle' version '5.1.+' - id 'org.parchmentmc.librarian.forgegradle' version '1.2+' - } - repositories { - gradlePluginPortal() - maven { - name 'MinecraftForge' - url 'https://maven.minecraftforge.net/' - } - maven { - name 'ParchmentMC' - url 'https://maven.parchmentmc.org' - } - maven { - name 'SpongeGradle' - url 'https://repo.spongepowered.org/repository/maven-public/' - } - } - resolutionStrategy { - eachPlugin { - var version = target.version - switch (requested.id.toString()) { - case "net.minecraftforge.gradle": { - useVersion(version) - useModule("${requested.id}:ForgeGradle:${version}") - break - } - case "org.spongepowered.mixin": { - useVersion(version) - useModule("org.spongepowered:mixingradle:${version}") - break - } - } - } - } -} - -rootProject.name = 'BetterHUDLib' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..a74283e --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,17 @@ +pluginManagement { + plugins { + id("org.ec4j.editorconfig") version "0.0.3" + id("net.neoforged.gradle.userdev") version "7.0.80" + } + repositories { + mavenLocal() + gradlePluginPortal() + maven { url = uri("https://maven.neoforged.net/releases") } + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" +} + +rootProject.name = "BetterHUDLib" diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java index ad4ad77..b850e0e 100644 --- a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java @@ -1,8 +1,8 @@ package com.github.minecraftschurlimods.betterhudlib; import net.minecraft.client.gui.GuiGraphics; -import net.minecraftforge.client.gui.overlay.ForgeGui; -import net.minecraftforge.client.gui.overlay.IGuiOverlay; +import net.neoforged.neoforge.client.gui.overlay.ExtendedGui; +import net.neoforged.neoforge.client.gui.overlay.IGuiOverlay; import java.util.function.IntSupplier; import java.util.function.Supplier; @@ -15,8 +15,8 @@ public abstract class HUDElement implements IGuiOverlay { private final IntSupplier defaultWidth; private final IntSupplier defaultHeight; private boolean defaultsApplied = false; - private AnchorX anchorX; - private AnchorY anchorY; + private AnchorX anchorX = AnchorX.LEFT; + private AnchorY anchorY = AnchorY.TOP; private int x; private int y; private int width; @@ -36,7 +36,7 @@ protected HUDElement(Supplier anchorX, Supplier anchorY, IntSu } @Override - public void render(ForgeGui gui, GuiGraphics graphics, float partialTick, int screenWidth, int screenHeight) { + public void render(ExtendedGui gui, GuiGraphics graphics, float partialTick, int screenWidth, int screenHeight) { applyDefaults(); graphics.pose().pushPose(); graphics.pose().translate(getNormalizedX(screenWidth), getNormalizedY(screenHeight), 0); @@ -79,7 +79,7 @@ private int getNormalizedY(int screenHeight) { return y; } - public abstract void draw(ForgeGui gui, GuiGraphics graphics, float partialTick); + public abstract void draw(ExtendedGui gui, GuiGraphics graphics, float partialTick); protected final int getX(int screenWidth) { return switch (anchorX) { diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManager.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManager.java index 157fd34..131c283 100644 --- a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManager.java +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManager.java @@ -3,13 +3,14 @@ import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; -import net.minecraftforge.client.event.InputEvent; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.client.event.RenderGuiEvent; -import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.client.settings.KeyModifier; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.event.RenderGuiEvent; +import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.neoforged.neoforge.client.settings.KeyModifier; +import net.neoforged.neoforge.common.NeoForge; +import org.jetbrains.annotations.UnknownNullability; import org.lwjgl.glfw.GLFW; import java.util.concurrent.locks.Lock; @@ -20,7 +21,7 @@ public final class HUDManager { private static final Lock INIT_LOCK = new ReentrantLock(); private static boolean KEYBIND_ENABLED = false; private static boolean INITIALIZED = false; - private static KeyMapping KEY; + private static @UnknownNullability KeyMapping KEY; public static void initialize() { try { @@ -31,10 +32,10 @@ public static void initialize() { INIT_LOCK.unlock(); } - MinecraftForge.EVENT_BUS.addListener(HUDManager::onBeforeHUD); + NeoForge.EVENT_BUS.addListener(HUDManager::onBeforeHUD); } - public static void enableKeybind() { + public static void enableKeybind(IEventBus modBus) { if (!INITIALIZED) { initialize(); } @@ -46,8 +47,8 @@ public static void enableKeybind() { KEYBIND_LOCK.unlock(); } - FMLJavaModLoadingContext.get().getModEventBus().addListener(HUDManager::onClientInit); - MinecraftForge.EVENT_BUS.addListener(HUDManager::onInput); + modBus.addListener(HUDManager::onClientInit); + NeoForge.EVENT_BUS.addListener(HUDManager::onInput); } public static void open() { @@ -70,7 +71,6 @@ private static void onBeforeHUD(RenderGuiEvent.Pre evt) { private static void onClientInit(RegisterKeyMappingsEvent evt) { if (KEY != null) return; - //noinspection NoTranslation KEY = new KeyMapping( "hud_manager.open", KeyConflictContext.IN_GAME, diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java index 3d8de15..b70bb10 100644 --- a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java @@ -11,10 +11,11 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.sounds.SoundManager; import net.minecraft.network.chat.Component; -import net.minecraftforge.client.gui.overlay.ForgeGui; -import net.minecraftforge.client.gui.overlay.GuiOverlayManager; -import net.minecraftforge.client.gui.overlay.IGuiOverlay; -import net.minecraftforge.client.gui.overlay.NamedGuiOverlay; +import net.neoforged.neoforge.client.gui.overlay.ExtendedGui; +import net.neoforged.neoforge.client.gui.overlay.GuiOverlayManager; +import net.neoforged.neoforge.client.gui.overlay.IGuiOverlay; +import net.neoforged.neoforge.client.gui.overlay.NamedGuiOverlay; +import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; public final class HUDManagerScreen extends Screen { @@ -51,7 +52,7 @@ private interface HUDWidget extends Renderable { default void render(GuiGraphics graphics, int pMouseX, int pMouseY, float pPartialTick) { Minecraft minecraft = Minecraft.getInstance(); getHUDElement().render( - ((ForgeGui) minecraft.gui), + ((ExtendedGui) minecraft.gui), graphics, pPartialTick, minecraft.getWindow().getGuiScaledWidth(), @@ -72,8 +73,8 @@ public IGuiOverlay getHUDElement() { private static class HUDElementWrapper extends AbstractWidget implements HUDWidget { private final HUDElement element; - private Double holdX; - private Double holdY; + private @Nullable Double holdX; + private @Nullable Double holdY; public HUDElementWrapper(Component name, HUDElement element) { super(element.getX(Minecraft.getInstance().getWindow().getGuiScaledWidth()), element.getY(Minecraft.getInstance().getWindow().getGuiScaledHeight()), element.getWidth(), element.getHeight(), name); diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/package-info.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/package-info.java new file mode 100644 index 0000000..4728ec1 --- /dev/null +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/package-info.java @@ -0,0 +1,9 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package com.github.minecraftschurlimods.betterhudlib; + +import net.minecraft.FieldsAreNonnullByDefault; +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/ClientInit.java b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/ClientInit.java new file mode 100644 index 0000000..c67b22a --- /dev/null +++ b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/ClientInit.java @@ -0,0 +1,30 @@ +package com.github.minecraftschurlimods.betterhudlib.test; + +import com.github.minecraftschurlimods.betterhudlib.HUDElement; +import com.github.minecraftschurlimods.betterhudlib.HUDManager; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.client.event.RegisterGuiOverlaysEvent; +import net.neoforged.neoforge.client.gui.overlay.ExtendedGui; + +public class ClientInit { + public static void init(IEventBus modBus) { + HUDManager.initialize(); + HUDManager.enableKeybind(modBus); + modBus.addListener((RegisterGuiOverlaysEvent evt) -> { + evt.registerAboveAll(new ResourceLocation("betterhudlibtest", "test_hud"), new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.CENTER, 0, 0, 100, 100) { + @Override + public void draw(ExtendedGui gui, GuiGraphics graphics, float partialTick) { + graphics.fill(0, 0, getHeight(), getWidth(), 0xFF00FF00); + } + }); + evt.registerAboveAll(new ResourceLocation("betterhudlibtest", "test_hud2"), new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.BOTTOM, 100, 0, 100, 100) { + @Override + public void draw(ExtendedGui gui, GuiGraphics graphics, float partialTick) { + graphics.fill(0, 0, getHeight(), getWidth(), 0xFFFF0000); + } + }); + }); + } +} diff --git a/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/TestMod.java b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/TestMod.java index dd9c1d1..96e76e9 100644 --- a/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/TestMod.java +++ b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/TestMod.java @@ -1,40 +1,15 @@ package com.github.minecraftschurlimods.betterhudlib.test; -import com.github.minecraftschurlimods.betterhudlib.HUDElement; -import com.github.minecraftschurlimods.betterhudlib.HUDManager; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RegisterGuiOverlaysEvent; -import net.minecraftforge.client.gui.overlay.ForgeGui; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.loading.FMLEnvironment; @Mod("betterhudlibtest") public class TestMod { - public TestMod() { - DistExecutor.safeRunWhenOn(Dist.CLIENT, ClientInit::new); - } - - private static class ClientInit implements DistExecutor.SafeRunnable { - @Override - public void run() { - HUDManager.initialize(); - HUDManager.enableKeybind(); - FMLJavaModLoadingContext.get().getModEventBus().addListener((RegisterGuiOverlaysEvent evt) -> { - evt.registerAboveAll("test_hud", new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.CENTER, 0, 0, 100, 100) { - @Override - public void draw(ForgeGui gui, GuiGraphics graphics, float partialTick) { - graphics.fill(0, 0, getHeight(), getWidth(), 0xFF00FF00); - } - }); - evt.registerAboveAll("test_hud2", new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.BOTTOM, 100, 0, 100, 100) { - @Override - public void draw(ForgeGui gui, GuiGraphics graphics, float partialTick) { - graphics.fill(0, 0, getHeight(), getWidth(), 0xFFFF0000); - } - }); - }); + public TestMod(IEventBus modBus) { + if (FMLEnvironment.dist == Dist.CLIENT) { + ClientInit.init(modBus); } } } diff --git a/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/package-info.java b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/package-info.java new file mode 100644 index 0000000..0421df2 --- /dev/null +++ b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/package-info.java @@ -0,0 +1,9 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package com.github.minecraftschurlimods.betterhudlib.test; + +import net.minecraft.FieldsAreNonnullByDefault; +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault;