1
0
mirror of https://github.com/GeyserMC/Rainbow.git synced 2025-12-19 14:59:16 +00:00

Use RegistryOps to save Geyser mappings

This commit is contained in:
Eclipse
2025-08-25 07:44:51 +00:00
parent bf376dc4ba
commit 1f22dbb860
2 changed files with 15 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.DynamicOps;
import com.mojang.serialization.JsonOps;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.util.ExtraCodecs;
@@ -47,10 +48,14 @@ public class CodecUtil {
}
public static <T> T tryReadJson(Codec<T> codec, Path path) throws IOException {
return tryReadJson(codec, path, JsonOps.INSTANCE);
}
public static <T> T tryReadJson(Codec<T> codec, Path path, DynamicOps<JsonElement> ops) throws IOException {
try {
String raw = Files.readString(path);
JsonElement json = GSON.fromJson(raw, JsonElement.class);
return codec.parse(JsonOps.INSTANCE, json).getOrThrow();
return codec.parse(ops, json).getOrThrow();
} catch (IOException exception) {
Rainbow.LOGGER.warn("Failed to read JSON file {}!", path, exception);
throw exception;
@@ -58,7 +63,11 @@ public class CodecUtil {
}
public static <T> void trySaveJson(Codec<T> codec, T object, Path path) throws IOException {
JsonElement json = codec.encodeStart(JsonOps.INSTANCE, object).getOrThrow();
trySaveJson(codec, object, path, JsonOps.INSTANCE);
}
public static <T> void trySaveJson(Codec<T> codec, T object, Path path, DynamicOps<JsonElement> ops) throws IOException {
JsonElement json = codec.encodeStart(ops, object).getOrThrow();
try {
ensureDirectoryExists(path.getParent());

View File

@@ -1,11 +1,13 @@
package org.geysermc.rainbow.pack;
import com.mojang.serialization.JsonOps;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.SplashRenderer;
import net.minecraft.core.component.DataComponents;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ProblemReporter;
import net.minecraft.util.RandomSource;
@@ -145,10 +147,10 @@ public class BedrockPack {
boolean success = true;
try {
CodecUtil.trySaveJson(GeyserMappings.CODEC, mappings, exportPath.resolve(MAPPINGS_FILE));
CodecUtil.trySaveJson(GeyserMappings.CODEC, mappings, exportPath.resolve(MAPPINGS_FILE), RegistryOps.create(JsonOps.INSTANCE, Minecraft.getInstance().level.registryAccess()));
CodecUtil.trySaveJson(PackManifest.CODEC, manifest, packPath.resolve(MANIFEST_FILE));
CodecUtil.trySaveJson(BedrockTextureAtlas.CODEC, BedrockTextureAtlas.itemAtlas(name, itemTextures), packPath.resolve(ITEM_ATLAS_FILE));
} catch (IOException exception) {
} catch (IOException | NullPointerException exception) {
reporter.forChild(() -> "saving Geyser mappings, pack manifest, and texture atlas ").report(() -> "failed to save to pack: " + exception);
success = false;
}