From bc02084cb23e58c5114799e1c6c084c15f7c8d9e Mon Sep 17 00:00:00 2001 From: Bawnorton Date: Wed, 13 Nov 2024 12:02:30 -0800 Subject: [PATCH] 2.2.2 --- CHANGELOG.md | 10 + NeruinaTestMod/.gitignore | 41 --- NeruinaTestMod/build.gradle | 138 ---------- NeruinaTestMod/gradle.properties | 22 -- .../gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - NeruinaTestMod/gradlew | 249 ------------------ NeruinaTestMod/gradlew.bat | 92 ------- NeruinaTestMod/mappings/fix.tiny | 5 - NeruinaTestMod/settings.gradle | 25 -- .../mixin/TestBlockEntityCrashMixin.java | 15 -- .../mixin/TestBlockStateCrashMixin.java | 15 -- .../mixin/TestEntityCrashMixin.java | 18 -- .../mixin/TestItemStackCrashMixin.java | 15 -- .../platform/NeruinaTestModWrapper.java | 27 -- .../src/main/resources/META-INF/mods.toml | 21 -- .../resources/META-INF/neoforge.mods.toml | 24 -- .../assets/neruina_test_mod/icon.png | Bin 116527 -> 0 bytes .../neruina_test_mod/neruina/auto_report.json | 4 - .../src/main/resources/fabric.mod.json | 30 --- .../resources/neruina_test_mod.mixins.json | 15 -- NeruinaTestMod/src/main/resources/pack.mcmeta | 6 - NeruinaTestMod/stonecutter.gradle | 8 - .../versions/1.18.2-fabric/gradle.properties | 5 - .../versions/1.18.2-forge/gradle.properties | 5 - .../versions/1.19.4-fabric/gradle.properties | 5 - .../versions/1.19.4-forge/gradle.properties | 5 - .../versions/1.20.1-fabric/gradle.properties | 5 - .../versions/1.20.1-forge/gradle.properties | 5 - .../versions/1.20.6-fabric/gradle.properties | 7 - .../versions/1.20.6-forge/gradle.properties | 11 - .../1.20.6-neoforge/gradle.properties | 8 - build.gradle.kts | 23 +- buildSrc/build.gradle.kts | 2 +- .../src/main/kotlin/MinecraftVersionData.kt | 2 +- .../src/main/kotlin/StonecutterSwapper.kt | 2 +- gradle.properties | 7 +- settings.gradle.kts | 2 +- .../java/com/bawnorton/neruina/Neruina.java | 4 +- .../command/NeruinaCommandHandler.java | 82 +++--- .../neruina/handler/MessageHandler.java | 62 +++-- .../neruina/handler/PersitanceHandler.java | 26 +- .../neruina/handler/TickHandler.java | 117 ++++++-- .../handler/client/ClientTickHandler.java | 17 +- .../neruina/mixin/MinecraftServerMixin.java | 12 +- .../mixin/catchers/PlayerInventoryMixin.java | 19 +- .../mixin/catchers/ServerWorldMixin.java | 6 +- .../catchers/fabric/PlayerInventoryMixin.java | 22 -- .../forge/PlayerInventory47219Mixin.java | 23 -- .../forge/PlayerInventory47220Mixin.java | 23 -- .../neoforge/PlayerInventoryMixin.java | 22 -- .../compat/doespotatotick/DPTUtilsMixin.java | 26 -- .../compat/doespotatotick/WorldMixin.java | 7 +- .../compat/itshallnottick/WorldMixin.java | 4 - .../mixin/compat/noseenotick/WorldMixin.java | 6 +- .../mixin/errorable/BlockEntityMixin.java | 12 +- .../neruina/mixin/errorable/EntityMixin.java | 28 +- .../mixin/errorable/ItemStackMixin.java | 32 ++- .../bawnorton/neruina/platform/ModLoader.java | 2 +- .../neruina/platform/NeruinaWrapper.java | 15 +- .../bawnorton/neruina/platform/Platform.java | 68 +---- .../neruina/report/AutoReportConfig.java | 63 +---- .../neruina/report/AutoReportHandler.java | 58 ++-- .../neruina/report/GithubAuthManager.java | 11 +- .../neruina/report/IssueFormatter.java | 2 - .../neruina/report/ReportStatus.java | 7 +- .../neruina/report/RepositoryReference.java | 2 - .../com/bawnorton/neruina/report/Storage.java | 50 +--- .../{VersionedText.java => Texter.java} | 22 +- src/main/resources/META-INF/mods.toml | 21 -- .../resources/assets/neruina/lang/en_us.json | 2 + src/main/resources/neruina.mixins.json | 5 - stonecutter.gradle.kts | 2 +- versions/1.21-fabric/gradle.properties | 2 +- versions/1.21-neoforge/gradle.properties | 2 +- versions/1.21-neoforge/mappings/fix.tiny | 5 - versions/1.21.2-fabric/gradle.properties | 6 - versions/1.21.2-neoforge/gradle.properties | 6 - versions/1.21.3-fabric/gradle.properties | 9 + versions/1.21.3-neoforge/gradle.properties | 8 + 80 files changed, 385 insertions(+), 1414 deletions(-) delete mode 100644 NeruinaTestMod/.gitignore delete mode 100644 NeruinaTestMod/build.gradle delete mode 100644 NeruinaTestMod/gradle.properties delete mode 100644 NeruinaTestMod/gradle/wrapper/gradle-wrapper.jar delete mode 100644 NeruinaTestMod/gradle/wrapper/gradle-wrapper.properties delete mode 100755 NeruinaTestMod/gradlew delete mode 100644 NeruinaTestMod/gradlew.bat delete mode 100644 NeruinaTestMod/mappings/fix.tiny delete mode 100644 NeruinaTestMod/settings.gradle delete mode 100644 NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockEntityCrashMixin.java delete mode 100644 NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockStateCrashMixin.java delete mode 100644 NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestEntityCrashMixin.java delete mode 100644 NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestItemStackCrashMixin.java delete mode 100644 NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/platform/NeruinaTestModWrapper.java delete mode 100644 NeruinaTestMod/src/main/resources/META-INF/mods.toml delete mode 100644 NeruinaTestMod/src/main/resources/META-INF/neoforge.mods.toml delete mode 100644 NeruinaTestMod/src/main/resources/assets/neruina_test_mod/icon.png delete mode 100644 NeruinaTestMod/src/main/resources/data/neruina_test_mod/neruina/auto_report.json delete mode 100644 NeruinaTestMod/src/main/resources/fabric.mod.json delete mode 100644 NeruinaTestMod/src/main/resources/neruina_test_mod.mixins.json delete mode 100644 NeruinaTestMod/src/main/resources/pack.mcmeta delete mode 100644 NeruinaTestMod/stonecutter.gradle delete mode 100644 NeruinaTestMod/versions/1.18.2-fabric/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.18.2-forge/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.19.4-fabric/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.19.4-forge/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.20.1-fabric/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.20.1-forge/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.20.6-fabric/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.20.6-forge/gradle.properties delete mode 100644 NeruinaTestMod/versions/1.20.6-neoforge/gradle.properties delete mode 100644 src/main/java/com/bawnorton/neruina/mixin/catchers/fabric/PlayerInventoryMixin.java delete mode 100644 src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47219Mixin.java delete mode 100644 src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47220Mixin.java delete mode 100644 src/main/java/com/bawnorton/neruina/mixin/catchers/neoforge/PlayerInventoryMixin.java delete mode 100644 src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/DPTUtilsMixin.java rename src/main/java/com/bawnorton/neruina/version/{VersionedText.java => Texter.java} (73%) delete mode 100644 src/main/resources/META-INF/mods.toml delete mode 100644 versions/1.21-neoforge/mappings/fix.tiny delete mode 100644 versions/1.21.2-fabric/gradle.properties delete mode 100644 versions/1.21.2-neoforge/gradle.properties create mode 100644 versions/1.21.3-fabric/gradle.properties create mode 100644 versions/1.21.3-neoforge/gradle.properties diff --git a/CHANGELOG.md b/CHANGELOG.md index 07fca3a..4ef697f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# 2.2.2 + +- Support 1.21.3 +- Fix crash on report +- Added a test arg to the report command to test internal functionality + +# 2.2.0 + +- Drop forge + # 2.1.2 - Add dimension support to teleport action diff --git a/NeruinaTestMod/.gitignore b/NeruinaTestMod/.gitignore deleted file mode 100644 index bdb51d0..0000000 --- a/NeruinaTestMod/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# gradle - -.gradle/ -build/ -out/ -classes/ - -# eclipse - -*.launch - -# idea - -.idea/ -*.iml -*.ipr -*.iws - -# vscode - -.settings/ -.vscode/ -bin/ -.classpath -.project - -# macos - -*.DS_Store - -# fabric - -run/ -storage.json - -# java - -hs_err_*.log -replay_*.log -*.hprof -*.jfr diff --git a/NeruinaTestMod/build.gradle b/NeruinaTestMod/build.gradle deleted file mode 100644 index 2a58160..0000000 --- a/NeruinaTestMod/build.gradle +++ /dev/null @@ -1,138 +0,0 @@ -plugins { - id 'dev.architectury.loom' version "1.6-SNAPSHOT" - id 'me.modmuss50.mod-publish-plugin' version "0.4.+" -} - -def project_name = loom.project.name as String -def isFabric = project_name.contains("fabric") -def isNeoForge = project_name.contains("neoforge") -def isForge = project_name.contains("forge") && !isNeoForge -def mod_loader = isFabric ? "fabric" : isForge ? "forge" : isNeoForge ? "neoforge" : null -def java_version = project.deps_java as int -def minecraft_version = project.def minecraft_dependency = project.minecraft_dependency -def loader_version = isForge ? project.deps_fml : isNeoForge ? project.deps_neoforge : project.deps_fabric_loader -def mod_id = project.mod_id -def mod_name = project.mod_name -def mod_version = project.mod_version -def mod_group = project.mod_group - -version = "$mod_version+$minecraft_version" -group = mod_group - -base { - archivesName = "$mod_id-$mod_loader" -} - -repositories { - exclusiveContent { - forRepository { maven { url = "https://www.cursemaven.com" } } - filter { includeGroup("curse.maven") } - } - exclusiveContent { - forRepository { maven { url = "https://api.modrinth.com/maven" } } - filter { includeGroup("maven.modrinth") } - } - maven { url = "https://jitpack.io" } - maven { url = "https://maven.terraformersmc.com/releases/" } - maven { url = "https://maven.isxander.dev/releases" } - maven { url = "https://maven.shedaniel.me/" } - maven { url = "https://maven.quiltmc.org/repository/release/" } - maven { url = "https://oss.sonatype.org/content/repositories/snapshots" } - maven { url = "https://maven.kikugie.dev/releases" } - maven { url = "https://maven.neoforged.net/releases/" } - mavenLocal() - mavenCentral() -} - -dependencies { - minecraft "com.mojang:minecraft:$minecraft_version" - - if(isNeoForge) { - mappings loom.layered { - it.mappings("net.fabricmc:yarn:$minecraft_version+build.${project.yarn_build}:v2") - it.mappings(getRootProject().file("mappings/fix.tiny")) - } - } else { - mappings "net.fabricmc:yarn:$minecraft_version+build.${project.yarn_build}:v2" - } - - if(isFabric) { - modImplementation "net.fabricmc:fabric-loader:${project.deps_fabric_loader}" - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api}" - } else if (isForge) { - forge "net.minecraftforge:forge:$minecraft_version-${project.deps_fml}" - annotationProcessor compileOnly("io.github.llamalad7:mixinextras-common:${project.deps_mixin_extras}") - include implementation("io.github.llamalad7:mixinextras-forge:${project.deps_mixin_extras}") - } else if (isNeoForge) { - neoForge "net.neoforged:neoforge:${project.deps_neoforge}" - } -} - -stonecutter.expression(expression -> { - switch (expression) { - case "fabric": - return isFabric - case "forge": - return isForge - case "neoforge": - return isNeoForge - default: - return null - } -}) - -loom { - if(isForge) { - forge { - convertAccessWideners = true - mixinConfigs("${mod_id}.mixins.json") - } - } - - runConfigs { - client { - ideConfigGenerated = true - runDir = "../../run" - } - } -} - -if (stonecutter.current.active) { - rootProject.tasks.register("buildActive") { - group = "project" - dependsOn(tasks.named("build")) - } -} - -tasks.processResources { - def map = [ - "version": mod_version, - "minecraft_version": minecraft_dependency, - "loader_version": loader_version - ] - - inputs.properties(map) - filesMatching("fabric.mod.json") { expand(map) } - filesMatching("META-INF/mods.toml") { expand(map) } - filesMatching("META-INF/neoforge.mods.toml") { expand(map) } -} - -tasks.withType(JavaCompile).configureEach { - it.options.release = java_version -} - -java { - withSourcesJar() - - def jv = JavaVersion.getVersionForMajor(java_version) - sourceCompatibility = jv - targetCompatibility = jv -} - -if(isForge && project_name.contains("1.20")) { - sourceSets.each { - def dir = layout.buildDirectory.dir("sourcesSets/$it.name") - it.output.resourcesDir = dir - it.java.destinationDirectory = dir - } -} diff --git a/NeruinaTestMod/gradle.properties b/NeruinaTestMod/gradle.properties deleted file mode 100644 index 3751033..0000000 --- a/NeruinaTestMod/gradle.properties +++ /dev/null @@ -1,22 +0,0 @@ -# Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx4G -org.gradle.parallel=true - -# Mod Properties -mod_version=1.0.0 -mod_group=com.bawnorton -mod_id=neruina_test_mod -mod_name=NeruinaTestMod - -# Global Dependencies -deps_fabric_loader=0.15.10 -deps_mixin_extras=0.3.5 -deps_github_api=1.318 - -# Versioned Dependencies -deps_java=17 -yarn_build=[VERSIONED] -fabric_api=[VERSIONED] -deps_fml=[VERSIONED] -deps_neoforge=[VERSIONED] -minecraft_dependency=[VERSIONED] diff --git a/NeruinaTestMod/gradle/wrapper/gradle-wrapper.jar b/NeruinaTestMod/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd4917707c1f8861d8cb53dd15194d4248596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43462 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 diff --git a/NeruinaTestMod/gradle/wrapper/gradle-wrapper.properties b/NeruinaTestMod/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index a80b22c..0000000 --- a/NeruinaTestMod/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -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/NeruinaTestMod/gradlew b/NeruinaTestMod/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/NeruinaTestMod/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# 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/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# 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 - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - 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 -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# 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" \ - -classpath "$CLASSPATH" \ - 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. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/NeruinaTestMod/gradlew.bat b/NeruinaTestMod/gradlew.bat deleted file mode 100644 index 6689b85..0000000 --- a/NeruinaTestMod/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -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! -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 - -:omega diff --git a/NeruinaTestMod/mappings/fix.tiny b/NeruinaTestMod/mappings/fix.tiny deleted file mode 100644 index f5c8226..0000000 --- a/NeruinaTestMod/mappings/fix.tiny +++ /dev/null @@ -1,5 +0,0 @@ -tiny 2 0 intermediary named -c net/minecraft/class_1496 net/minecraft/entity/passive/AbstractHorseEntity - m ()Lnet/minecraft/class_1263; method_56680 getInventoryPatched -c net/minecraft/class_329 net/minecraft/client/gui/hud/InGameHud - m (Lnet/minecraft/class_332;F)V method_1759 renderHotbarPatched \ No newline at end of file diff --git a/NeruinaTestMod/settings.gradle b/NeruinaTestMod/settings.gradle deleted file mode 100644 index e5dc5e6..0000000 --- a/NeruinaTestMod/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - repositories { - maven { url 'https://maven.fabricmc.net/' } - maven { url "https://maven.architectury.dev" } - maven { url "https://maven.minecraftforge.net/" } - maven { url "https://maven.neoforged.net/releases/" } - maven { url "https://maven.kikugie.dev/releases/" } - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id("dev.kikugie.stonecutter") version "0.3.5" -} - -stonecutter { - shared { - versions "1.18.2-fabric", "1.18.2-forge", "1.19.4-fabric", "1.19.4-forge", "1.20.1-fabric", "1.20.1-forge", "1.20.6-fabric", "1.20.6-forge", "1.20.6-neoforge" - vcsVersion "1.20.6-fabric" - } - create rootProject -} - -rootProject.name = "NeruinaTestMod" \ No newline at end of file diff --git a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockEntityCrashMixin.java b/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockEntityCrashMixin.java deleted file mode 100644 index ea07bdd..0000000 --- a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockEntityCrashMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.bawnorton.neruina_test_mod.mixin; - -import net.minecraft.block.DaylightDetectorBlock; -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(DaylightDetectorBlock.class) -public abstract class TestBlockEntityCrashMixin { - @Inject(method = "tick", at = @At("HEAD")) - private static void throwTestException(CallbackInfo ci) { - throw new RuntimeException("Test exception"); - } -} diff --git a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockStateCrashMixin.java b/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockStateCrashMixin.java deleted file mode 100644 index fe52e68..0000000 --- a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestBlockStateCrashMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.bawnorton.neruina_test_mod.mixin; - -import net.minecraft.block.FarmlandBlock; -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(FarmlandBlock.class) -public abstract class TestBlockStateCrashMixin { - @Inject(method = "randomTick", at = @At("HEAD")) - private void throwTestException(CallbackInfo ci) { - throw new RuntimeException("Test exception"); - } -} diff --git a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestEntityCrashMixin.java b/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestEntityCrashMixin.java deleted file mode 100644 index df74a45..0000000 --- a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestEntityCrashMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.bawnorton.neruina_test_mod.mixin; - -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.passive.CowEntity; -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(AnimalEntity.class) -public abstract class TestEntityCrashMixin { - @Inject(method = "mobTick", at = @At("HEAD")) - private void throwTestException(CallbackInfo ci) { - if (((Object) this) instanceof CowEntity) { - throw new RuntimeException("Test exception"); - } - } -} diff --git a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestItemStackCrashMixin.java b/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestItemStackCrashMixin.java deleted file mode 100644 index fcc7783..0000000 --- a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/mixin/TestItemStackCrashMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.bawnorton.neruina_test_mod.mixin; - -import net.minecraft.item.CompassItem; -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(CompassItem.class) -public abstract class TestItemStackCrashMixin { - @Inject(method = "inventoryTick", at = @At("HEAD")) - private void throwTestException(CallbackInfo ci) { - throw new RuntimeException("Test exception"); - } -} diff --git a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/platform/NeruinaTestModWrapper.java b/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/platform/NeruinaTestModWrapper.java deleted file mode 100644 index aaf79a5..0000000 --- a/NeruinaTestMod/src/main/java/com/bawnorton/neruina_test_mod/platform/NeruinaTestModWrapper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.bawnorton.neruina_test_mod.platform; - -/*? if fabric {*//* -import net.fabricmc.api.ModInitializer; - -public class NeruinaTestModWrapper implements ModInitializer { - @Override - public void onInitialize() { - } -} -*//*? } elif forge {*/ -import net.minecraftforge.fml.common.Mod; - -@Mod("neruina_test_mod") -public class NeruinaTestModWrapper { - public NeruinaTestModWrapper() { - } -} -/*? } elif neoforge {*//* -import net.neoforged.fml.common.Mod; - -@Mod("neruina_test_mod") -public class NeruinaTestModWrapper { - public NeruinaTestModWrapper() { - } -} -*//*? }*/ diff --git a/NeruinaTestMod/src/main/resources/META-INF/mods.toml b/NeruinaTestMod/src/main/resources/META-INF/mods.toml deleted file mode 100644 index b57e40a..0000000 --- a/NeruinaTestMod/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,21 +0,0 @@ -modLoader = "javafml" -loaderVersion = "${loader_version}" -issueTrackerURL = "https://github.com/Bawnorton/Neruina/issues" -license = "MIT" - -[[mods]] -modId = "neruina_test_mod" -version = "${version}" -displayName = "NeruinaTestMod" -authors = "Bawnorton" -description = ''' -Test mod for Neruina -''' -logoFile = "icon.png" - -[[dependencies.neruina_test_mod]] -modId = "minecraft" -mandatory = true -versionRange = "${minecraft_version}" -ordering = "NONE" -side = "BOTH" \ No newline at end of file diff --git a/NeruinaTestMod/src/main/resources/META-INF/neoforge.mods.toml b/NeruinaTestMod/src/main/resources/META-INF/neoforge.mods.toml deleted file mode 100644 index c4b438b..0000000 --- a/NeruinaTestMod/src/main/resources/META-INF/neoforge.mods.toml +++ /dev/null @@ -1,24 +0,0 @@ -modLoader = "javafml" -loaderVersion = "${loader_version}" -issueTrackerURL = "https://github.com/Bawnorton/Neruina/issues" -license = "MIT" - -[[mods]] -modId = "neruina_test_mod" -version = "${version}" -displayName = "NeruinaTestMod" -authors = "Bawnorton" -description = ''' -Test mod for Neruina -''' -logoFile = "icon.png" - -[[mixins]] -config = "neruina_test_mod.mixins.json" - -[[dependencies.neruina_test_mod]] -modId = "minecraft" -type = "required" -versionRange = "${minecraft_version}" -ordering = "NONE" -side = "BOTH" \ No newline at end of file diff --git a/NeruinaTestMod/src/main/resources/assets/neruina_test_mod/icon.png b/NeruinaTestMod/src/main/resources/assets/neruina_test_mod/icon.png deleted file mode 100644 index b1e411852535784beeb6f46dc033310716428117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116527 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%0Ddyk|1*v{``a> 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.15.0" - } -} diff --git a/NeruinaTestMod/src/main/resources/neruina_test_mod.mixins.json b/NeruinaTestMod/src/main/resources/neruina_test_mod.mixins.json deleted file mode 100644 index df6f5c3..0000000 --- a/NeruinaTestMod/src/main/resources/neruina_test_mod.mixins.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "required": true, - "package": "com.bawnorton.neruina_test_mod.mixin", - "compatibilityLevel": "JAVA_17", - "minVersion": "0.8", - "mixins": [ - "TestBlockEntityCrashMixin", - "TestBlockStateCrashMixin", - "TestEntityCrashMixin", - "TestItemStackCrashMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file diff --git a/NeruinaTestMod/src/main/resources/pack.mcmeta b/NeruinaTestMod/src/main/resources/pack.mcmeta deleted file mode 100644 index 9c68ab3..0000000 --- a/NeruinaTestMod/src/main/resources/pack.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "pack": { - "description": "NeruinaTestMod", - "pack_format": 13 - } -} diff --git a/NeruinaTestMod/stonecutter.gradle b/NeruinaTestMod/stonecutter.gradle deleted file mode 100644 index 1e385d4..0000000 --- a/NeruinaTestMod/stonecutter.gradle +++ /dev/null @@ -1,8 +0,0 @@ -plugins.apply "dev.kikugie.stonecutter" - -stonecutter.active "1.18.2-forge" /* [SC] DO NOT EDIT */ - -stonecutter.registerChiseled tasks.register("chiseledBuild", stonecutter.chiseled) { - setGroup "project" - ofTask "build" -} diff --git a/NeruinaTestMod/versions/1.18.2-fabric/gradle.properties b/NeruinaTestMod/versions/1.18.2-fabric/gradle.properties deleted file mode 100644 index 71191b9..0000000 --- a/NeruinaTestMod/versions/1.18.2-fabric/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -loom.platform=fabric - -yarn_build=4 -fabric_api=0.77.0+1.18.2 -minecraft_dependency=~1.18.2 \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.18.2-forge/gradle.properties b/NeruinaTestMod/versions/1.18.2-forge/gradle.properties deleted file mode 100644 index c0ed387..0000000 --- a/NeruinaTestMod/versions/1.18.2-forge/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -loom.platform=forge - -yarn_build=4 -deps_fml=40.2.17 -minecraft_dependency=[1.18.2,) \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.19.4-fabric/gradle.properties b/NeruinaTestMod/versions/1.19.4-fabric/gradle.properties deleted file mode 100644 index 424f1fa..0000000 --- a/NeruinaTestMod/versions/1.19.4-fabric/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -loom.platform=fabric - -yarn_build=2 -fabric_api=0.87.2+1.19.4 -minecraft_dependency=~1.19 \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.19.4-forge/gradle.properties b/NeruinaTestMod/versions/1.19.4-forge/gradle.properties deleted file mode 100644 index f89f35d..0000000 --- a/NeruinaTestMod/versions/1.19.4-forge/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -loom.platform=forge - -yarn_build=2 -deps_fml=45.2.8 -minecraft_dependency=[1.19,1.20) \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.20.1-fabric/gradle.properties b/NeruinaTestMod/versions/1.20.1-fabric/gradle.properties deleted file mode 100644 index f4f28d0..0000000 --- a/NeruinaTestMod/versions/1.20.1-fabric/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -loom.platform=fabric - -yarn_build=10 -fabric_api=0.92.0+1.20.1 -minecraft_dependency=>=1.20.1 <1.20.2 \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.20.1-forge/gradle.properties b/NeruinaTestMod/versions/1.20.1-forge/gradle.properties deleted file mode 100644 index ac92ef5..0000000 --- a/NeruinaTestMod/versions/1.20.1-forge/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -loom.platform=forge - -yarn_build=10 -deps_fml=47.2.20 -minecraft_dependency=[1.20,1.20.2) \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.20.6-fabric/gradle.properties b/NeruinaTestMod/versions/1.20.6-fabric/gradle.properties deleted file mode 100644 index 2e8b339..0000000 --- a/NeruinaTestMod/versions/1.20.6-fabric/gradle.properties +++ /dev/null @@ -1,7 +0,0 @@ -loom.platform=fabric - -# # https://fabricmc.net/develop/ -deps_java=21 -yarn_build=1 -fabric_api=0.98.0+1.20.6 -minecraft_dependency=>=1.20.2 <1.21 \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.20.6-forge/gradle.properties b/NeruinaTestMod/versions/1.20.6-forge/gradle.properties deleted file mode 100644 index e5ee8aa..0000000 --- a/NeruinaTestMod/versions/1.20.6-forge/gradle.properties +++ /dev/null @@ -1,11 +0,0 @@ -loom.platform=forge - -# https://files.minecraftforge.net/net/minecraftforge/forge/ -deps_java=21 -# https://fabricmc.net/develop/ -yarn_build=1 -deps_fml=50.0.9 -deps_it_shall_not_tick=3950475 -deps_no_see_no_tick=4596138 -deps_does_potato_tick=4810276 -minecraft_dependency=[1.20.2,1.21) \ No newline at end of file diff --git a/NeruinaTestMod/versions/1.20.6-neoforge/gradle.properties b/NeruinaTestMod/versions/1.20.6-neoforge/gradle.properties deleted file mode 100644 index 0ff6176..0000000 --- a/NeruinaTestMod/versions/1.20.6-neoforge/gradle.properties +++ /dev/null @@ -1,8 +0,0 @@ -loom.platform=neoforge - -# https://projects.neoforged.net/neoforged/neoforge -deps_java=21 -# https://fabricmc.net/develop/ -yarn_build=1 -deps_neoforge=20.6.48-beta -minecraft_dependency=[1.20.5,1.21) \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 181a3d3..caa275e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,6 +17,7 @@ group = mod.group base.archivesName.set(mod.name) repositories { + mavenLocal() mavenCentral() maven("https://cursemaven.com") maven("https://maven.neoforged.net/releases/") @@ -27,6 +28,7 @@ dependencies { minecraft("com.mojang:minecraft:$minecraftVersion") include(implementation("org.kohsuke:github-api:${property("kohsuke_github")}")!!) + include(implementation("org.apache.httpcomponents.core5:httpcore5:${property("httpcore5")}")!!) include(implementation("com.fasterxml.jackson.core:jackson-core:${property("jackson")}")!!) include(implementation("com.fasterxml.jackson.core:jackson-databind:${property("jackson")}")!!) include(implementation("com.fasterxml.jackson.core:jackson-annotations:${property("jackson")}")!!) @@ -92,6 +94,12 @@ if(loader.isFabric) { mappings("net.fabricmc:yarn:$minecraftVersion+build.${property("yarn_build")}:v2") } + + tasks { + processResources { + exclude("**/neoforge.mods.toml") + } + } } if (loader.isNeoForge) { @@ -103,20 +111,15 @@ if (loader.isNeoForge) { if (minecraftVersion.lessThan("1.21")) { mappings("dev.architectury:yarn-mappings-patch-neoforge:1.20.5+build.3") } else { - mappings(file("mappings/fix.tiny")) + mappings("dev.architectury:yarn-mappings-patch-neoforge:1.21+build.4") } }) } - tasks.processResources { - val map = mapOf( - "version" to mod.version, - "minecraft_dependency" to mod.minecraftDependency, - "loader_version" to loader.getVersion() - ) - - inputs.properties(map) - filesMatching("META-INF/neoforge.mods.toml") { expand(map) } + tasks { + processResources { + exclude("**/fabric.mod.json") + } } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 4b85b2d..90b863f 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -11,5 +11,5 @@ repositories { dependencies { implementation("net.fabricmc:fabric-loader:0.15.11") implementation("com.google.code.gson:gson:2.11.0") - implementation("dev.kikugie:stonecutter:0.5-alpha.4") + implementation("dev.kikugie:stonecutter:0.5-beta.5") } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/MinecraftVersionData.kt b/buildSrc/src/main/kotlin/MinecraftVersionData.kt index 6bc75f7..b63ec08 100644 --- a/buildSrc/src/main/kotlin/MinecraftVersionData.kt +++ b/buildSrc/src/main/kotlin/MinecraftVersionData.kt @@ -1,4 +1,4 @@ -import dev.kikugie.stonecutter.StonecutterBuild +import dev.kikugie.stonecutter.build.StonecutterBuild class MinecraftVersionData(private val stonecutter: StonecutterBuild) { private val name = stonecutter.current.version.substringBeforeLast("-") diff --git a/buildSrc/src/main/kotlin/StonecutterSwapper.kt b/buildSrc/src/main/kotlin/StonecutterSwapper.kt index 7074a55..b57e1db 100644 --- a/buildSrc/src/main/kotlin/StonecutterSwapper.kt +++ b/buildSrc/src/main/kotlin/StonecutterSwapper.kt @@ -1,4 +1,4 @@ -import dev.kikugie.stonecutter.StonecutterBuild +import dev.kikugie.stonecutter.build.StonecutterBuild import net.fabricmc.loader.api.Version class StonecutterSwapper(private val stonecutter: StonecutterBuild) { diff --git a/gradle.properties b/gradle.properties index 7eb27aa..b0b7661 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ org.gradle.jvmargs=-Xmx4G -fabric_versions=1.19.2, 1.19.4, 1.20.1, 1.20.6, 1.21 -neoforge_versions=1.20.6, 1.21 +fabric_versions=1.19.2, 1.19.4, 1.20.1, 1.20.6, 1.21, 1.21.3 +neoforge_versions=1.20.6, 1.21, 1.21.3 -mod_version=2.2.0 +mod_version=2.2.2 mod_group=com.bawnorton mod_id=neruina mod_name=Neruina @@ -15,6 +15,7 @@ curseforge_project_id=851046 fabric_loader=0.15.11 mixin_extras=0.3.5 +httpcore5=5.3.1 kohsuke_github=1.318 jackson=2.17.0 maven_artifact=3.8.1 \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index f36bedb..4365c9c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,7 +14,7 @@ pluginManagement { } plugins { - id("dev.kikugie.stonecutter") version "0.5-alpha.4" + id("dev.kikugie.stonecutter") version "0.5-beta.5" } fun getProperty(key: String): String? { diff --git a/src/main/java/com/bawnorton/neruina/Neruina.java b/src/main/java/com/bawnorton/neruina/Neruina.java index 7879ede..ae9efb2 100644 --- a/src/main/java/com/bawnorton/neruina/Neruina.java +++ b/src/main/java/com/bawnorton/neruina/Neruina.java @@ -26,7 +26,9 @@ public Neruina() { } public static void init() { - ConfigManager.loadConfig(); + //? if <1.20.7 { + /*ConfigManager.loadConfig(); + *///?} } public static Neruina getInstance() { diff --git a/src/main/java/com/bawnorton/neruina/command/NeruinaCommandHandler.java b/src/main/java/com/bawnorton/neruina/command/NeruinaCommandHandler.java index 8548007..2db3e8c 100644 --- a/src/main/java/com/bawnorton/neruina/command/NeruinaCommandHandler.java +++ b/src/main/java/com/bawnorton/neruina/command/NeruinaCommandHandler.java @@ -8,7 +8,7 @@ import com.bawnorton.neruina.report.ReportStatus; import com.bawnorton.neruina.util.ErroredType; import com.bawnorton.neruina.util.TickingEntry; -import com.bawnorton.neruina.version.VersionedText; +import com.bawnorton.neruina.version.Texter; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; @@ -66,16 +66,17 @@ public static void register(CommandDispatcher dispatcher) { .executes(NeruinaCommandHandler::executeKill) ) ) - /*? if >=1.19 {*/ .then(CommandManager.literal("report") .then(CommandManager.argument("id", UuidArgumentType.uuid()) .executes(NeruinaCommandHandler::executeReport) ) + .then(CommandManager.literal("test") + .executes(NeruinaCommandHandler::executeTestReport) + ) ) .then(CommandManager.literal("cancel_login") .executes(NeruinaCommandHandler::executeCancelLogin) ) - /*?}*/ .then(CommandManager.literal("id") .then(CommandManager.argument("entity", EntityArgumentType.entity()) .executes(NeruinaCommandHandler::executeIdEntity) @@ -248,7 +249,6 @@ private static Text getKilledResultMessage(Collection entities return message; } - /*? if >=1.19 {*/ private static int executeReport(CommandContext context) throws CommandSyntaxException { UUID id = UuidArgumentType.getUuid(context, "id"); TickingEntry entry = Neruina.getInstance().getTickHandler().getTickingEntry(id); @@ -267,10 +267,10 @@ private static int executeReport(CommandContext context) th switch (reportCode) { case SUCCESS -> sendFeedback( context, - VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.format( - VersionedText.translatable("commands.neruina.report.success") + Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.format( + Texter.translatable("commands.neruina.report.success") ), messageHandler.generateOpenReportAction(result.message()) ) @@ -290,11 +290,22 @@ private static int executeReport(CommandContext context) th case IN_PROGRESS -> context.getSource().sendError( messageHandler.formatText("commands.neruina.report.in_progress") ); + case TESTING -> {} } }); return 1; } + private static int executeTestReport(CommandContext context) { + try { + Neruina.getInstance().getAutoReportHandler().testReporting(context.getSource().getPlayerOrThrow()); + context.getSource().sendMessage(messageHandler.formatText("commands.neruina.report.test.pass")); + } catch (Exception e) { + context.getSource().sendMessage(messageHandler.formatText("commands.neruina.report.test.fail")); + } + return 1; + } + private static int executeCancelLogin(CommandContext context) throws CommandSyntaxException { boolean wasLoggingIn = GithubAuthManager.cancelLogin(context.getSource().getPlayerOrThrow()); if (!wasLoggingIn) { @@ -303,19 +314,18 @@ private static int executeCancelLogin(CommandContext contex } return 1; } - /*?}*/ private static int executeIdBlock(CommandContext context) throws CommandSyntaxException { BlockPos pos = BlockPosArgumentType.getBlockPos(context, "pos"); BlockEntity blockEntity = context.getSource().getWorld().getBlockEntity(pos); Neruina.getInstance().getTickHandler().getTickingEntryId(blockEntity).ifPresentOrElse(uuid -> sendFeedback( context, - VersionedText.withStyle( + Texter.withStyle( messageHandler.formatText("commands.neruina.id", uuid.toString()), style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, uuid.toString())) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - VersionedText.translatable("commands.neruina.id.tooltip") + Texter.translatable("commands.neruina.id.tooltip") )) ) ), () -> context.getSource().sendError( @@ -335,12 +345,12 @@ private static int executeIdEntity(CommandContext context) ItemStack stack = player.getStackInHand(player.getActiveHand()); tickHandler.getTickingEntryId(stack).ifPresentOrElse(uuid -> sendFeedback( context, - VersionedText.withStyle( + Texter.withStyle( messageHandler.formatText("commands.neruina.id", uuid.toString()), style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, uuid.toString())) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - VersionedText.translatable("commands.neruina.id.tooltip") + Texter.translatable("commands.neruina.id.tooltip") )) ) ), () -> context.getSource().sendError( @@ -353,12 +363,12 @@ private static int executeIdEntity(CommandContext context) } else { tickHandler.getTickingEntryId(entity).ifPresentOrElse(uuid -> sendFeedback( context, - VersionedText.withStyle( + Texter.withStyle( messageHandler.formatText("commands.neruina.id", uuid.toString()), style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, uuid.toString())) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - VersionedText.translatable("commands.neruina.id.tooltip") + Texter.translatable("commands.neruina.id.tooltip") )) ) ), () -> context.getSource().sendError( @@ -385,10 +395,10 @@ private static int executeInfo(CommandContext context) { if (cause == null) { sendFeedback( context, - VersionedText.pad( - VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.format(VersionedText.translatable( + Texter.pad( + Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.format(Texter.translatable( "commands.neruina.info.null_cause", entry.getCauseName(), messageHandler.posAsNums(entry.pos()) @@ -402,10 +412,10 @@ private static int executeInfo(CommandContext context) { } else if (cause instanceof Entity entity) { sendFeedback( context, - VersionedText.pad( - VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.format(VersionedText.translatable( + Texter.pad( + Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.format(Texter.translatable( "commands.neruina.info.entity", entry.getCauseName(), messageHandler.posAsNums(entry.pos()) @@ -419,10 +429,10 @@ private static int executeInfo(CommandContext context) { } else if (cause instanceof BlockEntity) { sendFeedback( context, - VersionedText.pad( - VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.format(VersionedText.translatable( + Texter.pad( + Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.format(Texter.translatable( "commands.neruina.info.block_entity", entry.getCauseName(), messageHandler.posAsNums(entry.pos()) @@ -435,10 +445,10 @@ private static int executeInfo(CommandContext context) { } else if (cause instanceof ItemStack) { sendFeedback( context, - VersionedText.pad( - VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.format(VersionedText.translatable( + Texter.pad( + Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.format(Texter.translatable( "commands.neruina.info.item_stack", entry.getCauseName() )), @@ -450,10 +460,10 @@ private static int executeInfo(CommandContext context) { } else { sendFeedback( context, - VersionedText.pad( - VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.format(VersionedText.translatable( + Texter.pad( + Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.format(Texter.translatable( "commands.neruina.info.unknown", entry.getCauseName() )), @@ -488,7 +498,7 @@ private static int executeShowSuspended(CommandContext cont private static void sendFeedback(CommandContext context, Text text) { context.getSource().sendFeedback( - /*? if >=1.20*/ + //? if >=1.20 () -> text, true diff --git a/src/main/java/com/bawnorton/neruina/handler/MessageHandler.java b/src/main/java/com/bawnorton/neruina/handler/MessageHandler.java index f5230af..e050758 100644 --- a/src/main/java/com/bawnorton/neruina/handler/MessageHandler.java +++ b/src/main/java/com/bawnorton/neruina/handler/MessageHandler.java @@ -5,7 +5,7 @@ import com.bawnorton.neruina.thread.ConditionalRunnable; import com.bawnorton.neruina.util.ErroredType; import com.bawnorton.neruina.util.TickingEntry; -import com.bawnorton.neruina.version.VersionedText; +import com.bawnorton.neruina.version.Texter; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; @@ -23,6 +23,9 @@ import java.util.List; import java.util.UUID; +//? if >1.20.7 +import com.bawnorton.configurable.Configurable; + //? if >1.19.2 { import net.minecraft.registry.RegistryKey; //?} else { @@ -30,9 +33,18 @@ *///?} public final class MessageHandler { + //? if >1.20.7 { + @Configurable("log_level") + public static Config.LogLevel logLevel = Config.LogLevel.OPERATORS; + //?} + public void broadcastToPlayers(MinecraftServer server, Text message) { ConditionalRunnable.create(() -> { - switch (Config.getInstance().logLevel) { + //? if >1.20.7 { + switch (logLevel) { + //?} else { + /*switch (Config.getInstance().logLevel) { + *///?} case DISABLED -> { } case EVERYONE -> server.getPlayerManager() @@ -50,7 +62,7 @@ public void broadcastToPlayers(MinecraftServer server, Text message) { public void broadcastToPlayers(MinecraftServer server, Text... messages) { broadcastToPlayers( server, - VersionedText.pad(VersionedText.concatDelimited(VersionedText.LINE_BREAK, messages)) + Texter.pad(Texter.concatDelimited(Texter.LINE_BREAK, messages)) ); } @@ -59,30 +71,28 @@ public void sendToPlayer(PlayerEntity player, Text message, @Nullable Text... ac } public void sendToPlayer(PlayerEntity player, Text message, boolean pad, @Nullable Text... actions) { - message = VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.format(message), - actions != null ? VersionedText.concatDelimited(VersionedText.LINE_BREAK, actions) : null + message = Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.format(message), + actions != null ? Texter.concatDelimited(Texter.LINE_BREAK, actions) : null ); - player.sendMessage(pad ? VersionedText.pad(message) : message, false); + player.sendMessage(pad ? Texter.pad(message) : message, false); } public Text generateEntityActions(Entity entity) { - return VersionedText.concatDelimited( - VersionedText.SPACE, + return Texter.concatDelimited( + Texter.SPACE, generateHandlingActions(ErroredType.ENTITY, entity.getWorld().getRegistryKey(), entity.getBlockPos(), entity.getUuid()), generateKillAction(entity.getUuid()) ); } public Text generateResourceActions(TickingEntry entry) { - return VersionedText.concatDelimited( - VersionedText.SPACE, + return Texter.concatDelimited( + Texter.SPACE, generateInfoAction(), - generateCopyCrashAction(entry) - /*? if >=1.19 {*/ - , generateReportAction(entry) - /*?}*/ + generateCopyCrashAction(entry), + generateReportAction(entry) ); } @@ -91,8 +101,8 @@ public Text generateHandlingActions(ErroredType type, RegistryKey dimensi } public Text generateHandlingActions(ErroredType type, RegistryKey dimension, BlockPos pos, @Nullable UUID uuid) { - return VersionedText.concatDelimited( - VersionedText.SPACE, + return Texter.concatDelimited( + Texter.SPACE, generateTeleportAction(type, dimension, pos), generateResumeAction(type, uuid != null ? uuid.toString() : posAsNums(pos)) ); @@ -169,7 +179,7 @@ private Text generateCommandAction(String key, String hoverKey, Formatting color @SuppressWarnings("SameParameterValue") private Text generateCommandAction(Text message, String hoverKey, Formatting color, String command) { - return generateCommandAction(message, VersionedText.translatable(hoverKey), color, command); + return generateCommandAction(message, Texter.translatable(hoverKey), color, command); } private Text generateCommandAction(Text message, Text hoverMessage, Formatting color, String command) { @@ -181,11 +191,11 @@ private Text generateAction(String key, Formatting color, ClickEvent.Action acti } private Text generateAction(String key, String hoverKey, Formatting color, ClickEvent.Action action, String value) { - return generateAction(VersionedText.translatable(key), VersionedText.translatable(hoverKey), color, action, value); + return generateAction(Texter.translatable(key), Texter.translatable(hoverKey), color, action, value); } private Text generateAction(Text message, Text hoverMessage, Formatting color, ClickEvent.Action action, String value) { - return Texts.bracketed(VersionedText.withStyle( + return Texts.bracketed(Texter.withStyle( message, style -> style.withColor(color) .withClickEvent(new ClickEvent(action, value)) @@ -208,7 +218,7 @@ public Text generateSuspendedInfo() { } tickHandler.getTickingEntries().forEach(entry -> tickingEntryMessages.add( generateCommandAction( - VersionedText.translatable( + Texter.translatable( "neruina.ticking_entries.entry", entry.getCauseName(), posAsNums(entry.pos()) @@ -218,16 +228,16 @@ public Text generateSuspendedInfo() { "/neruina info %s".formatted(entry.uuid()) ) )); - tickingEntryMessages.add(VersionedText.concatDelimited( - VersionedText.SPACE, + tickingEntryMessages.add(Texter.concatDelimited( + Texter.SPACE, generateInfoAction(), generateClearAction() )); - return VersionedText.concatDelimited(VersionedText.LINE_BREAK, tickingEntryMessages.toArray(new Text[0])); + return Texter.concatDelimited(Texter.LINE_BREAK, tickingEntryMessages.toArray(new Text[0])); } public Text formatText(String key, Object... args) { - return VersionedText.format(VersionedText.translatable(key, args)); + return Texter.format(Texter.translatable(key, args)); } public String posAsNums(BlockPos pos) { diff --git a/src/main/java/com/bawnorton/neruina/handler/PersitanceHandler.java b/src/main/java/com/bawnorton/neruina/handler/PersitanceHandler.java index cab5bed..b7b3f25 100644 --- a/src/main/java/com/bawnorton/neruina/handler/PersitanceHandler.java +++ b/src/main/java/com/bawnorton/neruina/handler/PersitanceHandler.java @@ -1,53 +1,45 @@ package com.bawnorton.neruina.handler; import com.bawnorton.neruina.Neruina; -import com.bawnorton.neruina.thread.ConditionalRunnable; import com.bawnorton.neruina.util.TickingEntry; -import com.bawnorton.neruina.version.VersionedText; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtList; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.ClickEvent; -import net.minecraft.text.HoverEvent; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import net.minecraft.world.PersistentState; import net.minecraft.world.PersistentStateManager; import net.minecraft.world.World; -import java.util.ArrayList; -import java.util.List; public final class PersitanceHandler extends PersistentState { private static ServerWorld world; - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { private static final Type type = new Type<>( PersitanceHandler::new, PersitanceHandler::fromNbt, null ); - /*?}*/ + //?} public static PersitanceHandler getServerState(MinecraftServer server) { world = server.getWorld(World.OVERWORLD); assert world != null; PersistentStateManager manager = world.getPersistentStateManager(); - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { PersitanceHandler handler = manager.getOrCreate(type, Neruina.MOD_ID); - /*?} else {*/ + //?} else { /*PersitanceHandler handler = manager.getOrCreate(PersitanceHandler::fromNbtInternal, PersitanceHandler::new, Neruina.MOD_ID); - *//*?}*/ + *///?} handler.markDirty(); return handler; } - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { private static PersitanceHandler fromNbt(NbtCompound nbt, net.minecraft.registry.RegistryWrapper.WrapperLookup registryLookup) { return fromNbtInternal(nbt); } - /*?}*/ + //?} private static PersitanceHandler fromNbt(NbtCompound nbt) { return fromNbtInternal(nbt); @@ -63,11 +55,11 @@ private static PersitanceHandler fromNbtInternal(NbtCompound nbt) { return handler; } - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { public NbtCompound writeNbt(NbtCompound nbt, net.minecraft.registry.RegistryWrapper.WrapperLookup registryLookup) { return writeNbtInternal(nbt); } - /*?}*/ + //?} public NbtCompound writeNbt(NbtCompound nbt) { return writeNbtInternal(nbt); diff --git a/src/main/java/com/bawnorton/neruina/handler/TickHandler.java b/src/main/java/com/bawnorton/neruina/handler/TickHandler.java index deb05cf..b83ea9e 100644 --- a/src/main/java/com/bawnorton/neruina/handler/TickHandler.java +++ b/src/main/java/com/bawnorton/neruina/handler/TickHandler.java @@ -10,7 +10,7 @@ import com.bawnorton.neruina.util.ErroredType; import com.bawnorton.neruina.util.MultiSetMap; import com.bawnorton.neruina.util.TickingEntry; -import com.bawnorton.neruina.version.VersionedText; +import com.bawnorton.neruina.version.Texter; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; @@ -38,12 +38,37 @@ import java.util.UUID; import java.util.function.Consumer; +//? if >1.20.7 +import com.bawnorton.configurable.Configurable; + public final class TickHandler { private final List recentErrors = new ArrayList<>(); private final Map tickingEntries = new HashMap<>(); private final MultiSetMap erroredBlockStates = new MultiSetMap<>(); private int stopwatch = 0; + //? if >1.20.7 { + @Configurable("auto_kill_ticking_entities") + public static boolean autoKillTickingEntities = false; + + @Configurable("ticking_exception_threshold") + public static int tickingExceptionThreshold = 10; + + @Configurable("handles") + public static class Handles { + @Configurable + public static boolean entites = true; + @Configurable("block_entities") + public static boolean blockEntities = true; + @Configurable("block_states") + public static boolean blockStates = true; + @Configurable("item_stacks") + public static boolean itemStacks = true; + @Configurable + public static boolean players = true; + } + //?} + public void tick() { stopwatch++; if (stopwatch >= 600) { @@ -93,7 +118,11 @@ public void safelyTickEntities(Consumer instance, Entity entity, Operati } catch (TickingException e) { throw e; } catch (Throwable e) { - if (!Config.getInstance().handleTickingEntities) { + //? if >1.20.7 { + if (Handles.entites) { + //?} else { + /*if (!Config.getInstance().handleTickingEntities) { + *///?} throw TickingException.notHandled("handle_ticking_entities", e); } handleTickingEntity(entity, e); @@ -110,7 +139,11 @@ public void safelyTickEntities(Consumer consumer, T entity } catch (TickingException e) { throw e; } catch (Throwable e) { - if (!Config.getInstance().handleTickingEntities) { + //? if >1.20.7 { + if (Handles.entites) { + //?} else { + /*if (!Config.getInstance().handleTickingEntities) { + *///?} throw TickingException.notHandled("handle_ticking_entities", e); } handleTickingEntity(entity, e); @@ -121,7 +154,11 @@ public void safelyTickPlayer(ServerPlayerEntity instance, Operation origin try { original.call(instance); } catch (Throwable e) { - if (!Config.getInstance().handleTickingPlayers) { + //? if >1.20.7 { + if (Handles.players) { + //?} else { + /*if (!Config.getInstance().handleTickingPlayers) { + *///?} throw TickingException.notHandled("handle_ticking_players", e); } handleTickingPlayer(instance, e); @@ -135,7 +172,11 @@ public void safelyTickBlockState(BlockState instance, ServerWorld world, BlockPo } original.call(instance, world, pos, random); } catch (Throwable e) { - if (!Config.getInstance().handleTickingBlockStates) { + //? if >1.20.7 { + if (Handles.blockStates) { + //?} else { + /*if (!Config.getInstance().handleTickingBlockStates) { + *///?} throw TickingException.notHandled("handle_ticking_block_states", e); } MessageHandler messageHandler = Neruina.getInstance().getMessageHandler(); @@ -168,7 +209,11 @@ public void safelyTickBlockEntity(BlockEntityTicker insta } original.call(instance, world, pos, state, blockEntity); } catch (Throwable e) { - if (!Config.getInstance().handleTickingBlockEntities) { + //? if >1.20.7 { + if (Handles.blockEntities) { + //?} else { + /*if (!Config.getInstance().handleTickingBlockEntities) { + *///?} throw TickingException.notHandled("handle_ticking_block_entities", e); } MessageHandler messageHandler = Neruina.getInstance().getMessageHandler(); @@ -191,7 +236,11 @@ public void safelyTickBlockEntity(BlockEntityTicker insta } private void handleTickingItemStack(Throwable e, ItemStack instance, boolean isServer, PlayerEntity player, int slot) { - if (!Config.getInstance().handleTickingItemStacks) { + //? if >1.20.7 { + if (Handles.itemStacks) { + //?} else { + /*if (!Config.getInstance().handleTickingItemStacks) { + *///?} throw TickingException.notHandled("handle_ticking_item_stacks", e); } Neruina.LOGGER.warn("Neruina caught an exception, see below for cause", e); @@ -201,7 +250,7 @@ private void handleTickingItemStack(Throwable e, ItemStack instance, boolean isS trackError((Errorable) (Object) instance, tickingEntry); MessageHandler messageHandler = Neruina.getInstance().getMessageHandler(); messageHandler.sendToPlayer(player, - VersionedText.translatable("neruina.ticking.item_stack", instance.getName().getString(), slot), + Texter.translatable("neruina.ticking.item_stack", instance.getName().getString(), slot), messageHandler.generateResumeAction(ErroredType.ITEM_STACK, player.getUuidAsString()), messageHandler.generateResourceActions(tickingEntry) ); @@ -218,7 +267,11 @@ private void handleErroredEntity(Entity entity) { } entity.baseTick(); - if (Config.getInstance().autoKillTickingEntities || !entity.isAlive()) { + //? if >1.20.7 { + if (autoKillTickingEntities || !entity.isAlive()) { + //?} else { + /*if (Config.getInstance().autoKillTickingEntities || !entity.isAlive()) { + *///?} killEntity(entity, null); } } catch (Throwable e) { @@ -231,7 +284,13 @@ private void handleErroredEntity(Entity entity) { } public void killEntity(Entity entity, @Nullable Text withMessage) { - entity.kill(); + //? if >1.21.2 { + if(entity.getWorld() instanceof ServerWorld serverWorld) { + entity.kill(serverWorld); + } + //?} else { + /*entity.kill(); + *///?} entity.remove(Entity.RemovalReason.KILLED); // Necessary for any living entity removeErrored(entity); if (withMessage != null) { @@ -257,13 +316,25 @@ private void handleTickingEntity(Entity entity, Throwable e) { TickingEntry tickingEntry = new TickingEntry(entity, true, world.getRegistryKey(), pos, e); trackError((Errorable) entity, tickingEntry); MessageHandler messageHandler = Neruina.getInstance().getMessageHandler(); - Text message = messageHandler.formatText("neruina.ticking.entity.%s".formatted(Config.getInstance().autoKillTickingEntities ? "killed" : "suspended"), + Text message = messageHandler.formatText("neruina.ticking.entity.%s".formatted( + //? if >1.20.7 { + autoKillTickingEntities + //?} else { + /*Config.getInstance().autoKillTickingEntities + *///?} + ? "killed" : "suspended" + ), entity.getName().getString(), messageHandler.posAsNums(pos) ); Text actions = messageHandler.generateResourceActions(tickingEntry); - if (!Config.getInstance().autoKillTickingEntities) { - actions = VersionedText.concatDelimited(VersionedText.LINE_BREAK, + //? if >1.20.7 { + if (!autoKillTickingEntities) { + //?} else { + /*if (!Config.getInstance().autoKillTickingEntities) { + *///?} + actions = Texter.concatDelimited( + Texter.LINE_BREAK, messageHandler.generateEntityActions(entity), actions ); @@ -283,9 +354,9 @@ private void handleTickingPlayer(ServerPlayerEntity player, Throwable e) { messageHandler.broadcastToPlayers(server, message, messageHandler.generateResourceActions(tickingEntry)); try { player.networkHandler.disconnect( - VersionedText.concat( - VersionedText.translatable("neruina.kick.message"), - VersionedText.translatable("neruina.kick.reason") + Texter.concat( + Texter.translatable("neruina.kick.message"), + Texter.translatable("neruina.kick.reason") ) ); } catch (NullPointerException ex) { @@ -311,14 +382,24 @@ private void trackError(@Nullable Errorable errorable, TickingEntry entry) { if (errorable != null) { errorable.neruina$setTickingEntryId(entry.uuid()); } - if (Config.getInstance().tickingExceptionThreshold != -1 && recentErrors.size() >= Config.getInstance().tickingExceptionThreshold) { + //? if >1.20.7 { + if (tickingExceptionThreshold != -1 && recentErrors.size() >= tickingExceptionThreshold) { + //?} else { + /*if (Config.getInstance().tickingExceptionThreshold != -1 && recentErrors.size() >= Config.getInstance().tickingExceptionThreshold) { + *///?} CrashReport report = CrashReport.create( new RuntimeException("Too Many Ticking Exceptions"), "Neruina has caught too many ticking exceptions in a short period of time, something is very wrong, see below for more info" ); CrashReportSection header = report.addElement("Information"); header.add("Threshold", - "%d, set \"ticking_exception_threshold\" to -1 to disable.".formatted(Config.getInstance().tickingExceptionThreshold) + "%d, set \"ticking_exception_threshold\" to -1 to disable.".formatted( + //? if >1.20.7 { + tickingExceptionThreshold + //?} else { + /*Config.getInstance().tickingExceptionThreshold + *///?} + ) ); header.add("Caught", recentErrors.size()); String wiki = "https://github.com/Bawnorton/Neruina/wiki/Too-Many-Ticking-Exceptions"; diff --git a/src/main/java/com/bawnorton/neruina/handler/client/ClientTickHandler.java b/src/main/java/com/bawnorton/neruina/handler/client/ClientTickHandler.java index 00f085f..a3940dc 100644 --- a/src/main/java/com/bawnorton/neruina/handler/client/ClientTickHandler.java +++ b/src/main/java/com/bawnorton/neruina/handler/client/ClientTickHandler.java @@ -1,27 +1,24 @@ package com.bawnorton.neruina.handler.client; import com.bawnorton.neruina.Neruina; -import com.bawnorton.neruina.version.VersionedText; +import com.bawnorton.neruina.version.Texter; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.MessageScreen; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.toast.SystemToast; import net.minecraft.entity.player.PlayerEntity; -public class ClientTickHandler { +public final class ClientTickHandler { public static void handleTickingClient(PlayerEntity player, Throwable e) { Neruina.LOGGER.warn("Neruina caught an exception, see below for cause", e); player.getWorld().disconnect(); MinecraftClient client = MinecraftClient.getInstance(); - /*? if >=1.19 {*/ - client.disconnect(new net.minecraft.client.gui.screen.MessageScreen(VersionedText.translatable("menu.savingLevel"))); - /*?} else {*//* - client.disconnect(new net.minecraft.client.gui.screen.SaveLevelScreen(VersionedText.translatable("menu.savingLevel"))); - *//*?}*/ + client.disconnect(new MessageScreen(Texter.translatable("menu.savingLevel"))); client.setScreen(new TitleScreen()); client.getToastManager().add(SystemToast.create(client, SystemToast.Type.WORLD_ACCESS_FAILURE, - VersionedText.translatable("neruina.toast.title"), - VersionedText.translatable("neruina.toast.desc") + Texter.translatable("neruina.toast.title"), + Texter.translatable("neruina.toast.desc") )); } -} +} \ No newline at end of file diff --git a/src/main/java/com/bawnorton/neruina/mixin/MinecraftServerMixin.java b/src/main/java/com/bawnorton/neruina/mixin/MinecraftServerMixin.java index d771b0e..2e643c2 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/MinecraftServerMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/MinecraftServerMixin.java @@ -10,7 +10,7 @@ @Mixin(MinecraftServer.class) public abstract class MinecraftServerMixin { - /*? if >=1.19.3 {*/ + //? if >=1.19.3 { @Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;createMetadata()Lnet/minecraft/server/ServerMetadata;", ordinal = 0)) private void onServerStart(CallbackInfo ci) { Neruina.getInstance().getAutoReportHandler().init((MinecraftServer) (Object) this); @@ -18,7 +18,7 @@ private void onServerStart(CallbackInfo ci) { Neruina.getInstance().getPersitanceHandler((MinecraftServer) (Object) this); Storage.init((MinecraftServer) (Object) this); } - /*?} elif >=1.19 {*/ + //?} else { /*@Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;setFavicon(Lnet/minecraft/server/ServerMetadata;)V", ordinal = 0)) private void onServerStart(CallbackInfo ci) { Neruina.getInstance().getAutoReportHandler().init((MinecraftServer) (Object) this); @@ -26,13 +26,7 @@ private void onServerStart(CallbackInfo ci) { Neruina.getInstance().getPersitanceHandler((MinecraftServer) (Object) this); Storage.init((MinecraftServer) (Object) this); } - *//*?} else {*//* - @Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;setFavicon(Lnet/minecraft/server/ServerMetadata;)V", ordinal = 0)) - private void onServerStart(CallbackInfo ci) { - Neruina.getInstance().getTickHandler().init(); - Neruina.getInstance().getPersitanceHandler((MinecraftServer) (Object) this); - } - *//*?}*/ + *///?} @Inject(method = "shutdown", at = @At("HEAD")) private void onServerStop(CallbackInfo ci) { diff --git a/src/main/java/com/bawnorton/neruina/mixin/catchers/PlayerInventoryMixin.java b/src/main/java/com/bawnorton/neruina/mixin/catchers/PlayerInventoryMixin.java index b6653de..23fb3bf 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/catchers/PlayerInventoryMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/catchers/PlayerInventoryMixin.java @@ -1,10 +1,14 @@ package com.bawnorton.neruina.mixin.catchers; import com.bawnorton.neruina.Neruina; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.world.World; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -12,18 +16,23 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -/*? if >=1.20.2 {*/ +//? if >=1.20.2 { import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.NbtComponent; -/*?}*/ +//?} @Mixin(PlayerInventory.class) public abstract class PlayerInventoryMixin { @Shadow @Final public DefaultedList main; + @WrapOperation(method = "updateItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;inventoryTick(Lnet/minecraft/world/World;Lnet/minecraft/entity/Entity;IZ)V")) + private void catchTickingItemStack$notTheCauseOfTickLag(ItemStack instance, World world, Entity entity, int slot, boolean selected, Operation original) { + Neruina.getInstance().getTickHandler().safelyTickItemStack(instance, world, entity, slot, selected, original); + } + @Inject(method = "readNbt", at = @At("TAIL")) private void removeErroredStatusOnInvInit(CallbackInfo ci) { - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { main.forEach(stack -> { NbtComponent component = stack.get(DataComponentTypes.CUSTOM_DATA); if (component == null) return; @@ -33,7 +42,7 @@ private void removeErroredStatusOnInvInit(CallbackInfo ci) { Neruina.getInstance().getTickHandler().removeErrored(stack); } }); - /*?} else {*/ + //?} else { /*main.forEach(stack -> { if(stack.hasNbt()) { NbtCompound nbt = stack.getNbt(); @@ -42,6 +51,6 @@ private void removeErroredStatusOnInvInit(CallbackInfo ci) { } } }); - *//*?}*/ + *///?} } } diff --git a/src/main/java/com/bawnorton/neruina/mixin/catchers/ServerWorldMixin.java b/src/main/java/com/bawnorton/neruina/mixin/catchers/ServerWorldMixin.java index 2b5d6bc..c905e50 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/catchers/ServerWorldMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/catchers/ServerWorldMixin.java @@ -23,11 +23,7 @@ private void removeErrored(BlockPos pos, BlockState oldBlock, BlockState newBloc } } - /*? if >=1.19 {*/ @WrapOperation(method = "tickChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;randomTick(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/random/Random;)V")) - /*?} else {*//* - @WrapOperation(method = "tickChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;randomTick(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Ljava/util/Random;)V")) - *//*?}*/ private void catchTickingBlockState$notTheCauseOfTickLag(BlockState instance, ServerWorld world, BlockPos pos, @Coerce Object random, Operation original) { Neruina.getInstance().getTickHandler().safelyTickBlockState(instance, world, pos, random, original); } @@ -36,4 +32,4 @@ private void removeErrored(BlockPos pos, BlockState oldBlock, BlockState newBloc private void tickNeruinaHandler(CallbackInfo ci) { Neruina.getInstance().getTickHandler().tick(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/bawnorton/neruina/mixin/catchers/fabric/PlayerInventoryMixin.java b/src/main/java/com/bawnorton/neruina/mixin/catchers/fabric/PlayerInventoryMixin.java deleted file mode 100644 index 1834e82..0000000 --- a/src/main/java/com/bawnorton/neruina/mixin/catchers/fabric/PlayerInventoryMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.bawnorton.neruina.mixin.catchers.fabric; - -import com.bawnorton.neruina.Neruina; -import com.bawnorton.neruina.util.annotation.ModLoaderMixin; -import com.bawnorton.neruina.platform.ModLoader; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(PlayerInventory.class) -@ModLoaderMixin(ModLoader.FABRIC) -public abstract class PlayerInventoryMixin { - @WrapOperation(method = "updateItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;inventoryTick(Lnet/minecraft/world/World;Lnet/minecraft/entity/Entity;IZ)V")) - private void catchTickingItemStack$notTheCauseOfTickLag(ItemStack instance, World world, Entity entity, int slot, boolean selected, Operation original) { - Neruina.getInstance().getTickHandler().safelyTickItemStack(instance, world, entity, slot, selected, original); - } -} diff --git a/src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47219Mixin.java b/src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47219Mixin.java deleted file mode 100644 index 2596eaa..0000000 --- a/src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47219Mixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.bawnorton.neruina.mixin.catchers.forge; - -import com.bawnorton.neruina.Neruina; -import com.bawnorton.neruina.util.annotation.ModLoaderMixin; -import com.bawnorton.neruina.util.annotation.Version; -import com.bawnorton.neruina.platform.ModLoader; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(PlayerInventory.class) -@ModLoaderMixin(value = ModLoader.FORGE, version = @Version(max = "47.2.19")) -public abstract class PlayerInventory47219Mixin { - @WrapOperation(method = "updateItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;inventoryTick(Lnet/minecraft/world/World;Lnet/minecraft/entity/Entity;IZ)V")) - private void catchTickingItemStack$notTheCauseOfTickLag(ItemStack instance, World world, Entity entity, int slot, boolean selected, Operation original) { - Neruina.getInstance().getTickHandler().safelyTickItemStack(instance, world, entity, slot, selected, original); - } -} diff --git a/src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47220Mixin.java b/src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47220Mixin.java deleted file mode 100644 index 0e92b76..0000000 --- a/src/main/java/com/bawnorton/neruina/mixin/catchers/forge/PlayerInventory47220Mixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.bawnorton.neruina.mixin.catchers.forge; - -import com.bawnorton.neruina.Neruina; -import com.bawnorton.neruina.util.annotation.ModLoaderMixin; -import com.bawnorton.neruina.util.annotation.Version; -import com.bawnorton.neruina.platform.ModLoader; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(PlayerInventory.class) -@ModLoaderMixin(value = ModLoader.FORGE, version = @Version(min = "47.2.20")) -public abstract class PlayerInventory47220Mixin { - @WrapOperation(method = "updateItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;onInventoryTick(Lnet/minecraft/world/World;Lnet/minecraft/entity/player/PlayerEntity;II)V")) - private void catchTickingItemStack$notTheCauseOfTickLag(ItemStack instance, World world, PlayerEntity playerEntity, int slot, int selected, Operation original) { - Neruina.getInstance().getTickHandler().safelyTickItemStack(instance, world, playerEntity, slot, selected, original); - } -} diff --git a/src/main/java/com/bawnorton/neruina/mixin/catchers/neoforge/PlayerInventoryMixin.java b/src/main/java/com/bawnorton/neruina/mixin/catchers/neoforge/PlayerInventoryMixin.java deleted file mode 100644 index c68b6f4..0000000 --- a/src/main/java/com/bawnorton/neruina/mixin/catchers/neoforge/PlayerInventoryMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.bawnorton.neruina.mixin.catchers.neoforge; - -import com.bawnorton.neruina.Neruina; -import com.bawnorton.neruina.util.annotation.ModLoaderMixin; -import com.bawnorton.neruina.platform.ModLoader; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(PlayerInventory.class) -@ModLoaderMixin(ModLoader.NEOFORGE) -public abstract class PlayerInventoryMixin { - @WrapOperation(method = "updateItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;inventoryTick(Lnet/minecraft/world/World;Lnet/minecraft/entity/Entity;IZ)V")) - private void catchTickingItemStack$notTheCauseOfTickLag(ItemStack instance, World world, Entity entity, int slot, boolean selected, Operation original) { - Neruina.getInstance().getTickHandler().safelyTickItemStack(instance, world, entity, slot, selected, original); - } -} diff --git a/src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/DPTUtilsMixin.java b/src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/DPTUtilsMixin.java deleted file mode 100644 index 04bc043..0000000 --- a/src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/DPTUtilsMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.bawnorton.neruina.mixin.compat.doespotatotick; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import com.bawnorton.neruina.util.annotation.ConditionalMixin; - -/*? if <1.19 {*//* -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.entity.Entity; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.function.Consumer; -*//*?}*/ - -@Pseudo -@Mixin(targets = "com.teampotato.does_potato_tick.util.DPTUtils", remap = false) -@ConditionalMixin(modids = "does_potato_tick") -public abstract class DPTUtilsMixin { - /*? if <1.19 {*//* - @Inject(method = "handleGuardEntityTick", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/common/ForgeConfigSpec$BooleanValue;get()Ljava/lang/Object;")) - private static void letNeruinaHandleIt(Consumer consumer, Entity entity, CallbackInfo ci, @Local Throwable e) throws Throwable { - throw e; - } - *//*?}*/ -} diff --git a/src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/WorldMixin.java b/src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/WorldMixin.java index 81b03bc..7298ae6 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/WorldMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/compat/doespotatotick/WorldMixin.java @@ -24,13 +24,8 @@ private boolean shouldUpdatePostDeath(boolean original, Entity entity) { return false; } - /*? if >=1.19 {*/ @WrapOperation(method = "tickEntity", at = @At(value = "INVOKE", target = "Ljava/util/function/Consumer;accept(Ljava/lang/Object;)V", remap = false)) - /*?} else {*//* - @SuppressWarnings({"UnresolvedMixinReference", "MixinAnnotationTarget", "InvalidInjectorMethodSignature"}) - @WrapOperation(method = "tickEntity", at = @At(value = "INVOKE", target = "Lcom/teampotato/does_potato_tick/util/DPTUtils;handleGuardEntityTick(Ljava/util/function/Consumer;Lnet/minecraft/entity/Entity;)V")) - *//*?}*/ private void catchTickingEntities(Consumer consumer, @Coerce Object entity, Operation original) { Neruina.getInstance().getTickHandler().safelyTickEntities(consumer, (Entity) entity, original); } -} +} \ No newline at end of file diff --git a/src/main/java/com/bawnorton/neruina/mixin/compat/itshallnottick/WorldMixin.java b/src/main/java/com/bawnorton/neruina/mixin/compat/itshallnottick/WorldMixin.java index abbbb2d..5018eb3 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/compat/itshallnottick/WorldMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/compat/itshallnottick/WorldMixin.java @@ -25,11 +25,7 @@ private boolean shouldUpdatePostDeath(boolean original, Entity entity) { } @SuppressWarnings({"UnresolvedMixinReference", "MixinAnnotationTarget", "InvalidInjectorMethodSignature"}) - /*? if >=1.19 {*/ @WrapOperation(method = "tickEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/TickOptimizer;entityTicking(Ljava/util/function/Consumer;Lnet/minecraft/entity/Entity;Lnet/minecraft/world/World;Lnet/minecraft/util/math/random/Random;)V")) - /*?} else {*//* - @WrapOperation(method = "tickEntity", at = @At(value = "INVOKE", target = "Ldev/wuffs/itshallnottick/TickOptimizer;entityTicking(Ljava/util/function/Consumer;Lnet/minecraft/entity/Entity;Lnet/minecraft/world/World;Ljava/util/Random;)V")) - *//*?}*/ private void catchTickingEntities(Consumer consumer, Entity entity, World world, @Coerce Object random, Operation original) { Neruina.getInstance().getTickHandler().safelyTickEntities(consumer, entity, world, random, original); } diff --git a/src/main/java/com/bawnorton/neruina/mixin/compat/noseenotick/WorldMixin.java b/src/main/java/com/bawnorton/neruina/mixin/compat/noseenotick/WorldMixin.java index ca9d494..5a26e33 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/compat/noseenotick/WorldMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/compat/noseenotick/WorldMixin.java @@ -25,12 +25,8 @@ private boolean shouldUpdatePostDeath(boolean original, Entity entity) { } @SuppressWarnings({"MixinAnnotationTarget", "InvalidInjectorMethodSignature", "UnresolvedMixinReference"}) - /*? if >=1.19 {*/ @WrapOperation(method = "tickEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/TickOptimizer;entityTicking(Ljava/util/function/Consumer;Lnet/minecraft/entity/Entity;Lnet/minecraft/world/World;Lnet/minecraft/util/math/random/Random;)V")) - /*?} else {*//* - @WrapOperation(method = "tickEntity", at = @At(value = "INVOKE", target = "Lcom/sargerasarm/noseenotick/TickOptimizer;entityTicking(Ljava/util/function/Consumer;Lnet/minecraft/entity/Entity;Lnet/minecraft/world/World;Ljava/util/Random;)V")) - *//*?}*/ private void catchTickingEntities(Consumer consumer, Entity entity, World world, @Coerce Object random, Operation original) { Neruina.getInstance().getTickHandler().safelyTickEntities(consumer, entity, world, random, original); } -} +} \ No newline at end of file diff --git a/src/main/java/com/bawnorton/neruina/mixin/errorable/BlockEntityMixin.java b/src/main/java/com/bawnorton/neruina/mixin/errorable/BlockEntityMixin.java index cf6bc4b..4d30937 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/errorable/BlockEntityMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/errorable/BlockEntityMixin.java @@ -44,11 +44,11 @@ public abstract class BlockEntityMixin implements Errorable { } @Inject(method = "writeNbt", at = @At("HEAD")) - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { private void writeErroredToNbt(NbtCompound nbt, net.minecraft.registry.RegistryWrapper.WrapperLookup registryLookup, CallbackInfo ci) { - /*?} else {*/ + //?} else { /*private void writeErroredToNbt(NbtCompound nbt, CallbackInfo ci) { - *//*?}*/ + *///?} if (neruina$errored) { nbt.putBoolean("neruina$errored", true); } @@ -58,11 +58,11 @@ private void writeErroredToNbt(NbtCompound nbt, net.minecraft.registry.RegistryW } @Inject(method = "readNbt", at = @At("TAIL")) - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { private void readErroredFromNbt(NbtCompound nbt, net.minecraft.registry.RegistryWrapper.WrapperLookup registryLookup, CallbackInfo ci) { - /*?} else {*/ + //?} else { /*private void readErroredFromNbt(NbtCompound nbt, CallbackInfo ci) { - *//*?}*/ + *///?} if (nbt.contains("neruina$errored")) { neruina$errored = nbt.getBoolean("neruina$errored"); } diff --git a/src/main/java/com/bawnorton/neruina/mixin/errorable/EntityMixin.java b/src/main/java/com/bawnorton/neruina/mixin/errorable/EntityMixin.java index 316f98d..e75cf0d 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/errorable/EntityMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/errorable/EntityMixin.java @@ -4,7 +4,7 @@ import com.bawnorton.neruina.extend.Errorable; import com.bawnorton.neruina.handler.MessageHandler; import com.bawnorton.neruina.util.TickingEntry; -import com.bawnorton.neruina.version.VersionedText; +import com.bawnorton.neruina.version.Texter; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.entity.Entity; import net.minecraft.entity.damage.DamageSource; @@ -79,7 +79,11 @@ private void readErroredFromNbt(NbtCompound nbt, CallbackInfo ci) { } } - @ModifyReturnValue(method = "isInvulnerableTo", at = @At("RETURN")) + //? if >1.21.2 { + @ModifyReturnValue(method = "isAlwaysInvulnerableTo", at = @At("RETURN")) + //?} else { + /*@ModifyReturnValue(method = "isInvulnerableTo", at = @At("RETURN")) + *///?} private boolean ignoreDamageWhenErrored(boolean original, DamageSource source) { if (original) return true; @@ -90,10 +94,10 @@ private boolean ignoreDamageWhenErrored(boolean original, DamageSource source) { if(entry == null) { messageHandler.sendToPlayer( player, - VersionedText.concatDelimited( - VersionedText.LINE_BREAK, - VersionedText.translatable("neruina.suspended.entity", getName().getString()), - VersionedText.translatable("neruina.suspended.entity.untracked") + Texter.concatDelimited( + Texter.LINE_BREAK, + Texter.translatable("neruina.suspended.entity", getName().getString()), + Texter.translatable("neruina.suspended.entity.untracked") ), messageHandler.generateEntityActions((Entity) (Object) this), messageHandler.generateInfoAction() @@ -101,19 +105,19 @@ private boolean ignoreDamageWhenErrored(boolean original, DamageSource source) { } else { messageHandler.sendToPlayer( player, - VersionedText.translatable("neruina.suspended.entity", getName().getString()), + Texter.translatable("neruina.suspended.entity", getName().getString()), messageHandler.generateEntityActions((Entity) (Object) this), messageHandler.generateResourceActions(entry) ); } } - /*? if >=1.20 {*/ + //? if >=1.20 { return source != getWorld().getDamageSources().genericKill(); - /*?} elif >=1.19.3 {*//* - return source != getWorld().getDamageSources().outOfWorld(); - *//*?} else {*/ + //?} elif >=1.19.3 { + /*return source != getWorld().getDamageSources().outOfWorld(); + *///?} else { /*return source != net.minecraft.entity.damage.DamageSource.OUT_OF_WORLD; - *//*?}*/ + *///?} } return false; } diff --git a/src/main/java/com/bawnorton/neruina/mixin/errorable/ItemStackMixin.java b/src/main/java/com/bawnorton/neruina/mixin/errorable/ItemStackMixin.java index 8760762..6587b8f 100644 --- a/src/main/java/com/bawnorton/neruina/mixin/errorable/ItemStackMixin.java +++ b/src/main/java/com/bawnorton/neruina/mixin/errorable/ItemStackMixin.java @@ -14,26 +14,33 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.UUID; -/*? if >=1.20.2 {*/ +//? if >=1.20.2 { import net.minecraft.component.ComponentChanges; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.NbtComponent; -import net.minecraft.component.ComponentMapImpl; -/*?}*/ +//? if >1.21.2 { +import net.minecraft.component.MergedComponentMap; +//?} else { +/*import net.minecraft.component.ComponentMapImpl; +*///?} +//?} @Mixin(ItemStack.class) public abstract class ItemStackMixin implements Errorable { - /*? if >=1.20.2 {*/ + //? if >1.21.1 { @Shadow @Final + MergedComponentMap components; + //?} elif >=1.20.2 { + /*@Shadow @Final ComponentMapImpl components; - /*?} else {*/ + *///?} else { /*@Shadow public abstract NbtCompound getOrCreateNbt(); @Shadow @Nullable public abstract NbtCompound getNbt(); @Shadow public abstract boolean hasNbt(); - *//*?}*/ + *///?} @Unique private boolean neruina$errored = false; @@ -69,7 +76,7 @@ public abstract class ItemStackMixin implements Errorable { return neruina$tickingEntryId; } - /*? if >=1.20.2 {*/ + //? if >=1.20.2 { @Unique private void neruina$updateData() { NbtCompound nbt = new NbtCompound(); @@ -82,8 +89,13 @@ public abstract class ItemStackMixin implements Errorable { components.applyChanges(builder.build()); } - @Inject(method = "(Lnet/minecraft/item/ItemConvertible;ILnet/minecraft/component/ComponentMapImpl;)V", at = @At("TAIL")) + //? if >1.21.2 { + @Inject(method = "(Lnet/minecraft/item/ItemConvertible;ILnet/minecraft/component/MergedComponentMap;)V", at = @At("TAIL")) + private void readErroredFromComponents(ItemConvertible item, int count, MergedComponentMap components, CallbackInfo ci) { + //?} else { + /*@Inject(method = "(Lnet/minecraft/item/ItemConvertible;ILnet/minecraft/component/ComponentMapImpl;)V", at = @At("TAIL")) private void readErroredFromComponents(ItemConvertible item, int count, ComponentMapImpl components, CallbackInfo ci) { + *///?} NbtComponent nbtComponent = components.get(DataComponentTypes.CUSTOM_DATA); if (nbtComponent == null) return; @@ -93,7 +105,7 @@ private void readErroredFromComponents(ItemConvertible item, int count, Componen neruina$tickingEntryId = tag.getUuid("neruina$tickingEntryId"); } } - /*?} else {*/ + //?} else { /*@Unique private void neruina$updateData() { NbtCompound nbt = getOrCreateNbt(); @@ -121,5 +133,5 @@ private void readErroredFromNbt(NbtCompound nbt, CallbackInfo ci) { } } } - *//*?}*/ + *///?} } diff --git a/src/main/java/com/bawnorton/neruina/platform/ModLoader.java b/src/main/java/com/bawnorton/neruina/platform/ModLoader.java index 30c3958..0fb2c91 100644 --- a/src/main/java/com/bawnorton/neruina/platform/ModLoader.java +++ b/src/main/java/com/bawnorton/neruina/platform/ModLoader.java @@ -1,5 +1,5 @@ package com.bawnorton.neruina.platform; public enum ModLoader { - FABRIC, FORGE, NEOFORGE + FABRIC, NEOFORGE } diff --git a/src/main/java/com/bawnorton/neruina/platform/NeruinaWrapper.java b/src/main/java/com/bawnorton/neruina/platform/NeruinaWrapper.java index 4c62cfa..22ce861 100644 --- a/src/main/java/com/bawnorton/neruina/platform/NeruinaWrapper.java +++ b/src/main/java/com/bawnorton/neruina/platform/NeruinaWrapper.java @@ -2,7 +2,7 @@ import com.bawnorton.neruina.Neruina; -/*? if fabric {*/ +//? if fabric { import net.fabricmc.api.ModInitializer; public class NeruinaWrapper implements ModInitializer { @@ -11,16 +11,7 @@ public void onInitialize() { Neruina.init(); } } -/*?} elif forge {*/ -/*import net.minecraftforge.fml.common.Mod; - -@Mod(Neruina.MOD_ID) -public class NeruinaWrapper { - public NeruinaWrapper() { - Neruina.init(); - } -} -*//*?} elif neoforge {*/ +//?} elif neoforge { /*import net.neoforged.fml.common.Mod; @Mod(Neruina.MOD_ID) @@ -29,4 +20,4 @@ public NeruinaWrapper() { Neruina.init(); } } -*//*?}*/ +*///?} diff --git a/src/main/java/com/bawnorton/neruina/platform/Platform.java b/src/main/java/com/bawnorton/neruina/platform/Platform.java index 9171faa..8218da3 100644 --- a/src/main/java/com/bawnorton/neruina/platform/Platform.java +++ b/src/main/java/com/bawnorton/neruina/platform/Platform.java @@ -2,7 +2,7 @@ import java.nio.file.Path; -/*? if fabric {*/ +//? if fabric { import net.fabricmc.api.EnvType; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; @@ -57,69 +57,7 @@ public static boolean isClient() { return FabricLoader.getInstance().getEnvironmentType().equals(EnvType.CLIENT); } } -/*?} elif forge {*/ -/*import java.util.List; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.loading.FMLPaths; -import net.minecraftforge.fml.loading.LoadingModList; -import net.minecraftforge.fml.loading.moddiscovery.ModInfo; -import net.minecraftforge.forgespi.language.IModInfo; - -public final class Platform { - public static Path getConfigDir() { - return FMLPaths.CONFIGDIR.get(); - } - - public static boolean isModLoaded(String modid) { - List mods = LoadingModList.get().getMods(); - for (ModInfo mod : mods) { - if (mod.getModId().equals(modid)) { - return true; - } - } - return false; - } - - public static ModLoader getModLoader() { - return ModLoader.FORGE; - } - - public static String modidFromJar(String jarName) { - for (IModInfo mod : ModList.get().getMods()) { - String modLocation = mod.getOwningFile() - .getFile() - .getFilePath() - .toString() - .replace("+", " "); - - String decodedJarName = URLDecoder.decode(jarName, StandardCharsets.UTF_8); - int hashIndex = decodedJarName.lastIndexOf("#"); - if (hashIndex != -1) { - decodedJarName = decodedJarName.substring(0, hashIndex); - } - if (modLocation.endsWith(decodedJarName)) { - return mod.getModId(); - } - } - return null; - } - - public static String getModVersion(String modid) { - return ModList.get().getModFileById(modid).versionString(); - } - - public static String getVersion() { - return FMLLoader.versionInfo().forgeVersion(); - } - - public static boolean isClient() { - return FMLLoader.getDist().isClient(); - } -} -*//*?} elif neoforge {*/ +//?} elif neoforge { /*import java.util.List; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; @@ -180,4 +118,4 @@ public static boolean isClient() { return FMLLoader.getDist().isClient(); } } -*//*?}*/ +*///?} diff --git a/src/main/java/com/bawnorton/neruina/report/AutoReportConfig.java b/src/main/java/com/bawnorton/neruina/report/AutoReportConfig.java index 5f1b7af..ac152fb 100644 --- a/src/main/java/com/bawnorton/neruina/report/AutoReportConfig.java +++ b/src/main/java/com/bawnorton/neruina/report/AutoReportConfig.java @@ -4,26 +4,12 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.stream.JsonReader; -import java.util.Objects; -@SuppressWarnings("ClassCanBeRecord") // Compat with Gson 2.8.9 -public final class AutoReportConfig { - /*? if >=1.19 {*/ +public record AutoReportConfig(String modid, String repo, String title, String body) { private static final Gson GSON = new GsonBuilder() .setPrettyPrinting() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create(); - private final String modid; - private final String repo; - private final String title; - private final String body; - - public AutoReportConfig(String modid, String repo, String title, String body) { - this.modid = modid; - this.repo = repo; - this.title = title; - this.body = body; - } public boolean isVaild() { return modid != null && repo != null; @@ -36,51 +22,4 @@ public IssueFormatter createIssueFormatter() { public static AutoReportConfig fromJson(JsonReader reader) { return GSON.fromJson(reader, AutoReportConfig.class); } - - public String modid() { - return modid; - } - - public String repo() { - return repo; - } - - public String title() { - return title; - } - - public String body() { - return body; - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (obj == null || obj.getClass() != this.getClass()) { - return false; - } - var that = (AutoReportConfig) obj; - return Objects.equals(this.modid, that.modid) && - Objects.equals(this.repo, that.repo) && - Objects.equals(this.title, that.title) && - Objects.equals(this.body, that.body); - } - - @Override - public int hashCode() { - return Objects.hash(modid, repo, title, body); - } - - @Override - public String toString() { - return "AutoReportConfig[" + - "modid=" + modid + ", " + - "repo=" + repo + ", " + - "title=" + title + ", " + - "body=" + body + ']'; - } - - /*?}*/ } diff --git a/src/main/java/com/bawnorton/neruina/report/AutoReportHandler.java b/src/main/java/com/bawnorton/neruina/report/AutoReportHandler.java index 68f5c61..a8a0135 100644 --- a/src/main/java/com/bawnorton/neruina/report/AutoReportHandler.java +++ b/src/main/java/com/bawnorton/neruina/report/AutoReportHandler.java @@ -22,7 +22,6 @@ import java.util.stream.Collectors; public final class AutoReportHandler { - /*? if >=1.19 {*/ private final Set reportedEntries = Collections.synchronizedSet(new HashSet<>()); private final List configs = new ArrayList<>(); private final Map repositories = new HashMap<>(); @@ -57,6 +56,10 @@ public void init(MinecraftServer server) { } public CompletableFuture createReports(ServerPlayerEntity player, TickingEntry entry) { + return createReports(player, entry, true); + } + + public CompletableFuture createReports(ServerPlayerEntity player, TickingEntry entry, boolean publish) { UUID entryId = entry.uuid(); if (reportedEntries.contains(entryId)) { return CompletableFuture.completedFuture(ReportStatus.alreadyExists()); @@ -117,18 +120,21 @@ public CompletableFuture createReports(ServerPlayerEntity player, } Map builtIssues = new HashMap<>(); - issueBuilders.forEach((s, ghIssueBuilder) -> { - if (ghIssueBuilder == null) return; - try { - builtIssues.put(s, ghIssueBuilder.create()); - } catch (IOException e) { - Neruina.LOGGER.error("Failed to create issue for mod: \"{}\"", s, e); - } - }); + if (publish) { + issueBuilders.forEach((s, ghIssueBuilder) -> { + if (ghIssueBuilder == null) return; + try { + builtIssues.put(s, ghIssueBuilder.create()); + } catch (IOException e) { + Neruina.LOGGER.error("Failed to create issue for mod: \"{}\"", s, e); + } + }); + } GHIssueBuilder masterIssueBuilder; + try { - masterIssueBuilder = createMasterIssue(github, builtIssues, entry); + masterIssueBuilder = createMasterIssue(github, builtIssues, entry); } catch (RuntimeException e) { Neruina.LOGGER.error("Failed to create master issue", e); return CompletableFuture.completedFuture(ReportStatus.failure()); @@ -136,14 +142,18 @@ public CompletableFuture createReports(ServerPlayerEntity player, if (masterIssueBuilder == null) return CompletableFuture.completedFuture(ReportStatus.failure()); try { - GHIssue masterIssue = masterIssueBuilder.create(); - String url = masterIssue.getHtmlUrl().toString(); - Neruina.LOGGER.info( - "Report(s) created for ticking entry: ({}: {})", - entry.getCauseType(), - entry.getCauseName() - ); - return CompletableFuture.completedFuture(ReportStatus.success(url)); + if (publish) { + GHIssue masterIssue = masterIssueBuilder.create(); + String url = masterIssue.getHtmlUrl().toString(); + Neruina.LOGGER.info( + "Report(s) created for ticking entry: ({}: {})", + entry.getCauseType(), + entry.getCauseName() + ); + return CompletableFuture.completedFuture(ReportStatus.success(url)); + } else { + return CompletableFuture.completedFuture(ReportStatus.testing()); + } } catch (IOException e) { Neruina.LOGGER.error("Failed to create master issue", e); return CompletableFuture.completedFuture(ReportStatus.failure()); @@ -195,5 +205,15 @@ private GHIssueBuilder createIssue(GitHub github, RepositoryReference reference, return reference.createIssueBuilder(formatter.getTitle(entry)) .body(formatter.getBody(entry, github)); } - /*?}*/ + + public void testReporting(ServerPlayerEntity player) { + TickingEntry dummyEntry = new TickingEntry( + player, + false, + player.getWorld().getRegistryKey(), + player.getBlockPos(), + new RuntimeException() + ); + createReports(player, dummyEntry, false); + } } diff --git a/src/main/java/com/bawnorton/neruina/report/GithubAuthManager.java b/src/main/java/com/bawnorton/neruina/report/GithubAuthManager.java index 0edb967..6b09c24 100644 --- a/src/main/java/com/bawnorton/neruina/report/GithubAuthManager.java +++ b/src/main/java/com/bawnorton/neruina/report/GithubAuthManager.java @@ -10,7 +10,7 @@ import com.bawnorton.neruina.exception.InProgressException; import com.bawnorton.neruina.handler.MessageHandler; import com.bawnorton.neruina.thread.AbortableCountDownLatch; -import com.bawnorton.neruina.version.VersionedText; +import com.bawnorton.neruina.version.Texter; import com.google.gson.JsonObject; import com.sun.net.httpserver.HttpServer; import net.minecraft.server.network.ServerPlayerEntity; @@ -48,7 +48,6 @@ import java.util.stream.Collectors; public final class GithubAuthManager { - /*? if >=1.19 {*/ private static final String CLIENT_ID = "1907e7c3f988a98face9"; private static final String GITHUB_AUTH_URL = "https://github.com/login/oauth/authorize"; private static final String GITHUB_TOKEN_URL = "https://github.com/login/oauth/access_token"; @@ -72,7 +71,7 @@ public static CompletableFuture getOrLogin(ServerPlayerEntity player) { LoginRecord record = logins.computeIfAbsent(player.getUuid(), uuid -> new LoginRecord()); if (record.gitHub != null) { messageHandler.sendToPlayer(player, - VersionedText.translatable("commands.neruina.report.reporting"), + Texter.translatable("commands.neruina.report.reporting"), false ); @@ -84,7 +83,7 @@ public static CompletableFuture getOrLogin(ServerPlayerEntity player) { } messageHandler.sendToPlayer(player, - VersionedText.translatable("commands.neruina.report.processing"), + Texter.translatable("commands.neruina.report.processing"), false, messageHandler.generateCancelLoginAction() ); @@ -119,7 +118,7 @@ public static CompletableFuture getOrLogin(ServerPlayerEntity player) { Neruina.LOGGER.info("Successfully Logged into GitHub as {}", record.gitHub.getMyself().getLogin()); messageHandler.sendToPlayer(player, - VersionedText.translatable("commands.neruina.report.authenticated"), + Texter.translatable("commands.neruina.report.authenticated"), false ); @@ -226,6 +225,4 @@ static class LoginRecord { private boolean inProgress; private @Nullable GitHub gitHub; } - - /*?}*/ } diff --git a/src/main/java/com/bawnorton/neruina/report/IssueFormatter.java b/src/main/java/com/bawnorton/neruina/report/IssueFormatter.java index 12fd93e..c56b7a5 100644 --- a/src/main/java/com/bawnorton/neruina/report/IssueFormatter.java +++ b/src/main/java/com/bawnorton/neruina/report/IssueFormatter.java @@ -18,7 +18,6 @@ import java.util.function.UnaryOperator; public class IssueFormatter { - /*? if >=1.19 {*/ private static final List PLACEHOLDERS = List.of( new Placeholder("date", true, Restriction.NONE, (config, entry) -> DateFormat.getDateInstance(DateFormat.MEDIUM).format(new Date())), new Placeholder("time", true, Restriction.NONE, (config, entry) -> DateFormat.getTimeInstance(DateFormat.MEDIUM).format(new Date())), @@ -167,5 +166,4 @@ public boolean allows(Restriction restriction) { private interface Applier { String apply(AutoReportConfig config, TickingEntry entry); } - /*?}*/ } diff --git a/src/main/java/com/bawnorton/neruina/report/ReportStatus.java b/src/main/java/com/bawnorton/neruina/report/ReportStatus.java index dd57937..cdf7d68 100644 --- a/src/main/java/com/bawnorton/neruina/report/ReportStatus.java +++ b/src/main/java/com/bawnorton/neruina/report/ReportStatus.java @@ -31,12 +31,17 @@ public static ReportStatus failure() { return new ReportStatus(Code.FAILURE); } + public static ReportStatus testing() { + return new ReportStatus(Code.TESTING); + } + public enum Code { SUCCESS, FAILURE, ALREADY_EXISTS, ABORTED, IN_PROGRESS, - TIMEOUT + TIMEOUT, + TESTING } } diff --git a/src/main/java/com/bawnorton/neruina/report/RepositoryReference.java b/src/main/java/com/bawnorton/neruina/report/RepositoryReference.java index 9bf24e0..469f7f6 100644 --- a/src/main/java/com/bawnorton/neruina/report/RepositoryReference.java +++ b/src/main/java/com/bawnorton/neruina/report/RepositoryReference.java @@ -4,9 +4,7 @@ import org.kohsuke.github.GHRepository; public record RepositoryReference(String modid, GHRepository githubRepo, AutoReportConfig config) { - /*? if >=1.19 {*/ public GHIssueBuilder createIssueBuilder(String title) { return githubRepo.createIssue(title); } - /*?}*/ } diff --git a/src/main/java/com/bawnorton/neruina/report/Storage.java b/src/main/java/com/bawnorton/neruina/report/Storage.java index 92f4312..ef372e8 100644 --- a/src/main/java/com/bawnorton/neruina/report/Storage.java +++ b/src/main/java/com/bawnorton/neruina/report/Storage.java @@ -8,10 +8,8 @@ import java.io.IOException; import java.util.Arrays; import java.util.Base64; -import java.util.Objects; public class Storage { - /*? if >=1.19 {*/ private static final Gson GSON = new Gson(); private static StorageData storageData; @@ -27,44 +25,16 @@ public static void init(MinecraftServer server) { }); } public static String get() { - byte[] s = Base64.getDecoder().decode(storageData.stored);try {Cipher c = Cipher.getInstance("AES");c.init(Cipher.DECRYPT_MODE, new SecretKeySpec(Arrays.copyOf(s, 16), "AES"));return new String(c.doFinal(Base64.getDecoder().decode(storageData.data)));} catch (Exception e) {throw new RuntimeException("Error occured while getting data", e);} - } - - @SuppressWarnings("ClassCanBeRecord") // Compat with Gson 2.8.9 - private static final class StorageData { - private final String stored; - private final String data; - - private StorageData(String stored, String data) { - this.stored = stored; - this.data = data; - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (obj == null || obj.getClass() != this.getClass()) { - return false; - } - var that = (StorageData) obj; - return Objects.equals(this.stored, that.stored) && - Objects.equals(this.data, that.data); - } - - @Override - public int hashCode() { - return Objects.hash(stored, data); - } - - @Override - public String toString() { - return "StorageData[" + - "stored=" + stored + ", " + - "data=" + data + ']'; + byte[] s = Base64.getDecoder().decode(storageData.stored); + try { + Cipher c = Cipher.getInstance("AES"); + c.init(Cipher.DECRYPT_MODE, new SecretKeySpec(Arrays.copyOf(s, 16), "AES")); + return new String(c.doFinal(Base64.getDecoder().decode(storageData.data))); + } catch (Exception e) { + throw new RuntimeException("Error occured while getting data", e); } + } - } - /*?}*/ + private record StorageData(String stored, String data) { + } } diff --git a/src/main/java/com/bawnorton/neruina/version/VersionedText.java b/src/main/java/com/bawnorton/neruina/version/Texter.java similarity index 73% rename from src/main/java/com/bawnorton/neruina/version/VersionedText.java rename to src/main/java/com/bawnorton/neruina/version/Texter.java index 1ad1a94..72c7848 100644 --- a/src/main/java/com/bawnorton/neruina/version/VersionedText.java +++ b/src/main/java/com/bawnorton/neruina/version/Texter.java @@ -4,25 +4,17 @@ import net.minecraft.util.Formatting; import java.util.function.UnaryOperator; -public interface VersionedText { +public interface Texter { Text LINE_BREAK = literal("\n"); Text SPACE = literal(" "); Text NERUINA_HEADER = withStyle(literal("[Neruina]: "), style -> style.withColor(Formatting.AQUA)); static Text literal(String text) { - /*? if >=1.19 {*/ return Text.literal(text); - /*?} else {*//* - return new LiteralText(text); - *//*?}*/ } static Text translatable(String key, Object... args) { - /*? if >=1.19 {*/ return Text.translatable(key, args); - /*?} else {*//* - return new TranslatableText(key, args); - *//*?}*/ } static Text withStyle(Text text, UnaryOperator