package dev.isxander.yacl3.config.v3; import com.mojang.serialization.*; import dev.isxander.yacl3.impl.utils.YACLConstants; import org.jetbrains.annotations.ApiStatus; import java.util.Optional; @ApiStatus.Experimental public class CodecConfigEntryImpl extends AbstractConfigEntry { private final MapCodec mapCodec; public CodecConfigEntryImpl(String fieldName, T defaultValue, Codec codec) { super(fieldName, defaultValue); this.mapCodec = codec.fieldOf(this.fieldName()); } @Override public RecordBuilder encode(DynamicOps ops, RecordBuilder recordBuilder) { return mapCodec.encode(get(), ops, recordBuilder); } @Override public boolean decode(R encoded, DynamicOps ops) { DataResult result = mapCodec.decoder().parse(ops, encoded); //? if >1.20.4 { Optional> error = result.error(); //?} else { /*Optional> error = result.error(); *///?} if (error.isPresent()) { YACLConstants.LOGGER.error("Failed to decode entry {}: {}", this.fieldName(), error.get().message()); return false; } T value = result.result().orElseThrow(); this.set(value); return true; } }