diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cb5ab38..e2b49ee 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: # Use these Java versions - java: [21] # Current Java LTS & minimum supported by Minecraft + java: [25] # Current Java LTS & minimum supported by Minecraft # Test on both Linux and Windows os: [ubuntu-latest, windows-latest] diff --git a/build.gradle b/build.gradle index e65ce36..4aec676 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version "${loom_version}" + id 'net.fabricmc.fabric-loom' version "${loom_version}" id 'maven-publish' } @@ -18,21 +18,20 @@ repositories { dependencies { // fabric minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" // dependencies - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" + implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" // mod compat - modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" - modCompileOnly "maven.modrinth:jade:${project.jade_version}" + // compileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" + compileOnly "maven.modrinth:jade:${project.jade_version}" // https://maven4.bai.lol/mcp/mobius/waila/ - modCompileOnly "mcp.mobius.waila:wthit-api:fabric-${project.wthit_version}" + compileOnly "mcp.mobius.waila:wthit-api:fabric-${project.wthit_version}" - // not yet updated - // modImplementation("mezz.jei:jei-${minecraft_version}-fabric-api:${jei_version}") - // modRuntimeOnly("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}") + // broken dependencies + //compileOnly("mezz.jei:jei-${minecraft_version}-fabric-api:${jei_version}") + //runtimeOnly("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}") } processResources { @@ -53,7 +52,7 @@ processResources { // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html tasks.withType(JavaCompile) { options.encoding = "UTF-8" - it.options.release = 21 // Minecraft 1.20.5 upwards uses Java 21. + it.options.release = 25 // Minecraft 26.1 upwards uses Java 25. } java { @@ -69,7 +68,7 @@ base { jar { from("LICENSE.md") { - rename { "${it}_${project.archivesBaseName}"} + rename { "${it}_${project.archives_base_name}"} } } diff --git a/examples/revelationary_demo_datapack.zip b/examples/revelationary_demo_datapack.zip index 37cda09..98ea315 100644 Binary files a/examples/revelationary_demo_datapack.zip and b/examples/revelationary_demo_datapack.zip differ diff --git a/gradle.properties b/gradle.properties index 90afe88..41b5ec2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,20 +2,19 @@ org.gradle.jvmargs = -Xmx2G # Fabric Properties -minecraft_version=1.21.6 -yarn_mappings=1.21.6+build.1 -loader_version=0.17.2 -loom_version=1.11-SNAPSHOT +minecraft_version=26.1 +loader_version=0.18.6 +loom_version=1.15-SNAPSHOT # Mod Properties -mod_version=1.5.1+1.21.6 +mod_version=1.5.1+26.1 maven_group=de.dafuqs archives_base_name = revelationary # https://fabricmc.net/develop/ -fabric_api_version=0.128.2+1.21.6 +fabric_api_version=0.145.1+26.1 -jade_version=19.3.2+fabric -wthit_version=16.0.1 -rei_version=20.0.811 -# jei_version=19.21.0.247 \ No newline at end of file +jade_version=26.0.4+fabric +wthit_version=19.0.0 +#rei_version=20.0.811 +jei_version=29.2.0.20 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180..d997cfc 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4c12f2..c61a118 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists \ No newline at end of file +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 2f856aa..739907d 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright � 2015-2021 the original authors. +# Copyright © 2015 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. @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -32,10 +34,10 @@ # 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�. +# * 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: # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/2d6327017519d23b96af35865dc997fcb544fb40/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +82,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -133,22 +132,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -165,7 +171,6 @@ fi # 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" ) @@ -193,18 +198,27 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, 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 \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..c4bdd3a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,8 +13,10 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +27,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,32 +59,33 @@ 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. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 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 %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/java/de/dafuqs/revelationary/ClientAdvancements.java b/src/main/java/de/dafuqs/revelationary/ClientAdvancements.java index a101ffb..6edb49d 100644 --- a/src/main/java/de/dafuqs/revelationary/ClientAdvancements.java +++ b/src/main/java/de/dafuqs/revelationary/ClientAdvancements.java @@ -4,14 +4,13 @@ import de.dafuqs.revelationary.mixin.client.AccessorClientAdvancementManager; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.advancement.AdvancementEntry; -import net.minecraft.advancement.AdvancementProgress; -import net.minecraft.advancement.PlacedAdvancement; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientAdvancementManager; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.packet.s2c.play.AdvancementUpdateS2CPacket; -import net.minecraft.util.Identifier; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.AdvancementNode; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket; +import net.minecraft.resources.Identifier; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -21,14 +20,14 @@ public class ClientAdvancements { protected static boolean receivedFirstAdvancementPacket = false; public static List callbacks = new ArrayList<>(); - public static void onClientPacket(@NotNull AdvancementUpdateS2CPacket packet) { + public static void onClientPacket(@NotNull ClientboundUpdateAdvancementsPacket packet) { boolean hadPacketBefore = receivedFirstAdvancementPacket; receivedFirstAdvancementPacket = true; - boolean isReset = packet.shouldClearCurrent(); + boolean isReset = packet.shouldReset(); boolean isFirstPacket = !hadPacketBefore || isReset; Set doneAdvancements = getDoneAdvancements(packet); - Set removedAdvancements = packet.getAdvancementIdsToRemove(); + Set removedAdvancements = packet.getRemoved(); ClientRevelationHolder.processRemovedAdvancements(removedAdvancements); ClientRevelationHolder.processNewAdvancements(doneAdvancements, isFirstPacket); @@ -45,13 +44,13 @@ public static boolean hasDone(Identifier identifier) { } if (identifier != null) { - ClientPlayNetworkHandler conn = MinecraftClient.getInstance().getNetworkHandler(); + ClientPacketListener conn = Minecraft.getInstance().getConnection(); if (conn != null) { - ClientAdvancementManager cm = conn.getAdvancementHandler(); - PlacedAdvancement adv = cm.getManager().get(identifier); + net.minecraft.client.multiplayer.ClientAdvancements cm = conn.getAdvancements(); + AdvancementNode adv = cm.getTree().get(identifier); if (adv != null) { - Map progressMap = ((AccessorClientAdvancementManager) cm).getAdvancementProgresses(); - AdvancementProgress progress = progressMap.get(adv.getAdvancementEntry()); + Map progressMap = ((AccessorClientAdvancementManager) cm).getProgress(); + AdvancementProgress progress = progressMap.get(adv.holder()); return progress != null && progress.isDone(); } } @@ -59,13 +58,13 @@ public static boolean hasDone(Identifier identifier) { return false; } - public static @NotNull Set getDoneAdvancements(@NotNull AdvancementUpdateS2CPacket packet) { + public static @NotNull Set getDoneAdvancements(@NotNull ClientboundUpdateAdvancementsPacket packet) { Set doneAdvancements = new HashSet<>(); - for (AdvancementEntry earnedAdvancementEntry : packet.getAdvancementsToEarn()) { + for (AdvancementHolder earnedAdvancementEntry : packet.getAdded()) { doneAdvancements.add(earnedAdvancementEntry.id()); } - for (Map.Entry progressedAdvancement : packet.getAdvancementsToProgress().entrySet()) { + for (Map.Entry progressedAdvancement : packet.getProgress().entrySet()) { if (progressedAdvancement.getValue().isDone()) { doneAdvancements.add(progressedAdvancement.getKey()); } diff --git a/src/main/java/de/dafuqs/revelationary/ClientRevelationHolder.java b/src/main/java/de/dafuqs/revelationary/ClientRevelationHolder.java index 67a2a0a..4495364 100644 --- a/src/main/java/de/dafuqs/revelationary/ClientRevelationHolder.java +++ b/src/main/java/de/dafuqs/revelationary/ClientRevelationHolder.java @@ -5,12 +5,12 @@ import de.dafuqs.revelationary.api.revelations.WorldRendererAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -115,7 +115,7 @@ public static void processRemovedAdvancements(@NotNull Set removedAd // rerender chunks to show newly swapped blocks static void rebuildAllChunks() { - WorldRenderer renderer = MinecraftClient.getInstance().worldRenderer; + LevelRenderer renderer = Minecraft.getInstance().levelRenderer; ((WorldRendererAccessor) renderer).revelationary$rebuildAllChunks(); } @@ -135,7 +135,7 @@ public static void uncloak(BlockState blockState) { } public static boolean isCloaked(Block block) { - return activeBlockStateSwaps.contains(block.getDefaultState()); + return activeBlockStateSwaps.contains(block.defaultBlockState()); } public static boolean isCloaked(BlockState blockState) { diff --git a/src/main/java/de/dafuqs/revelationary/RevelationDataLoader.java b/src/main/java/de/dafuqs/revelationary/RevelationDataLoader.java index d6c21de..b3e8e25 100644 --- a/src/main/java/de/dafuqs/revelationary/RevelationDataLoader.java +++ b/src/main/java/de/dafuqs/revelationary/RevelationDataLoader.java @@ -3,34 +3,40 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import net.fabricmc.fabric.api.resource.*; -import net.minecraft.block.*; -import net.minecraft.command.*; -import net.minecraft.command.argument.*; -import net.minecraft.item.*; -import net.minecraft.registry.*; -import net.minecraft.resource.*; -import net.minecraft.resource.featuretoggle.*; -import net.minecraft.server.command.*; -import net.minecraft.text.*; -import net.minecraft.util.*; -import net.minecraft.util.profiler.*; - +import net.minecraft.commands.CommandBuildContext; +import net.minecraft.commands.arguments.blocks.BlockStateParser; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.registries.VanillaRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.FileToIdConverter; +import net.minecraft.resources.Identifier; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import java.util.*; -public class RevelationDataLoader extends JsonDataLoader implements IdentifiableResourceReloadListener { +public class RevelationDataLoader extends SimpleJsonResourceReloadListener implements IdentifiableResourceReloadListener { public static final String LOCATION = "revelations"; - public static final Identifier ID = Identifier.of(Revelationary.MOD_ID, LOCATION); + public static final Identifier ID = Identifier.fromNamespaceAndPath(Revelationary.MOD_ID, LOCATION); public static final RevelationDataLoader INSTANCE = new RevelationDataLoader(); private RevelationDataLoader() { - super(RevelationEntry.CODEC, ResourceFinder.json(LOCATION)); + super(RevelationEntry.CODEC, FileToIdConverter.json(LOCATION)); } @Override - protected void apply(Map prepared, ResourceManager manager, Profiler profiler) { - RegistryWrapper.WrapperLookup lookup = BuiltinRegistries.createWrapperLookup(); - RegistryWrapper blockRegistryWrapper = CommandRegistryAccess.of(lookup, FeatureFlags.FEATURE_MANAGER.getFeatureSet()).getOrThrow(RegistryKeys.BLOCK);; + protected void apply(Map prepared, ResourceManager manager, ProfilerFiller profiler) { + HolderLookup.Provider lookup = VanillaRegistries.createLookup(); + HolderLookup blockRegistryWrapper = CommandBuildContext.simple(lookup, FeatureFlags.REGISTRY.allFlags()).lookupOrThrow(Registries.BLOCK);; prepared.forEach((identifier, revelationEntry) -> registerFromJson(blockRegistryWrapper, revelationEntry)); RevelationRegistry.deepTrim(); @@ -53,16 +59,16 @@ public record RevelationEntry(Identifier advancementId, Map bloc } - public static void registerFromJson(RegistryWrapper blockRegistryWrapper, RevelationEntry rev) { + public static void registerFromJson(HolderLookup blockRegistryWrapper, RevelationEntry rev) { for (Map.Entry stateEntry : rev.blockStateSwaps.entrySet()) { try { - BlockState sourceBlockState = BlockArgumentParser.block(blockRegistryWrapper, stateEntry.getKey(), false).blockState(); - BlockState targetBlockState = BlockArgumentParser.block(blockRegistryWrapper, stateEntry.getValue(), false).blockState(); + BlockState sourceBlockState = BlockStateParser.parseForBlock(blockRegistryWrapper, stateEntry.getKey(), false).blockState(); + BlockState targetBlockState = BlockStateParser.parseForBlock(blockRegistryWrapper, stateEntry.getValue(), false).blockState(); if (sourceBlockState.isAir()) { Revelationary.logError("Trying to register invalid block cloak. Advancement: " + rev.advancementId - + " Source Block: " + Registries.BLOCK.getId(sourceBlockState.getBlock()) - + " Target Block: " + Registries.BLOCK.getId(targetBlockState.getBlock())); + + " Source Block: " + BuiltInRegistries.BLOCK.getKey(sourceBlockState.getBlock()) + + " Target Block: " + BuiltInRegistries.BLOCK.getKey(targetBlockState.getBlock())); } RevelationRegistry.registerBlockState(rev.advancementId, sourceBlockState, targetBlockState); @@ -75,17 +81,17 @@ public static void registerFromJson(RegistryWrapper blockRegistryWrapper, Identifier sourceId = Identifier.tryParse(itemEntry.getKey()); Identifier targetId = Identifier.tryParse(itemEntry.getValue()); - Item sourceItem = Registries.ITEM.get(sourceId); - Item targetItem = Registries.ITEM.get(targetId); + Item sourceItem = BuiltInRegistries.ITEM.getValue(sourceId); + Item targetItem = BuiltInRegistries.ITEM.getValue(targetId); RevelationRegistry.registerItem(rev.advancementId, sourceItem, targetItem); } for (Map.Entry blockNameEntry : rev.blockTranslations.entrySet()) { Identifier sourceId = Identifier.tryParse(blockNameEntry.getKey()); - MutableText targetText = Text.translatable(blockNameEntry.getValue()); + MutableComponent targetText = Component.translatable(blockNameEntry.getValue()); - Block sourceBlock = Registries.BLOCK.get(sourceId); + Block sourceBlock = BuiltInRegistries.BLOCK.getValue(sourceId); RevelationRegistry.registerBlockTranslation(sourceBlock, targetText); Item blockItem = sourceBlock.asItem(); @@ -96,9 +102,9 @@ public static void registerFromJson(RegistryWrapper blockRegistryWrapper, for (Map.Entry itemNameEntry : rev.itemTranslations.entrySet()) { Identifier sourceId = Identifier.tryParse(itemNameEntry.getKey()); - MutableText targetText = Text.translatable(itemNameEntry.getValue()); + MutableComponent targetText = Component.translatable(itemNameEntry.getValue()); - Item sourceItem = Registries.ITEM.get(sourceId); + Item sourceItem = BuiltInRegistries.ITEM.getValue(sourceId); RevelationRegistry.registerItemTranslation(sourceItem, targetText); } } diff --git a/src/main/java/de/dafuqs/revelationary/RevelationRegistry.java b/src/main/java/de/dafuqs/revelationary/RevelationRegistry.java index 335f092..2549fdf 100644 --- a/src/main/java/de/dafuqs/revelationary/RevelationRegistry.java +++ b/src/main/java/de/dafuqs/revelationary/RevelationRegistry.java @@ -5,15 +5,18 @@ import de.dafuqs.revelationary.config.RevelationaryConfig; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.block.*; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.*; -import net.minecraft.registry.*; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import net.minecraft.util.Language; -import net.minecraft.util.Pair; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.Identifier; +import net.minecraft.util.Tuple; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,39 +32,39 @@ public class RevelationRegistry { private static Object2ObjectOpenHashMap itemToAdv = new Object2ObjectOpenHashMap<>(); private static Object2ObjectOpenHashMap itemCloaks = new Object2ObjectOpenHashMap<>(); - private static Object2ObjectOpenHashMap cloakedBlockNameTranslations = new Object2ObjectOpenHashMap<>(); - private static Object2ObjectOpenHashMap cloakedItemNameTranslations = new Object2ObjectOpenHashMap<>(); + private static Object2ObjectOpenHashMap cloakedBlockNameTranslations = new Object2ObjectOpenHashMap<>(); + private static Object2ObjectOpenHashMap cloakedItemNameTranslations = new Object2ObjectOpenHashMap<>(); - public static MutableText getTranslationString(Item item) { + public static MutableComponent getTranslationString(Item item) { if (cloakedItemNameTranslations.containsKey(item)) { return cloakedItemNameTranslations.get(item); } boolean isBlockItem = item instanceof BlockItem; if(isBlockItem && !RevelationaryConfig.get().NameForUnrevealedBlocks.isEmpty()) { - return Text.translatable(RevelationaryConfig.get().NameForUnrevealedBlocks); + return Component.translatable(RevelationaryConfig.get().NameForUnrevealedBlocks); } if(!isBlockItem && !RevelationaryConfig.get().NameForUnrevealedItems.isEmpty()) { - return Text.translatable(RevelationaryConfig.get().NameForUnrevealedItems); + return Component.translatable(RevelationaryConfig.get().NameForUnrevealedItems); } if(RevelationaryConfig.get().UseTargetBlockOrItemNameInsteadOfScatter) { - return Text.translatable(itemCloaks.get(item).getTranslationKey()); + return Component.translatable(itemCloaks.get(item).getDescriptionId()); } // Get the localized name of the item and scatter it using §k to make it unreadable - return Text.literal("§k" + Language.getInstance().get(item.getTranslationKey())); + return Component.literal("§k" + Language.getInstance().getOrDefault(item.getDescriptionId())); } - public static MutableText getTranslationString(Block block) { + public static MutableComponent getTranslationString(Block block) { if (cloakedBlockNameTranslations.containsKey(block)) { return cloakedBlockNameTranslations.get(block); } if(!RevelationaryConfig.get().NameForUnrevealedBlocks.isEmpty()) { - return Text.translatable(RevelationaryConfig.get().NameForUnrevealedBlocks); + return Component.translatable(RevelationaryConfig.get().NameForUnrevealedBlocks); } if(RevelationaryConfig.get().UseTargetBlockOrItemNameInsteadOfScatter) { return blockCloaks.get(block).getName(); } // Get the localized name of the block and scatter it using §k to make it unreadable - return Text.literal("§k" + Language.getInstance().get(block.getTranslationKey())); + return Component.literal("§k" + Language.getInstance().getOrDefault(block.getDescriptionId())); } private static void trim() { @@ -105,25 +108,25 @@ public static void addRevelationAwares() { BlockState sourceBlockState = states.getKey(); if (sourceBlockState.isAir()) { Revelationary.logError("Trying to register invalid block cloak. Advancement: " + advancementIdentifier - + " Source Block: " + Registries.BLOCK.getId(sourceBlockState.getBlock()) - + " Target Block: " + Registries.BLOCK.getId(states.getValue().getBlock())); + + " Source Block: " + BuiltInRegistries.BLOCK.getKey(sourceBlockState.getBlock()) + + " Target Block: " + BuiltInRegistries.BLOCK.getKey(states.getValue().getBlock())); continue; } registerBlockState(advancementIdentifier, sourceBlockState, states.getValue()); } - Pair item = revelationAware.getItemCloak(); + Tuple item = revelationAware.getItemCloak(); if (item != null) { - registerItem(advancementIdentifier, item.getLeft(), item.getRight()); + registerItem(advancementIdentifier, item.getA(), item.getB()); } - Pair blockTranslation = revelationAware.getCloakedBlockTranslation(); + Tuple blockTranslation = revelationAware.getCloakedBlockTranslation(); if (blockTranslation != null) { - registerBlockTranslation(blockTranslation.getLeft(), blockTranslation.getRight()); + registerBlockTranslation(blockTranslation.getA(), blockTranslation.getB()); } - Pair itemTranslation = revelationAware.getCloakedItemTranslation(); + Tuple itemTranslation = revelationAware.getCloakedItemTranslation(); if (itemTranslation != null) { - registerItemTranslation(itemTranslation.getLeft(), itemTranslation.getRight()); + registerItemTranslation(itemTranslation.getA(), itemTranslation.getB()); } } } @@ -148,7 +151,7 @@ public static void registerBlockState(Identifier advancementIdentifier, BlockSta } } - public static void registerBlockTranslation(Block sourceBlock, MutableText targetTranslation) { + public static void registerBlockTranslation(Block sourceBlock, MutableComponent targetTranslation) { cloakedBlockNameTranslations.put(sourceBlock, targetTranslation); } @@ -156,7 +159,7 @@ public static boolean hasCloak(BlockState blockState) { return blockStateCloaks.containsKey(blockState); } - public static boolean isVisibleTo(BlockState state, PlayerEntity player) { + public static boolean isVisibleTo(BlockState state, Player player) { return AdvancementHelper.hasAdvancement(player, blockStateToAdv.getOrDefault(state, null)); } @@ -213,8 +216,8 @@ public static List getBlockEntries(Identifier advancement) { public static void registerItem(Identifier advancementIdentifier, Item sourceItem, Item targetItem) { if(sourceItem == Items.AIR || targetItem == Items.AIR) { Revelationary.logError("Trying to register invalid item cloak. Advancement: " + advancementIdentifier - + " Source Item: " + Registries.ITEM.getId(sourceItem) - + " Target Item: " + Registries.ITEM.getId(targetItem)); + + " Source Item: " + BuiltInRegistries.ITEM.getKey(sourceItem) + + " Target Item: " + BuiltInRegistries.ITEM.getKey(targetItem)); return; } @@ -233,7 +236,7 @@ public static void registerItem(Identifier advancementIdentifier, Item sourceIte itemToAdv.put(sourceItem, advancementIdentifier); } - public static void registerItemTranslation(Item sourceItem, MutableText targetTranslation) { + public static void registerItemTranslation(Item sourceItem, MutableComponent targetTranslation) { cloakedItemNameTranslations.put(sourceItem, targetTranslation); } @@ -246,7 +249,7 @@ public static Item getCloak(Item item) { return itemCloaks.getOrDefault(item, null); } - public static boolean isVisibleTo(Item item, PlayerEntity player) { + public static boolean isVisibleTo(Item item, Player player) { return AdvancementHelper.hasAdvancement(player, itemToAdv.getOrDefault(item, null)); } diff --git a/src/main/java/de/dafuqs/revelationary/Revelationary.java b/src/main/java/de/dafuqs/revelationary/Revelationary.java index c010003..887a71e 100644 --- a/src/main/java/de/dafuqs/revelationary/Revelationary.java +++ b/src/main/java/de/dafuqs/revelationary/Revelationary.java @@ -6,7 +6,7 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.*; import net.fabricmc.fabric.api.resource.*; import net.fabricmc.loader.api.*; -import net.minecraft.resource.*; +import net.minecraft.server.packs.PackType; import org.slf4j.*; public class Revelationary implements ModInitializer { @@ -35,8 +35,8 @@ public void onInitialize() { RevelationaryNetworking.register(); AdvancementCriteria.register(); - CommandRegistrationCallback.EVENT.register(Commands::register); - ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(RevelationDataLoader.INSTANCE); + CommandRegistrationCallback.EVENT.register(RevelationaryCommands::register); + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(RevelationDataLoader.INSTANCE); ServerLifecycleEvents.SERVER_STARTED.register(server -> { RevelationRegistry.addRevelationAwares(); diff --git a/src/main/java/de/dafuqs/revelationary/Commands.java b/src/main/java/de/dafuqs/revelationary/RevelationaryCommands.java similarity index 56% rename from src/main/java/de/dafuqs/revelationary/Commands.java rename to src/main/java/de/dafuqs/revelationary/RevelationaryCommands.java index 14478c3..19a4077 100644 --- a/src/main/java/de/dafuqs/revelationary/Commands.java +++ b/src/main/java/de/dafuqs/revelationary/RevelationaryCommands.java @@ -7,53 +7,52 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.tree.CommandNode; import de.dafuqs.revelationary.api.advancements.AdvancementUtils; -import net.minecraft.command.CommandRegistryAccess; -import net.minecraft.command.argument.EntityArgumentType; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; - import java.util.Collection; import java.util.stream.Collectors; - -public class Commands { - public static void register(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess, CommandManager.RegistrationEnvironment environment) { - var revelationaryNode = CommandManager +import net.minecraft.commands.CommandBuildContext; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; + +public class RevelationaryCommands { + public static void register(CommandDispatcher dispatcher, CommandBuildContext registryAccess, Commands.CommandSelection environment) { + var revelationaryNode = Commands .literal("revelationary") - .requires(source -> source.hasPermissionLevel(4)) + .requires(Commands.hasPermission(Commands.LEVEL_GAMEMASTERS)) .build(); dispatcher.getRoot().addChild(revelationaryNode); - var advancementNode = CommandManager.literal("advancement").build(); + var advancementNode = Commands.literal("advancement").build(); revelationaryNode.addChild(advancementNode); - var revokeNode = CommandManager.literal("revoke").build(); + var revokeNode = Commands.literal("revoke").build(); advancementNode.addChild(revokeNode); executesWithTargetsNamespacePathArguments(revokeNode, Executors::revoke); - var grantNode = CommandManager.literal("grant").build(); + var grantNode = Commands.literal("grant").build(); advancementNode.addChild(grantNode); executesWithTargetsNamespacePathArguments(grantNode, Executors::grant); - var syncNode = CommandManager.literal("sync").build(); + var syncNode = Commands.literal("sync").build(); advancementNode.addChild(syncNode); - var sourceSyncArgument = CommandManager - .argument("source", EntityArgumentType.player()) + var sourceSyncArgument = Commands + .argument("source", EntityArgument.player()) .build(); - var targetsSyncArgument = CommandManager - .argument("targets", EntityArgumentType.players()) + var targetsSyncArgument = Commands + .argument("targets", EntityArgument.players()) .executes(context -> Executors.sync(context, false, false, false)) .build(); - var namespaceSyncArgument = CommandManager + var namespaceSyncArgument = Commands .argument("namespace", StringArgumentType.string()) .executes(context -> Executors.sync(context, true, false, false)) .build(); - var pathSyncArgument = CommandManager + var pathSyncArgument = Commands .argument("path", StringArgumentType.string()) .executes(context -> Executors.sync(context, true, true, false)) .build(); - var deleteOldSyncArgument = CommandManager + var deleteOldSyncArgument = Commands .argument("deleteOld", BoolArgumentType.bool()) .executes(context -> Executors.sync(context, true, true, true)) .build(); @@ -67,27 +66,27 @@ public static void register(CommandDispatcher dispatcher, C @FunctionalInterface private interface TargetsNamespacePathExecutor { - int execute(CommandContext context, Collection targets, String namespace, String path) throws CommandSyntaxException; + int execute(CommandContext context, Collection targets, String namespace, String path) throws CommandSyntaxException; } - private static int retrieveArgumentsAndCallExecutor(CommandContext context, TargetsNamespacePathExecutor executor, boolean checkNamespace, boolean checkPath) throws CommandSyntaxException { + private static int retrieveArgumentsAndCallExecutor(CommandContext context, TargetsNamespacePathExecutor executor, boolean checkNamespace, boolean checkPath) throws CommandSyntaxException { return executor.execute( context, - EntityArgumentType.getPlayers(context, "targets"), + EntityArgument.getPlayers(context, "targets"), checkNamespace ? StringArgumentType.getString(context, "namespace") : "all", checkPath ? StringArgumentType.getString(context, "path") : "all"); } - private static CommandNode executesWithTargetsNamespacePathArguments(CommandNode parentNode, TargetsNamespacePathExecutor executor) { - var targetsArgument = CommandManager - .argument("targets", EntityArgumentType.players()) + private static CommandNode executesWithTargetsNamespacePathArguments(CommandNode parentNode, TargetsNamespacePathExecutor executor) { + var targetsArgument = Commands + .argument("targets", EntityArgument.players()) .executes(context -> retrieveArgumentsAndCallExecutor(context, executor, false, false)) .build(); - var namespaceArgument = CommandManager + var namespaceArgument = Commands .argument("namespace", StringArgumentType.string()) .executes(context -> retrieveArgumentsAndCallExecutor(context, executor, true, false)) .build(); - var pathArgument = CommandManager + var pathArgument = Commands .argument("path", StringArgumentType.string()) .executes(context -> retrieveArgumentsAndCallExecutor(context, executor, true, true)) .build(); @@ -100,32 +99,32 @@ private static CommandNode executesWithTargetsNamespacePath } // Utility function - private static String joinPlayersList(Collection players) { + private static String joinPlayersList(Collection players) { return players.stream().map(player -> player.getDisplayName().getString()).collect(Collectors.joining(", ")); } private static class Executors { - private static int revoke(CommandContext context, Collection targets, String namespace, String path) { + private static int revoke(CommandContext context, Collection targets, String namespace, String path) { var count = targets.stream().mapToInt(player -> AdvancementUtils.forPlayer(player).withNamespace(namespace).withPath(path).revoke()).sum(); - context.getSource().sendFeedback(() -> Text.translatable("commands.revelationary.advancement.revoke", count, joinPlayersList(targets), namespace, path), false); + context.getSource().sendSuccess(() -> Component.translatable("commands.revelationary.advancement.revoke", count, joinPlayersList(targets), namespace, path), false); return count; } - private static int grant(CommandContext context, Collection targets, String namespace, String path) { + private static int grant(CommandContext context, Collection targets, String namespace, String path) { var count = targets.stream().mapToInt(player -> AdvancementUtils.forPlayer(player).withNamespace(namespace).withPath(path).grant()).sum(); - context.getSource().sendFeedback(() -> Text.translatable("commands.revelationary.advancement.grant", count, joinPlayersList(targets), namespace, path), false); + context.getSource().sendSuccess(() -> Component.translatable("commands.revelationary.advancement.grant", count, joinPlayersList(targets), namespace, path), false); return count; } - private static int sync(CommandContext context, boolean checkNamespace, boolean checkPath, boolean checkDeleteOld) throws CommandSyntaxException { - var source = EntityArgumentType.getPlayer(context, "source"); - var targets = EntityArgumentType.getPlayers(context, "targets"); + private static int sync(CommandContext context, boolean checkNamespace, boolean checkPath, boolean checkDeleteOld) throws CommandSyntaxException { + var source = EntityArgument.getPlayer(context, "source"); + var targets = EntityArgument.getPlayers(context, "targets"); var namespace = checkNamespace ? StringArgumentType.getString(context, "namespace") : "all"; var path = checkPath ? StringArgumentType.getString(context, "path") : "all"; var deleteOld = checkDeleteOld && BoolArgumentType.getBool(context, "deleteOld"); var count = targets.stream().mapToInt(player -> AdvancementUtils.forPlayer(source).withNamespace(namespace).withPath(path).syncTo(player, deleteOld)).sum(); - context.getSource().sendFeedback(() -> Text.translatable("commands.revelationary.advancement.sync", count, source.getDisplayName(), joinPlayersList(targets), namespace, path), false); + context.getSource().sendSuccess(() -> Component.translatable("commands.revelationary.advancement.sync", count, source.getDisplayName(), joinPlayersList(targets), namespace, path), false); return count; } } diff --git a/src/main/java/de/dafuqs/revelationary/RevelationaryNetworking.java b/src/main/java/de/dafuqs/revelationary/RevelationaryNetworking.java index 7b389ce..0a31552 100644 --- a/src/main/java/de/dafuqs/revelationary/RevelationaryNetworking.java +++ b/src/main/java/de/dafuqs/revelationary/RevelationaryNetworking.java @@ -8,26 +8,27 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.command.*; -import net.minecraft.command.argument.BlockArgumentParser; -import net.minecraft.item.Item; -import net.minecraft.network.RegistryByteBuf; -import net.minecraft.network.codec.PacketCodec; -import net.minecraft.network.packet.CustomPayload; -import net.minecraft.registry.*; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.text.TextCodecs; -import net.minecraft.util.Identifier; - +import net.minecraft.commands.arguments.blocks.BlockStateParser; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.registries.VanillaRegistries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.Identifier; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import java.util.Map; public class RevelationaryNetworking { public static void register() { - PayloadTypeRegistry.playS2C().register(RevelationSync.ID, RevelationSync.CODEC); + PayloadTypeRegistry.clientboundPlay().register(RevelationSync.ID, RevelationSync.CODEC); } @Environment(EnvType.CLIENT) @@ -43,7 +44,7 @@ public static void registerPacketReceivers() { }); } - public static void sendRevelations(ServerPlayerEntity player) { + public static void sendRevelations(ServerPlayer player) { ServerPlayNetworking.send(player, RevelationRegistry.intoPacket()); } @@ -54,23 +55,23 @@ public record RevelationSync(Object2ObjectOpenHashMap> advToItems, Object2ObjectOpenHashMap itemToAdv, Object2ObjectOpenHashMap itemCloaks, - Object2ObjectOpenHashMap cloakedBlockNameTranslations, - Object2ObjectOpenHashMap cloakedItemNameTranslations) implements CustomPayload { - public static final PacketCodec CODEC = CustomPayload.codecOf(RevelationSync::write, RevelationSync::read); - public static final CustomPayload.Id ID = new Id<>(Identifier.of(Revelationary.MOD_ID, "revelation_sync")); + Object2ObjectOpenHashMap cloakedBlockNameTranslations, + Object2ObjectOpenHashMap cloakedItemNameTranslations) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(RevelationSync::write, RevelationSync::read); + public static final CustomPacketPayload.Type ID = new Type<>(Identifier.fromNamespaceAndPath(Revelationary.MOD_ID, "revelation_sync")); - private static void writeText(RegistryByteBuf buf, Text text) { - TextCodecs.REGISTRY_PACKET_CODEC.encode(buf, text); + private static void writeText(RegistryFriendlyByteBuf buf, Component text) { + ComponentSerialization.STREAM_CODEC.encode(buf, text); } - private static Text readText(RegistryByteBuf buf) { - return TextCodecs.REGISTRY_PACKET_CODEC.decode(buf); + private static Component readText(RegistryFriendlyByteBuf buf) { + return ComponentSerialization.STREAM_CODEC.decode(buf); } - public static RevelationSync read(RegistryByteBuf buf) { + public static RevelationSync read(RegistryFriendlyByteBuf buf) { /* Block States */ - final RegistryWrapper blockRegistryWrapper = BuiltinRegistries.createWrapperLookup().getOrThrow(RegistryKeys.BLOCK); + final HolderLookup blockRegistryWrapper = VanillaRegistries.createLookup().lookupOrThrow(Registries.BLOCK); final Object2ObjectOpenHashMap blockCloaks = new Object2ObjectOpenHashMap<>(buf.readInt()); final Object2ObjectOpenHashMap blockStateToAdv = new Object2ObjectOpenHashMap<>(buf.readInt()); final Object2ObjectOpenHashMap blockStateCloaks = new Object2ObjectOpenHashMap<>(buf.readInt()); @@ -82,8 +83,8 @@ public static RevelationSync read(RegistryByteBuf buf) { ObjectArrayList advancementStates = new ObjectArrayList<>(blockStateCount); for (int j = 0; j < blockStateCount; j++) { try { - BlockState sourceState = BlockArgumentParser.block(blockRegistryWrapper, buf.readString(), true).blockState(); - BlockState targetState = BlockArgumentParser.block(blockRegistryWrapper, buf.readString(), true).blockState(); + BlockState sourceState = BlockStateParser.parseForBlock(blockRegistryWrapper, buf.readUtf(), true).blockState(); + BlockState targetState = BlockStateParser.parseForBlock(blockRegistryWrapper, buf.readUtf(), true).blockState(); advancementStates.add(sourceState); blockStateToAdv.put(sourceState, advancementIdentifier); @@ -107,10 +108,10 @@ public static RevelationSync read(RegistryByteBuf buf) { int itemCount = buf.readInt(); ObjectArrayList advancementItems = new ObjectArrayList<>(itemCount); for (int j = 0; j < itemCount; j++) { - Identifier sourceId = Identifier.tryParse(buf.readString()); - Identifier targetId = Identifier.tryParse(buf.readString()); - Item sourceItem = Registries.ITEM.get(sourceId); - Item targetItem = Registries.ITEM.get(targetId); + Identifier sourceId = Identifier.tryParse(buf.readUtf()); + Identifier targetId = Identifier.tryParse(buf.readUtf()); + Item sourceItem = BuiltInRegistries.ITEM.getValue(sourceId); + Item targetItem = BuiltInRegistries.ITEM.getValue(targetId); advancementItems.add(sourceItem); itemToAdv.put(sourceItem, advancementIdentifier); @@ -121,19 +122,19 @@ public static RevelationSync read(RegistryByteBuf buf) { /* Block Translations */ int blockTranslations = buf.readInt(); - final Object2ObjectOpenHashMap cloakedBlockNameTranslations = new Object2ObjectOpenHashMap<>(blockTranslations); // preallocate translations + final Object2ObjectOpenHashMap cloakedBlockNameTranslations = new Object2ObjectOpenHashMap<>(blockTranslations); // preallocate translations for (int i = 0; i < blockTranslations; i++) { - Block block = Registries.BLOCK.get(buf.readIdentifier()); - MutableText text = (MutableText) readText(buf); + Block block = BuiltInRegistries.BLOCK.getValue(buf.readIdentifier()); + MutableComponent text = (MutableComponent) readText(buf); cloakedBlockNameTranslations.put(block, text); } /* Item Translations */ int itemTranslations = buf.readInt(); - final Object2ObjectOpenHashMap cloakedItemNameTranslations = new Object2ObjectOpenHashMap<>(itemTranslations); // preallocate translations + final Object2ObjectOpenHashMap cloakedItemNameTranslations = new Object2ObjectOpenHashMap<>(itemTranslations); // preallocate translations for (int i = 0; i < itemTranslations; i++) { - Item item = Registries.ITEM.get(buf.readIdentifier()); - MutableText text = (MutableText) readText(buf); + Item item = BuiltInRegistries.ITEM.getValue(buf.readIdentifier()); + MutableComponent text = (MutableComponent) readText(buf); cloakedItemNameTranslations.put(item, text); } return new RevelationSync(advToBlockStates, @@ -147,7 +148,7 @@ public static RevelationSync read(RegistryByteBuf buf) { cloakedItemNameTranslations); } - public void write(RegistryByteBuf buf) { + public void write(RegistryFriendlyByteBuf buf) { // Block States buf.writeInt(blockCloaks.size()); // for preallocation on packet read buf.writeInt(blockStateToAdv.size()); // for preallocation on packet read @@ -157,8 +158,8 @@ public void write(RegistryByteBuf buf) { buf.writeIdentifier(advancementBlocks.getKey()); buf.writeInt(advancementBlocks.getValue().size()); for (BlockState blockState : advancementBlocks.getValue()) { - buf.writeString(BlockArgumentParser.stringifyBlockState(blockState)); - buf.writeString(BlockArgumentParser.stringifyBlockState(blockStateCloaks.get(blockState))); + buf.writeUtf(BlockStateParser.serialize(blockState)); + buf.writeUtf(BlockStateParser.serialize(blockStateCloaks.get(blockState))); } } @@ -170,28 +171,28 @@ public void write(RegistryByteBuf buf) { buf.writeIdentifier(advancementItems.getKey()); buf.writeInt(advancementItems.getValue().size()); for (Item item : advancementItems.getValue()) { - buf.writeString(Registries.ITEM.getId(item).toString()); - buf.writeString(Registries.ITEM.getId(itemCloaks.get(item)).toString()); + buf.writeUtf(BuiltInRegistries.ITEM.getKey(item).toString()); + buf.writeUtf(BuiltInRegistries.ITEM.getKey(itemCloaks.get(item)).toString()); } } // Block Translations buf.writeInt(cloakedBlockNameTranslations.size()); - for (Map.Entry blockTranslation : cloakedBlockNameTranslations.entrySet()) { - buf.writeIdentifier(Registries.BLOCK.getId(blockTranslation.getKey())); + for (Map.Entry blockTranslation : cloakedBlockNameTranslations.entrySet()) { + buf.writeIdentifier(BuiltInRegistries.BLOCK.getKey(blockTranslation.getKey())); writeText(buf, blockTranslation.getValue()); } // Item Translations buf.writeInt(cloakedItemNameTranslations.size()); - for (Map.Entry itemTranslation : cloakedItemNameTranslations.entrySet()) { - buf.writeIdentifier(Registries.ITEM.getId(itemTranslation.getKey())); + for (Map.Entry itemTranslation : cloakedItemNameTranslations.entrySet()) { + buf.writeIdentifier(BuiltInRegistries.ITEM.getKey(itemTranslation.getKey())); writeText(buf, itemTranslation.getValue()); } } @Override - public Id getId() { + public Type type() { return ID; } } diff --git a/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementCountCriterion.java b/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementCountCriterion.java index b666154..bfa46b4 100644 --- a/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementCountCriterion.java +++ b/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementCountCriterion.java @@ -2,40 +2,42 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.advancement.*; -import net.minecraft.advancement.criterion.*; -import net.minecraft.predicate.*; -import net.minecraft.predicate.entity.*; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.MinMaxBounds; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; +import net.minecraft.resources.Identifier; import net.minecraft.server.*; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.*; import net.minecraft.util.*; import java.util.*; -public class AdvancementCountCriterion extends AbstractCriterion { - public void trigger(ServerPlayerEntity player) { +public class AdvancementCountCriterion extends SimpleCriterionTrigger { + public void trigger(ServerPlayer player) { this.trigger(player, (conditions) -> conditions.matches(player)); } @Override - public Codec getConditionsCodec() { + public Codec codec() { return Conditions.CODEC; } - public record Conditions(Optional player, List advancementIdentifiers, NumberRange.IntRange range) implements AbstractCriterion.Conditions { + public record Conditions(Optional player, List advancementIdentifiers, MinMaxBounds.Ints range) implements SimpleCriterionTrigger.SimpleInstance { public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - LootContextPredicate.CODEC.optionalFieldOf("player").forGetter(Conditions::player), + ContextAwarePredicate.CODEC.optionalFieldOf("player").forGetter(Conditions::player), Identifier.CODEC.listOf().fieldOf("advancement_identifiers").forGetter(Conditions::advancementIdentifiers), - NumberRange.IntRange.CODEC.fieldOf("count").forGetter(Conditions::range)) + MinMaxBounds.Ints.CODEC.fieldOf("count").forGetter(Conditions::range)) .apply(inst, Conditions::new)); - public boolean matches(ServerPlayerEntity serverPlayerEntity) { - ServerAdvancementLoader loader = serverPlayerEntity.getWorld().getServer().getAdvancementLoader(); + public boolean matches(ServerPlayer serverPlayerEntity) { + ServerAdvancementManager loader = serverPlayerEntity.level().getServer().getAdvancements(); if(loader == null) { return false; } - PlayerAdvancementTracker tracker = serverPlayerEntity.getAdvancementTracker(); + PlayerAdvancements tracker = serverPlayerEntity.getAdvancements(); if(tracker == null) { return false; } @@ -43,15 +45,15 @@ public boolean matches(ServerPlayerEntity serverPlayerEntity) { int matchingAdvancements = 0; boolean allMatched = true; for(Identifier advancementIdentifier : this.advancementIdentifiers) { - AdvancementEntry advancement = loader.get(advancementIdentifier); - if(advancement != null && tracker.getProgress(advancement).isDone()) { + AdvancementHolder advancement = loader.get(advancementIdentifier); + if(advancement != null && tracker.getOrStartProgress(advancement).isDone()) { matchingAdvancements++; } else { allMatched = false; } } - return this.range == null ? allMatched : this.range.test(matchingAdvancements); + return this.range == null ? allMatched : this.range.matches(matchingAdvancements); } } } diff --git a/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementGottenCriterion.java b/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementGottenCriterion.java index 22c9b4c..b8a79a2 100644 --- a/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementGottenCriterion.java +++ b/src/main/java/de/dafuqs/revelationary/advancement_criteria/AdvancementGottenCriterion.java @@ -2,31 +2,30 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.advancement.AdvancementEntry; -import net.minecraft.advancement.criterion.AbstractCriterion; -import net.minecraft.predicate.entity.LootContextPredicate; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; - import java.util.Optional; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; +import net.minecraft.resources.Identifier; +import net.minecraft.server.level.ServerPlayer; -public class AdvancementGottenCriterion extends AbstractCriterion { - public void trigger(ServerPlayerEntity player, AdvancementEntry advancement) { +public class AdvancementGottenCriterion extends SimpleCriterionTrigger { + public void trigger(ServerPlayer player, AdvancementHolder advancement) { this.trigger(player, (conditions) -> conditions.matches(advancement)); } @Override - public Codec getConditionsCodec() { + public Codec codec() { return Conditions.CODEC; } - public record Conditions(Optional player, Identifier advancementIdentifier) implements AbstractCriterion.Conditions { + public record Conditions(Optional player, Identifier advancementIdentifier) implements SimpleCriterionTrigger.SimpleInstance { public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - LootContextPredicate.CODEC.optionalFieldOf("player").forGetter(Conditions::player), + ContextAwarePredicate.CODEC.optionalFieldOf("player").forGetter(Conditions::player), Identifier.CODEC.fieldOf("advancement_identifier").forGetter(Conditions::advancementIdentifier)) .apply(inst, Conditions::new)); - public boolean matches(AdvancementEntry advancement) { + public boolean matches(AdvancementHolder advancement) { return this.advancementIdentifier.equals(advancement.id()); } diff --git a/src/main/java/de/dafuqs/revelationary/advancement_criteria/HadRevelationCriterion.java b/src/main/java/de/dafuqs/revelationary/advancement_criteria/HadRevelationCriterion.java index 443da94..29e30d5 100644 --- a/src/main/java/de/dafuqs/revelationary/advancement_criteria/HadRevelationCriterion.java +++ b/src/main/java/de/dafuqs/revelationary/advancement_criteria/HadRevelationCriterion.java @@ -2,29 +2,28 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.advancement.criterion.AbstractCriterion; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.predicate.entity.LootContextPredicate; -import net.minecraft.registry.*; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; - +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; import java.util.Optional; -public class HadRevelationCriterion extends AbstractCriterion { - public void trigger(ServerPlayerEntity player, Block block) { +public class HadRevelationCriterion extends SimpleCriterionTrigger { + public void trigger(ServerPlayer player, Block block) { this.trigger(player, (conditions) -> conditions.matches(block)); } @Override - public Codec getConditionsCodec() { + public Codec codec() { return Conditions.CODEC; } - public record Conditions(Optional player, Identifier identifier) implements AbstractCriterion.Conditions { + public record Conditions(Optional player, Identifier identifier) implements SimpleCriterionTrigger.SimpleInstance { public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - LootContextPredicate.CODEC.optionalFieldOf("player").forGetter(Conditions::player), + ContextAwarePredicate.CODEC.optionalFieldOf("player").forGetter(Conditions::player), Identifier.CODEC.fieldOf("revelation_identifier").forGetter(Conditions::identifier)) .apply(inst, Conditions::new)); @@ -33,9 +32,9 @@ public boolean matches(Object object) { // if "revelation_identifier": "" => trigger with any revelation return true; } else if (object instanceof Block cloakableBlock) { - return Registries.BLOCK.getId(cloakableBlock).equals(identifier); + return BuiltInRegistries.BLOCK.getKey(cloakableBlock).equals(identifier); } else if (object instanceof Item cloakableItem) { - return Registries.ITEM.getId(cloakableItem).equals(identifier); + return BuiltInRegistries.ITEM.getKey(cloakableItem).equals(identifier); } else { return false; } diff --git a/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementCriteria.java b/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementCriteria.java index 7cfaeaf..4482f62 100644 --- a/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementCriteria.java +++ b/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementCriteria.java @@ -1,7 +1,7 @@ package de.dafuqs.revelationary.api.advancements; import de.dafuqs.revelationary.advancement_criteria.*; -import net.minecraft.advancement.criterion.Criteria; +import net.minecraft.advancements.CriteriaTriggers; public class AdvancementCriteria { /** @@ -19,8 +19,8 @@ public class AdvancementCriteria { public static HadRevelationCriterion HAD_REVELATION; public static void register() { - ADVANCEMENT_COUNT = Criteria.register("revelationary:advancement_count", new AdvancementCountCriterion()); - HAD_REVELATION = Criteria.register("revelationary:had_revelation", new HadRevelationCriterion()); - ADVANCEMENT_GOTTEN = Criteria.register("revelationary:advancement_gotten", new AdvancementGottenCriterion()); + ADVANCEMENT_COUNT = CriteriaTriggers.register("revelationary:advancement_count", new AdvancementCountCriterion()); + HAD_REVELATION = CriteriaTriggers.register("revelationary:had_revelation", new HadRevelationCriterion()); + ADVANCEMENT_GOTTEN = CriteriaTriggers.register("revelationary:advancement_gotten", new AdvancementGottenCriterion()); } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementHelper.java b/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementHelper.java index 110be97..5da6eeb 100644 --- a/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementHelper.java +++ b/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementHelper.java @@ -4,10 +4,10 @@ import de.dafuqs.revelationary.Revelationary; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.advancement.AdvancementEntry; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.resources.Identifier; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; public class AdvancementHelper { /** @@ -21,20 +21,20 @@ public class AdvancementHelper { * @param advancementIdentifier the advancement identifier * @return weather or not the player has the advancement with the given identifier */ - public static boolean hasAdvancement(PlayerEntity playerEntity, Identifier advancementIdentifier) { + public static boolean hasAdvancement(Player playerEntity, Identifier advancementIdentifier) { if (playerEntity == null) { return false; } else if (advancementIdentifier == null) { return true; } - if (playerEntity instanceof ServerPlayerEntity serverPlayerEntity) { - AdvancementEntry advancement = serverPlayerEntity.getWorld().getServer().getAdvancementLoader().get(advancementIdentifier); + if (playerEntity instanceof ServerPlayer serverPlayerEntity) { + AdvancementHolder advancement = serverPlayerEntity.level().getServer().getAdvancements().get(advancementIdentifier); if (advancement == null) { Revelationary.logError("Player " + playerEntity.getName() + " was getting an advancement check for an advancement that does not exist: " + advancementIdentifier); return false; } else { - return serverPlayerEntity.getAdvancementTracker().getProgress(advancement).isDone(); + return serverPlayerEntity.getAdvancements().getOrStartProgress(advancement).isDone(); } // we cannot test for "net.minecraft.client.network.ClientPlayerEntity" there because that will get obfuscated // to "net.minecraft.class_xxxxx" in compiled versions => works in dev env, breaks in prod diff --git a/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementUtils.java b/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementUtils.java index 8d0ada4..764e5e3 100644 --- a/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementUtils.java +++ b/src/main/java/de/dafuqs/revelationary/api/advancements/AdvancementUtils.java @@ -1,26 +1,26 @@ package de.dafuqs.revelationary.api.advancements; import de.dafuqs.revelationary.advancement_criteria.AdvancementGottenCriterion; -import net.minecraft.advancement.AdvancementEntry; -import net.minecraft.advancement.PlayerAdvancementTracker; -import net.minecraft.server.ServerAdvancementLoader; -import net.minecraft.server.network.ServerPlayerEntity; import java.util.function.BiConsumer; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.server.PlayerAdvancements; +import net.minecraft.server.ServerAdvancementManager; +import net.minecraft.server.level.ServerPlayer; public class AdvancementUtils { protected String namespace = "all"; protected String path = "all"; - protected final ServerPlayerEntity player; - protected final ServerAdvancementLoader advancementLoader; - protected final PlayerAdvancementTracker advancementTracker; + protected final ServerPlayer player; + protected final ServerAdvancementManager advancementLoader; + protected final PlayerAdvancements advancementTracker; - protected AdvancementUtils(ServerPlayerEntity player) { + protected AdvancementUtils(ServerPlayer player) { this.player = player; - advancementLoader = player.getServer().getAdvancementLoader(); - advancementTracker = player.getAdvancementTracker(); + advancementLoader = player.level().getServer().getAdvancements(); + advancementTracker = player.getAdvancements(); } - public static AdvancementUtils forPlayer(ServerPlayerEntity player) { + public static AdvancementUtils forPlayer(ServerPlayer player) { return new AdvancementUtils(player); } @@ -35,24 +35,24 @@ public AdvancementUtils withPath(String path) { } public int grant() { - return act(advancementTracker::grantCriterion); + return act(advancementTracker::award); } public int revoke() { - return act(advancementTracker::revokeCriterion); + return act(advancementTracker::revoke); } - public int syncTo(ServerPlayerEntity targetPlayer, boolean deleteOld) { + public int syncTo(ServerPlayer targetPlayer, boolean deleteOld) { var count = 0; - var targetAdvancementTracker = targetPlayer.getAdvancementTracker(); + var targetAdvancementTracker = targetPlayer.getAdvancements(); if (deleteOld) { - count += act(targetAdvancementTracker::revokeCriterion); + count += act(targetAdvancementTracker::revoke); } count += act((advancement, criterion) -> { - if (advancementTracker.getProgress(advancement).isDone()) { - targetAdvancementTracker.grantCriterion(advancement, criterion); + if (advancementTracker.getOrStartProgress(advancement).isDone()) { + targetAdvancementTracker.award(advancement, criterion); } }); @@ -66,15 +66,15 @@ public int syncTo(ServerPlayerEntity targetPlayer, boolean deleteOld) { * Can only use used on the logical server */ public void reprocessUnlocks() { - for (var advancement : advancementLoader.getAdvancements()) { - if (advancement.id().getNamespace().equals(namespace) && !advancementTracker.getProgress(advancement).isDone()) { + for (var advancement : advancementLoader.getAllAdvancements()) { + if (advancement.id().getNamespace().equals(namespace) && !advancementTracker.getOrStartProgress(advancement).isDone()) { for (var criterionEntry : advancement.value().criteria().entrySet()) { // 1: instanceof checks for null automatically // 2: AdvancementGottenCriterion.Conditions will always have the appropriate ID, no need to check for that - if (criterionEntry.getValue().conditions() instanceof AdvancementGottenCriterion.Conditions gottenConditions) { + if (criterionEntry.getValue().triggerInstance() instanceof AdvancementGottenCriterion.Conditions gottenConditions) { var gottenAdvancement = advancementLoader.get(gottenConditions.getAdvancementIdentifier()); - if (gottenAdvancement != null && advancementTracker.getProgress(gottenAdvancement).isDone()) { - advancementTracker.grantCriterion(advancement, criterionEntry.getKey()); + if (gottenAdvancement != null && advancementTracker.getOrStartProgress(gottenAdvancement).isDone()) { + advancementTracker.award(advancement, criterionEntry.getKey()); } } } @@ -82,10 +82,10 @@ public void reprocessUnlocks() { } } - protected int act(BiConsumer action) { + protected int act(BiConsumer action) { var count = 0; - for (var advancement : advancementLoader.getAdvancements()) { + for (var advancement : advancementLoader.getAllAdvancements()) { if (advancement.id().getNamespace().equals(namespace) || namespace.equals("all")) { if (advancement.id().getPath().startsWith(path) || path.equals("all")) { count++; @@ -100,22 +100,22 @@ protected int act(BiConsumer action) { } @Deprecated - public static int revokeAllAdvancements(ServerPlayerEntity player, String namespace , String path) { + public static int revokeAllAdvancements(ServerPlayer player, String namespace , String path) { return forPlayer(player).withNamespace(namespace).withPath(path).revoke(); } @Deprecated - public static int grantAllAdvancements(ServerPlayerEntity player, String namespace , String path) { + public static int grantAllAdvancements(ServerPlayer player, String namespace , String path) { return forPlayer(player).withNamespace(namespace).withPath(path).grant(); } @Deprecated - public static int syncAdvancements(ServerPlayerEntity sourcePlayer, ServerPlayerEntity targetPlayer, String namespace, String path, Boolean deleteOld) { + public static int syncAdvancements(ServerPlayer sourcePlayer, ServerPlayer targetPlayer, String namespace, String path, Boolean deleteOld) { return forPlayer(sourcePlayer).withNamespace(namespace).withPath(path).syncTo(targetPlayer, deleteOld); } @Deprecated - public static void reprocessAdvancementUnlocks(ServerPlayerEntity player, String namespace) { + public static void reprocessAdvancementUnlocks(ServerPlayer player, String namespace) { forPlayer(player).withNamespace(namespace).reprocessUnlocks(); } } diff --git a/src/main/java/de/dafuqs/revelationary/api/advancements/ClientAdvancementPacketCallback.java b/src/main/java/de/dafuqs/revelationary/api/advancements/ClientAdvancementPacketCallback.java index 503c489..23b75d6 100644 --- a/src/main/java/de/dafuqs/revelationary/api/advancements/ClientAdvancementPacketCallback.java +++ b/src/main/java/de/dafuqs/revelationary/api/advancements/ClientAdvancementPacketCallback.java @@ -3,8 +3,7 @@ import de.dafuqs.revelationary.ClientAdvancements; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.util.Identifier; - +import net.minecraft.resources.Identifier; import java.util.Set; /** diff --git a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakSetChanged.java b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakSetChanged.java index e4a21e5..0f5fa2a 100644 --- a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakSetChanged.java +++ b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakSetChanged.java @@ -4,9 +4,8 @@ import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.Item; - +import net.minecraft.client.Minecraft; +import net.minecraft.world.item.Item; import java.util.Set; @Environment(EnvType.CLIENT) @@ -14,7 +13,7 @@ public interface CloakSetChanged { Event EVENT = EventFactory.createArrayBacked(CloakSetChanged.class, (listeners) -> (addedCloaks, removedCloaks, newCloaks) -> { - MinecraftClient.getInstance().execute(() -> { + Minecraft.getInstance().execute(() -> { for (CloakSetChanged listener : listeners) listener.onChange(addedCloaks, removedCloaks, newCloaks); }); }); diff --git a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlock.java b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlock.java index acf5ed8..6cfcc1c 100644 --- a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlock.java +++ b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlock.java @@ -1,17 +1,16 @@ package de.dafuqs.revelationary.api.revelations; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.Item; -import net.minecraft.util.Pair; - import java.util.Hashtable; import java.util.Map; +import net.minecraft.util.Tuple; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public abstract class CloakedBlock extends Block implements RevelationAware { final Block cloakedBlock; - public CloakedBlock(Settings settings, Block cloakedBlock) { + public CloakedBlock(Properties settings, Block cloakedBlock) { super(settings); this.cloakedBlock = cloakedBlock; RevelationAware.register(this); @@ -20,12 +19,12 @@ public CloakedBlock(Settings settings, Block cloakedBlock) { @Override public Map getBlockStateCloaks() { Hashtable hashtable = new Hashtable<>(); - hashtable.put(this.getDefaultState(), cloakedBlock.getDefaultState()); + hashtable.put(this.defaultBlockState(), cloakedBlock.defaultBlockState()); return hashtable; } @Override - public Pair getItemCloak() { + public Tuple getItemCloak() { return null; } } diff --git a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlockItem.java b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlockItem.java index b922568..c379cac 100644 --- a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlockItem.java +++ b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedBlockItem.java @@ -1,19 +1,18 @@ package de.dafuqs.revelationary.api.revelations; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; -import net.minecraft.util.Pair; - import java.util.Map; +import net.minecraft.resources.Identifier; +import net.minecraft.util.Tuple; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class CloakedBlockItem extends BlockItem implements RevelationAware { Identifier cloakAdvancementIdentifier; BlockItem cloakItem; - public CloakedBlockItem(Block block, Settings settings, Identifier cloakAdvancementIdentifier, BlockItem cloakItem) { + public CloakedBlockItem(Block block, Properties settings, Identifier cloakAdvancementIdentifier, BlockItem cloakItem) { super(block, settings); this.cloakAdvancementIdentifier = cloakAdvancementIdentifier; this.cloakItem = cloakItem; @@ -28,11 +27,11 @@ public Identifier getCloakAdvancementIdentifier() { @Override public Map getBlockStateCloaks() { - return Map.of(this.getBlock().getDefaultState(), this.cloakItem.getBlock().getDefaultState()); + return Map.of(this.getBlock().defaultBlockState(), this.cloakItem.getBlock().defaultBlockState()); } @Override - public Pair getItemCloak() { - return new Pair<>(this, cloakItem); + public Tuple getItemCloak() { + return new Tuple<>(this, cloakItem); } } diff --git a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedItem.java b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedItem.java index 6e8f675..8927315 100644 --- a/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedItem.java +++ b/src/main/java/de/dafuqs/revelationary/api/revelations/CloakedItem.java @@ -1,18 +1,17 @@ package de.dafuqs.revelationary.api.revelations; -import net.minecraft.block.BlockState; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; -import net.minecraft.util.Pair; - import java.util.Hashtable; import java.util.Map; +import net.minecraft.resources.Identifier; +import net.minecraft.util.Tuple; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.state.BlockState; public class CloakedItem extends Item implements RevelationAware { Identifier cloakAdvancementIdentifier; Item cloakItem; - public CloakedItem(Settings settings, Identifier cloakAdvancementIdentifier, Item cloakItem) { + public CloakedItem(Properties settings, Identifier cloakAdvancementIdentifier, Item cloakItem) { super(settings); this.cloakAdvancementIdentifier = cloakAdvancementIdentifier; this.cloakItem = cloakItem; @@ -31,7 +30,7 @@ public Map getBlockStateCloaks() { } @Override - public Pair getItemCloak() { - return new Pair<>(this, cloakItem); + public Tuple getItemCloak() { + return new Tuple<>(this, cloakItem); } } diff --git a/src/main/java/de/dafuqs/revelationary/api/revelations/RevealingCallback.java b/src/main/java/de/dafuqs/revelationary/api/revelations/RevealingCallback.java index d89db7c..6300dcb 100644 --- a/src/main/java/de/dafuqs/revelationary/api/revelations/RevealingCallback.java +++ b/src/main/java/de/dafuqs/revelationary/api/revelations/RevealingCallback.java @@ -1,11 +1,10 @@ package de.dafuqs.revelationary.api.revelations; import de.dafuqs.revelationary.ClientRevelationHolder; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; - import java.util.Set; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; /** * Interface to react to the event of blocks/items getting revealed after getting advancements diff --git a/src/main/java/de/dafuqs/revelationary/api/revelations/RevelationAware.java b/src/main/java/de/dafuqs/revelationary/api/revelations/RevelationAware.java index b5bde07..7075a81 100644 --- a/src/main/java/de/dafuqs/revelationary/api/revelations/RevelationAware.java +++ b/src/main/java/de/dafuqs/revelationary/api/revelations/RevelationAware.java @@ -2,17 +2,18 @@ import de.dafuqs.revelationary.RevelationRegistry; import de.dafuqs.revelationary.api.advancements.AdvancementHelper; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.EntityShapeContext; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.loot.context.*; -import net.minecraft.text.MutableText; -import net.minecraft.util.Identifier; -import net.minecraft.util.Pair; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.Identifier; +import net.minecraft.util.Tuple; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.EntityCollisionContext; import org.jetbrains.annotations.Nullable; import java.util.Map; @@ -53,7 +54,7 @@ static void register(RevelationAware revelationAware) { * If you are implementing a BlockItem something like "new Pair<>(this.asItem(), Blocks.OAK_LOG.asItem())" * If you use this interace on a block without item representation (like vanilla end portal) return null */ - @Nullable Pair getItemCloak(); + @Nullable Tuple getItemCloak(); /** * Optionally, return a mapping of a revelation aware item and the text that should be used as translation @@ -62,7 +63,7 @@ static void register(RevelationAware revelationAware) { * @return the matching of the item and the text it will use when not revealed */ @Nullable - default Pair getCloakedItemTranslation() { + default Tuple getCloakedItemTranslation() { return null; } @@ -73,7 +74,7 @@ default Pair getCloakedItemTranslation() { * @return the matching of the block and the text it will use when not revealed */ @Nullable - default Pair getCloakedBlockTranslation() { + default Tuple getCloakedBlockTranslation() { return null; } @@ -94,8 +95,8 @@ default void onUncloak() { * * @param context the ShapeContext to check */ - default boolean isVisibleTo(ShapeContext context) { - if (context instanceof EntityShapeContext entityShapeContext && entityShapeContext.getEntity() instanceof PlayerEntity player) { + default boolean isVisibleTo(CollisionContext context) { + if (context instanceof EntityCollisionContext entityShapeContext && entityShapeContext.getEntity() instanceof Player player) { return this.isVisibleTo(player); } return false; @@ -106,7 +107,7 @@ default boolean isVisibleTo(ShapeContext context) { * * @param player the player to check */ - default boolean isVisibleTo(@Nullable PlayerEntity player) { + default boolean isVisibleTo(@Nullable Player player) { return AdvancementHelper.hasAdvancement(player, getCloakAdvancementIdentifier()); } @@ -118,9 +119,9 @@ default boolean isVisibleTo(@Nullable PlayerEntity player) { * @return the player of that loot context builder. null if there is no player in that context */ @Nullable - static PlayerEntity getLootPlayerEntity(LootWorldContext.Builder lootContextBuilderSet) { - Entity entity = lootContextBuilderSet.getOptional(LootContextParameters.THIS_ENTITY); - if (entity instanceof PlayerEntity player) { + static Player getLootPlayerEntity(LootParams.Builder lootContextBuilderSet) { + Entity entity = lootContextBuilderSet.getOptionalParameter(LootContextParams.THIS_ENTITY); + if (entity instanceof Player player) { return player; } return null; diff --git a/src/main/java/de/dafuqs/revelationary/compat/jade/RevelationaryJadePlugin.java b/src/main/java/de/dafuqs/revelationary/compat/jade/RevelationaryJadePlugin.java index f35f582..e53851a 100644 --- a/src/main/java/de/dafuqs/revelationary/compat/jade/RevelationaryJadePlugin.java +++ b/src/main/java/de/dafuqs/revelationary/compat/jade/RevelationaryJadePlugin.java @@ -1,8 +1,8 @@ package de.dafuqs.revelationary.compat.jade; import de.dafuqs.revelationary.api.revelations.RevelationAware; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.state.BlockState; import snownee.jade.api.BlockAccessor; import snownee.jade.api.IWailaClientRegistration; import snownee.jade.api.IWailaPlugin; @@ -12,7 +12,7 @@ public class RevelationaryJadePlugin implements IWailaPlugin { public void registerClient(IWailaClientRegistration registration) { registration.addRayTraceCallback((hitResult, accessor, originalAccessor) -> { if (accessor instanceof BlockAccessor blockAccessor) { - PlayerEntity player = accessor.getPlayer(); + Player player = accessor.getPlayer(); if (player.isCreative() || player.isSpectator()) { return accessor; } diff --git a/src/main/java/de/dafuqs/revelationary/compat/rei/RevelationaryREIPlugin.java b/src/main/java/de/dafuqs/revelationary/compat/rei/RevelationaryREIPlugin.java deleted file mode 100644 index 93be5f2..0000000 --- a/src/main/java/de/dafuqs/revelationary/compat/rei/RevelationaryREIPlugin.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.dafuqs.revelationary.compat.rei; - -import de.dafuqs.revelationary.api.revelations.CloakSetChanged; -import de.dafuqs.revelationary.config.RevelationaryConfig; -import me.shedaniel.rei.api.client.entry.filtering.base.BasicFilteringRule; -import me.shedaniel.rei.api.client.plugins.REIClientPlugin; -import me.shedaniel.rei.api.common.util.EntryStacks; -import net.minecraft.item.Item; - -import java.util.Set; -import java.util.stream.Collectors; - - -public class RevelationaryREIPlugin implements REIClientPlugin { - @SuppressWarnings("UnstableApiUsage") - private BasicFilteringRule.MarkDirty filteringRule; - private static Set hiddenStacks = Set.of(); - - public RevelationaryREIPlugin() { - if (!RevelationaryConfig.get().HideCloakedEntriesFromRecipeViewers) return; - CloakSetChanged.EVENT.register((added, removed, newStacks) -> { - hiddenStacks = newStacks; - //noinspection UnstableApiUsage - filteringRule.markDirty(); - }); - } - - @Override - public void registerBasicEntryFiltering(@SuppressWarnings("UnstableApiUsage") BasicFilteringRule rule) { - // not using .show to not interfere with other filtering rules - if (!RevelationaryConfig.get().HideCloakedEntriesFromRecipeViewers) return; - //noinspection UnstableApiUsage - filteringRule = rule.hide(() -> - hiddenStacks.stream() - .map(EntryStacks::of) - .collect(Collectors.toList()) - ); - } -} diff --git a/src/main/java/de/dafuqs/revelationary/compat/wthit/CloakedBlockComponentProvider.java b/src/main/java/de/dafuqs/revelationary/compat/wthit/CloakedBlockComponentProvider.java index 8ff572b..7ac546a 100644 --- a/src/main/java/de/dafuqs/revelationary/compat/wthit/CloakedBlockComponentProvider.java +++ b/src/main/java/de/dafuqs/revelationary/compat/wthit/CloakedBlockComponentProvider.java @@ -6,15 +6,15 @@ import mcp.mobius.waila.api.IPluginConfig; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @Environment(EnvType.CLIENT) public class CloakedBlockComponentProvider implements IBlockComponentProvider { @Override public @Nullable BlockState getOverride(IBlockAccessor accessor, IPluginConfig config) { - PlayerEntity player = accessor.getPlayer(); + Player player = accessor.getPlayer(); RevelationAware aware = (RevelationAware) accessor.getBlock(); if (!aware.isVisibleTo(player)) { diff --git a/src/main/java/de/dafuqs/revelationary/mixin/AbstractBlockMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/AbstractBlockMixin.java index 67948f3..9262edc 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/AbstractBlockMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/AbstractBlockMixin.java @@ -2,34 +2,37 @@ import de.dafuqs.revelationary.*; import de.dafuqs.revelationary.api.revelations.RevelationAware; -import net.minecraft.block.*; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.*; -import net.minecraft.loot.*; -import net.minecraft.loot.context.*; -import net.minecraft.registry.*; -import net.minecraft.server.world.*; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; import java.util.*; -@Mixin(AbstractBlock.class) +@Mixin(BlockBehaviour.class) public abstract class AbstractBlockMixin { - @Inject(method = "getDroppedStacks(Lnet/minecraft/block/BlockState;Lnet/minecraft/loot/context/LootWorldContext$Builder;)Ljava/util/List;", at = @At(value = "HEAD"), cancellable = true) - private void revelationary$switchLootTableForCloakedBlock(BlockState state, LootWorldContext.Builder builder, CallbackInfoReturnable> cir) { + @Inject(method = "getDrops(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/storage/loot/LootParams$Builder;)Ljava/util/List;", at = @At(value = "HEAD"), cancellable = true) + private void revelationary$switchLootTableForCloakedBlock(BlockState state, LootParams.Builder builder, CallbackInfoReturnable> cir) { BlockState cloakState = RevelationRegistry.getCloak(state); if (cloakState != null) { - PlayerEntity lootPlayerEntity = RevelationAware.getLootPlayerEntity(builder); + Player lootPlayerEntity = RevelationAware.getLootPlayerEntity(builder); if (!RevelationRegistry.isVisibleTo(state, lootPlayerEntity)) { - Optional> replacementLootTableKey = cloakState.getBlock().getLootTableKey(); + Optional> replacementLootTableKey = cloakState.getBlock().getLootTable(); if(replacementLootTableKey.isPresent()) { - LootWorldContext lootWorldContext = builder.add(LootContextParameters.BLOCK_STATE, state).build(LootContextTypes.BLOCK); - ServerWorld serverWorld = lootWorldContext.getWorld(); - LootTable lootTable = serverWorld.getServer().getReloadableRegistries().getLootTable(replacementLootTableKey.get()); - cir.setReturnValue(lootTable.generateLoot(lootWorldContext)); + LootParams lootWorldContext = builder.withParameter(LootContextParams.BLOCK_STATE, state).create(LootContextParamSets.BLOCK); + ServerLevel serverWorld = lootWorldContext.getLevel(); + LootTable lootTable = serverWorld.getServer().reloadableRegistries().getLootTable(replacementLootTableKey.get()); + cir.setReturnValue(lootTable.getRandomItems(lootWorldContext)); } else { cir.setReturnValue(Collections.emptyList()); } diff --git a/src/main/java/de/dafuqs/revelationary/mixin/BlockUnbreakingMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/BlockUnbreakingMixin.java index 65e8549..13a2a8d 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/BlockUnbreakingMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/BlockUnbreakingMixin.java @@ -1,22 +1,24 @@ package de.dafuqs.revelationary.mixin; import de.dafuqs.revelationary.*; -import net.minecraft.block.*; -import net.minecraft.entity.player.*; -import net.minecraft.util.math.*; +import net.minecraft.core.BlockPos; import net.minecraft.world.*; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; -@Mixin(AbstractBlock.class) +@Mixin(BlockBehaviour.class) public abstract class BlockUnbreakingMixin { /** * Prevent players from accidentally mining unrevealed blocks. In no way exhaustive. * Cloaked plants will still drop themselves when the block below them is broken, for example */ - @Inject(method = "calcBlockBreakingDelta(Lnet/minecraft/block/BlockState;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;)F", at = @At("HEAD"), cancellable = true) - public void revelationary$calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos, CallbackInfoReturnable cir) { + @Inject(method = "getDestroyProgress(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)F", at = @At("HEAD"), cancellable = true) + public void revelationary$calcBlockBreakingDelta(BlockState state, Player player, BlockGetter world, BlockPos pos, CallbackInfoReturnable cir) { if(!RevelationRegistry.isVisibleTo(state, player)) { cir.setReturnValue(0F); } diff --git a/src/main/java/de/dafuqs/revelationary/mixin/MixinPlayerManager.java b/src/main/java/de/dafuqs/revelationary/mixin/MixinPlayerManager.java index f9f1fa9..3d541f9 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/MixinPlayerManager.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/MixinPlayerManager.java @@ -1,19 +1,19 @@ package de.dafuqs.revelationary.mixin; import de.dafuqs.revelationary.RevelationaryNetworking; -import net.minecraft.network.ClientConnection; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.network.ConnectedClientData; -import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.network.Connection; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.CommonListenerCookie; +import net.minecraft.server.players.PlayerList; 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(PlayerManager.class) +@Mixin(PlayerList.class) public class MixinPlayerManager { - @Inject(method = "onPlayerConnect", at = @At(value = "RETURN")) - private void revelationary$onPlayerConnect(ClientConnection connection, ServerPlayerEntity player, ConnectedClientData clientData, CallbackInfo ci) { + @Inject(method = "placeNewPlayer", at = @At(value = "RETURN")) + private void revelationary$onPlayerConnect(Connection connection, ServerPlayer player, CommonListenerCookie clientData, CallbackInfo ci) { RevelationaryNetworking.sendRevelations(player); } } diff --git a/src/main/java/de/dafuqs/revelationary/mixin/PlayerAdvancementTrackerMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/PlayerAdvancementTrackerMixin.java index e65b0cc..ffd9c7e 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/PlayerAdvancementTrackerMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/PlayerAdvancementTrackerMixin.java @@ -2,11 +2,6 @@ import de.dafuqs.revelationary.RevelationRegistry; import de.dafuqs.revelationary.api.advancements.AdvancementCriteria; -import net.minecraft.advancement.AdvancementEntry; -import net.minecraft.advancement.AdvancementProgress; -import net.minecraft.advancement.PlayerAdvancementTracker; -import net.minecraft.block.Block; -import net.minecraft.server.network.ServerPlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -14,22 +9,27 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.List; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.server.PlayerAdvancements; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.block.Block; -@Mixin(PlayerAdvancementTracker.class) +@Mixin(PlayerAdvancements.class) public abstract class PlayerAdvancementTrackerMixin { @Shadow - private ServerPlayerEntity owner; + private ServerPlayer player; - @Inject(at = @At("RETURN"), method = "grantCriterion(Lnet/minecraft/advancement/AdvancementEntry;Ljava/lang/String;)Z") - public void revelationary$triggerAdvancementCriteria(AdvancementEntry advancement, String criterionName, CallbackInfoReturnable cir) { - AdvancementProgress advancementProgress = ((PlayerAdvancementTracker) (Object) this).getProgress(advancement); + @Inject(at = @At("RETURN"), method = "award(Lnet/minecraft/advancements/AdvancementHolder;Ljava/lang/String;)Z") + public void revelationary$triggerAdvancementCriteria(AdvancementHolder advancement, String criterionName, CallbackInfoReturnable cir) { + AdvancementProgress advancementProgress = ((PlayerAdvancements) (Object) this).getOrStartProgress(advancement); if (advancementProgress.isDone()) { - AdvancementCriteria.ADVANCEMENT_GOTTEN.trigger(owner, advancement); - AdvancementCriteria.ADVANCEMENT_COUNT.trigger(owner); + AdvancementCriteria.ADVANCEMENT_GOTTEN.trigger(player, advancement); + AdvancementCriteria.ADVANCEMENT_COUNT.trigger(player); List revelations = RevelationRegistry.getBlockEntries(advancement.id()); for (Block revelation : revelations) { - AdvancementCriteria.HAD_REVELATION.trigger(owner, revelation); + AdvancementCriteria.HAD_REVELATION.trigger(player, revelation); } } } diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/AccessorClientAdvancementManager.java b/src/main/java/de/dafuqs/revelationary/mixin/client/AccessorClientAdvancementManager.java index 4f7e277..79b79eb 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/AccessorClientAdvancementManager.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/AccessorClientAdvancementManager.java @@ -1,15 +1,15 @@ package de.dafuqs.revelationary.mixin.client; -import net.minecraft.advancement.AdvancementEntry; -import net.minecraft.advancement.AdvancementProgress; -import net.minecraft.client.network.ClientAdvancementManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import java.util.Map; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.client.multiplayer.ClientAdvancements; -@Mixin(ClientAdvancementManager.class) +@Mixin(ClientAdvancements.class) public interface AccessorClientAdvancementManager { @Accessor - Map getAdvancementProgresses(); + Map getProgress(); } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/BlockClientMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/client/BlockClientMixin.java index d3a63f5..ecdf82c 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/BlockClientMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/BlockClientMixin.java @@ -2,8 +2,8 @@ import de.dafuqs.revelationary.ClientRevelationHolder; import de.dafuqs.revelationary.RevelationRegistry; -import net.minecraft.block.Block; -import net.minecraft.text.MutableText; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.level.block.Block; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -11,8 +11,8 @@ @Mixin(Block.class) public class BlockClientMixin { - @Inject(method = "getName()Lnet/minecraft/text/MutableText;", at = @At("RETURN"), cancellable = true) - private void revelationary$getCloakedName(CallbackInfoReturnable callbackInfoReturnable) { + @Inject(method = "getName()Lnet/minecraft/network/chat/MutableComponent;", at = @At("RETURN"), cancellable = true) + private void revelationary$getCloakedName(CallbackInfoReturnable callbackInfoReturnable) { Block thisBlock = (Block) (Object) this; if (ClientRevelationHolder.isCloaked(thisBlock)) { callbackInfoReturnable.setReturnValue(RevelationRegistry.getTranslationString(thisBlock)); diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/BlockModelsMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/client/BlockModelsMixin.java index eea3467..c4e6f80 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/BlockModelsMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/BlockModelsMixin.java @@ -1,32 +1,33 @@ package de.dafuqs.revelationary.mixin.client; import de.dafuqs.revelationary.*; -import net.fabricmc.fabric.api.renderer.v1.model.*; -import net.minecraft.block.*; -import net.minecraft.client.render.block.*; -import net.minecraft.client.render.model.*; +import net.fabricmc.fabric.api.client.renderer.v1.model.FabricBlockStateModelSet; +import net.minecraft.client.renderer.block.BlockStateModelSet; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; import java.util.*; -@Mixin(BlockModels.class) -public class BlockModelsMixin implements FabricBlockModels { +@Mixin(BlockStateModelSet.class) +public class BlockModelsMixin implements FabricBlockStateModelSet { - @Shadow - private Map models; + @Final + @Shadow + private Map modelByState; @Shadow @Final - private BakedModelManager modelManager; + private BlockStateModel missingModel; - @Inject(at = @At("HEAD"), method = "getModel", cancellable = true) + @Inject(at = @At("HEAD"), method = "get", cancellable = true) private void revelationary$getModel(BlockState blockState, CallbackInfoReturnable callbackInfoReturnable) { if (ClientRevelationHolder.isCloaked(blockState)) { BlockState destinationBlockState = ClientRevelationHolder.getCloakTarget(blockState); - BlockStateModel overriddenModel = this.models.getOrDefault(destinationBlockState, this.modelManager.getMissingModel()); + BlockStateModel overriddenModel = this.modelByState.getOrDefault(destinationBlockState, this.missingModel); callbackInfoReturnable.setReturnValue(overriddenModel); } } diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/ClientAdvancementManagerMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/client/ClientAdvancementManagerMixin.java index 85b4058..a65cd02 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/ClientAdvancementManagerMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/ClientAdvancementManagerMixin.java @@ -1,14 +1,13 @@ package de.dafuqs.revelationary.mixin.client; import de.dafuqs.revelationary.ClientAdvancements; -import net.minecraft.client.network.ClientAdvancementManager; -import net.minecraft.network.packet.s2c.play.AdvancementUpdateS2CPacket; +import net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket; 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(ClientAdvancementManager.class) +@Mixin(net.minecraft.client.multiplayer.ClientAdvancements.class) public abstract class ClientAdvancementManagerMixin { /** * Intercepts advancement packets sent from server to client @@ -18,8 +17,8 @@ public abstract class ClientAdvancementManagerMixin { * @param packet The vanilla advancement packet * @param info Mixin callback info */ - @Inject(at = @At("RETURN"), method = "onAdvancements") - public void revelationary$onAdvancementSync(AdvancementUpdateS2CPacket packet, CallbackInfo info) { + @Inject(at = @At("RETURN"), method = "update") + public void revelationary$onAdvancementSync(ClientboundUpdateAdvancementsPacket packet, CallbackInfo info) { ClientAdvancements.onClientPacket(packet); } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/ItemMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/client/ItemMixin.java index e2daee2..02a10eb 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/ItemMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/ItemMixin.java @@ -4,9 +4,9 @@ import de.dafuqs.revelationary.RevelationRegistry; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -15,8 +15,8 @@ @Environment(EnvType.CLIENT) @Mixin(Item.class) public abstract class ItemMixin { - @Inject(at = @At("HEAD"), method = "getName(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/text/Text;", cancellable = true) - public void revelationary$getCloakedName(ItemStack stack, CallbackInfoReturnable callbackInfoReturnable) { + @Inject(at = @At("HEAD"), method = "getName(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/network/chat/Component;", cancellable = true) + public void revelationary$getCloakedName(ItemStack stack, CallbackInfoReturnable callbackInfoReturnable) { Item thisItem = (Item) (Object) this; if (ClientRevelationHolder.isCloaked(thisItem)) { callbackInfoReturnable.setReturnValue(RevelationRegistry.getTranslationString(thisItem)); diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/MinecraftClientMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/client/MinecraftClientMixin.java index 56ba75f..9354383 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/MinecraftClientMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/MinecraftClientMixin.java @@ -1,16 +1,16 @@ package de.dafuqs.revelationary.mixin.client; import de.dafuqs.revelationary.ClientAdvancements; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; 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(MinecraftClient.class) +@Mixin(Minecraft.class) public abstract class MinecraftClientMixin { - @Inject(at = @At("HEAD"), method = "disconnect(Lnet/minecraft/client/gui/screen/Screen;Z)V") + @Inject(at = @At("HEAD"), method = "disconnect(Lnet/minecraft/client/gui/screens/Screen;Z)V") public void revelationary$onLogout(Screen screen, boolean transferring, CallbackInfo info) { ClientAdvancements.playerLogout(); } diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixin.java b/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixin.java index 3574d4a..e01b40c 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixin.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixin.java @@ -4,26 +4,26 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.render.BuiltChunkStorage; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.render.chunk.ChunkBuilder; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.World; -import net.minecraft.world.chunk.WorldChunk; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.ViewArea; +import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @Environment(EnvType.CLIENT) -@Mixin(value = WorldRenderer.class, priority = 900) +@Mixin(value = LevelRenderer.class, priority = 900) public abstract class WorldRendererMixin implements WorldRendererAccessor { @Shadow - private BuiltChunkStorage chunks; + private ViewArea viewArea; @Shadow - public abstract void scheduleTerrainUpdate(); + public abstract void needsUpdate(); /** * When triggered on client side lets the client redraw ALL chunks @@ -35,42 +35,42 @@ public abstract class WorldRendererMixin implements WorldRendererAccessor { return; } - if (MinecraftClient.getInstance().world != null) { - if (MinecraftClient.getInstance().worldRenderer != null && MinecraftClient.getInstance().player != null) { - for (ChunkBuilder.BuiltChunk chunk : this.chunks.chunks) { - chunk.scheduleRebuild(true); + if (Minecraft.getInstance().level != null) { + if (Minecraft.getInstance().levelRenderer != null && Minecraft.getInstance().player != null) { + for (SectionRenderDispatcher.RenderSection chunk : this.viewArea.sections) { + chunk.setDirty(true); } - scheduleTerrainUpdate(); + needsUpdate(); } } } @Unique private static void rebuildAllChunksSodium() { - World world = MinecraftClient.getInstance().world; + Level world = Minecraft.getInstance().level; if (world == null) { return; } - WorldRenderer worldRenderer = MinecraftClient.getInstance().worldRenderer; + LevelRenderer worldRenderer = Minecraft.getInstance().levelRenderer; if (worldRenderer == null) { return; } WorldRendererMixinAccessor wra = (de.dafuqs.revelationary.mixin.client.WorldRendererMixinAccessor) worldRenderer; - ClientPlayerEntity clientPlayerEntity = MinecraftClient.getInstance().player; - ChunkPos chunkPos = clientPlayerEntity.getChunkPos(); - int viewDistance = MinecraftClient.getInstance().options.getViewDistance().getValue(); + LocalPlayer clientPlayerEntity = Minecraft.getInstance().player; + ChunkPos chunkPos = clientPlayerEntity.chunkPosition(); + int viewDistance = Minecraft.getInstance().options.renderDistance().get(); - int startY = world.getBottomSectionCoord(); - int endY = world.getTopSectionCoord(); + int startY = world.getMinSectionY(); + int endY = world.getMaxSectionY(); for (int x = -viewDistance; x < viewDistance; x++) { for (int z = -viewDistance; z < viewDistance; z++) { - WorldChunk chunk = MinecraftClient.getInstance().world.getChunkManager().getWorldChunk(chunkPos.x + x, chunkPos.z + z, false); + LevelChunk chunk = Minecraft.getInstance().level.getChunkSource().getChunk(chunkPos.x() + x, chunkPos.z() + z, false); if (chunk != null) { for (int y = startY; y <= endY; y++) { - wra.invokeScheduleChunkRender(chunk.getPos().x, y, chunk.getPos().z, false); + wra.invokeScheduleChunkRender(chunk.getPos().x(), y, chunk.getPos().z(), false); } } } diff --git a/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixinAccessor.java b/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixinAccessor.java index d2f6b0d..df02e33 100644 --- a/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixinAccessor.java +++ b/src/main/java/de/dafuqs/revelationary/mixin/client/WorldRendererMixinAccessor.java @@ -1,11 +1,11 @@ package de.dafuqs.revelationary.mixin.client; -import net.minecraft.client.render.WorldRenderer; +import net.minecraft.client.renderer.LevelRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; -@Mixin(WorldRenderer.class) +@Mixin(LevelRenderer.class) public interface WorldRendererMixinAccessor { - @Invoker("scheduleChunkRender") + @Invoker("setSectionDirty") void invokeScheduleChunkRender(int x, int y, int z, boolean important); } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 561794c..a182a2b 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -24,9 +24,6 @@ ], "jade": [ "de.dafuqs.revelationary.compat.jade.RevelationaryJadePlugin" - ], - "rei_client": [ - "de.dafuqs.revelationary.compat.rei.RevelationaryREIPlugin" ] }, "mixins": [