48 lines
1.4 KiB
Java
48 lines
1.4 KiB
Java
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<T> {
|
|
protected final Codec<T> codec;
|
|
protected final Class<?> classType;
|
|
protected final Validator<T> validator;
|
|
@Nullable
|
|
protected T value;
|
|
|
|
public BuilderCodecObjectHelper(Class<?> classType, Codec<T> codec, Validator<T> 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;
|
|
}
|
|
}
|