Fix RS2: use createCodec() not getMapCodec() - wrong return type

ROOT CAUSE: getMapCodec(Runnable) returns MapCodec (not Codec).
createCodec(Runnable) returns Codec<Map<UUID, SerializableStorage>>.
Reflection on getMapCodec silently failed because the returned
MapCodec.decode() has a different signature than Codec.decode().

Both save fallback and restore codec paths now use createCodec().

RS2 uses ErrorHandlingMapCodec with UUIDUtil.STRING_CODEC for keys,
so the encoded format IS a CompoundTag with UUID strings as keys.

Vyrriox
This commit is contained in:
laforetbrut 2026-03-26 20:25:50 +01:00
parent bce7a73cb8
commit 2baa8e4c39

View File

@ -483,7 +483,7 @@ public class ModsSupport {
try {
// Get the map codec from StorageRepositoryImpl
java.lang.reflect.Method getMapCodecMethod =
repo.getClass().getDeclaredMethod("getMapCodec", Runnable.class);
repo.getClass().getDeclaredMethod("createCodec", Runnable.class);
getMapCodecMethod.setAccessible(true);
@SuppressWarnings("rawtypes")
com.mojang.serialization.Codec codec = (com.mojang.serialization.Codec)
@ -558,7 +558,7 @@ public class ModsSupport {
com.mojang.serialization.Codec mapCodec;
try {
java.lang.reflect.Method getMapCodecMethod =
repo.getClass().getDeclaredMethod("getMapCodec", Runnable.class);
repo.getClass().getDeclaredMethod("createCodec", Runnable.class);
getMapCodecMethod.setAccessible(true);
mapCodec = (com.mojang.serialization.Codec) getMapCodecMethod.invoke(null, (Runnable) () -> {});
} catch (Exception e) {