package com.hypixel.hytale.server.npc.asset.builder; import com.google.gson.JsonElement; import com.hypixel.hytale.codec.Codec; import com.hypixel.hytale.codec.ExtraInfo; import com.hypixel.hytale.codec.validation.Validator; import com.hypixel.hytale.logger.HytaleLogger; import com.hypixel.hytale.server.core.util.BsonUtil; import javax.annotation.Nonnull; import javax.annotation.Nullable; public class BuilderCodecObjectHelper { protected final Codec codec; protected final Class classType; protected final Validator validator; @Nullable protected T value; public BuilderCodecObjectHelper(Class classType, Codec codec, Validator validator) { this.classType = classType; this.codec = codec; this.validator = validator; } @Nullable public T build() { return this.value; } public void readConfig(@Nonnull JsonElement data, @Nonnull ExtraInfo extraInfo) { this.value = this.codec.decode(BsonUtil.translateJsonToBson(data), extraInfo); if (this.validator != null) { this.validator.accept(this.value, extraInfo.getValidationResults()); } extraInfo.getValidationResults()._processValidationResults(); extraInfo.getValidationResults().logOrThrowValidatorExceptions(HytaleLogger.getLogger()); } public boolean hasValue() { return this.value != null; } public Class getClassType() { return this.classType; } }