fix: Incorrect primary codec in lenient profile serialization
This commit is contained in:
@@ -3,6 +3,10 @@ package moe.nea.firmament.mixins;
|
|||||||
|
|
||||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
|
import com.mojang.serialization.DataResult;
|
||||||
|
import com.mojang.serialization.Lifecycle;
|
||||||
|
import com.mojang.util.UndashedUuid;
|
||||||
|
import moe.nea.firmament.util.json.FirmCodecs;
|
||||||
import net.minecraft.component.type.ProfileComponent;
|
import net.minecraft.component.type.ProfileComponent;
|
||||||
import net.minecraft.util.Uuids;
|
import net.minecraft.util.Uuids;
|
||||||
import org.objectweb.asm.Opcodes;
|
import org.objectweb.asm.Opcodes;
|
||||||
@@ -13,9 +17,9 @@ import java.util.UUID;
|
|||||||
|
|
||||||
@Mixin(ProfileComponent.class)
|
@Mixin(ProfileComponent.class)
|
||||||
public class LenientProfileComponentPatch {
|
public class LenientProfileComponentPatch {
|
||||||
// lambda in RecordCodecBuilder.create for BASE_CODEC
|
// lambda in RecordCodecBuilder.create for BASE_CODEC
|
||||||
@ModifyExpressionValue(method = "method_57508", at = @At(value = "FIELD", opcode = Opcodes.GETSTATIC, target = "Lnet/minecraft/util/Uuids;INT_STREAM_CODEC:Lcom/mojang/serialization/Codec;"))
|
@ModifyExpressionValue(method = "method_57508", at = @At(value = "FIELD", opcode = Opcodes.GETSTATIC, target = "Lnet/minecraft/util/Uuids;INT_STREAM_CODEC:Lcom/mojang/serialization/Codec;"))
|
||||||
private static Codec<UUID> onStaticInit(Codec<UUID> original) {
|
private static Codec<UUID> onStaticInit(Codec<UUID> original) {
|
||||||
return Uuids.CODEC;
|
return FirmCodecs.UUID_LENIENT_PREFER_INT_STREAM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
20
src/main/kotlin/util/json/FirmCodecs.kt
Normal file
20
src/main/kotlin/util/json/FirmCodecs.kt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package moe.nea.firmament.util.json
|
||||||
|
|
||||||
|
import com.mojang.serialization.Codec
|
||||||
|
import com.mojang.serialization.DataResult
|
||||||
|
import com.mojang.serialization.Lifecycle
|
||||||
|
import com.mojang.util.UndashedUuid
|
||||||
|
import net.minecraft.util.Uuids
|
||||||
|
|
||||||
|
object FirmCodecs {
|
||||||
|
@JvmField
|
||||||
|
val UUID_LENIENT_PREFER_INT_STREAM = Codec.withAlternative(Uuids.INT_STREAM_CODEC, Codec.STRING.comapFlatMap(
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
DataResult.success(UndashedUuid.fromStringLenient(it), Lifecycle.stable())
|
||||||
|
} catch (ex: IllegalArgumentException) {
|
||||||
|
DataResult.error { "Invalid UUID $it: ${ex.message}" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
UndashedUuid::toString))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user