package net.minecraft.util; import com.mojang.serialization.DataResult; import com.mojang.serialization.DynamicOps; import com.mojang.serialization.Lifecycle; import com.mojang.serialization.ListBuilder; import java.util.function.UnaryOperator; abstract class AbstractListBuilder implements ListBuilder { private final DynamicOps ops; protected DataResult builder = DataResult.success(this.initBuilder(), Lifecycle.stable()); protected AbstractListBuilder(DynamicOps ops) { this.ops = ops; } @Override public DynamicOps ops() { return this.ops; } protected abstract B initBuilder(); protected abstract B append(B builder, T value); protected abstract DataResult build(B builder, T value); @Override public ListBuilder add(T object) { this.builder = this.builder.map(object2 -> this.append((B)object2, object)); return this; } @Override public ListBuilder add(DataResult dataResult) { this.builder = this.builder.apply2stable(this::append, dataResult); return this; } @Override public ListBuilder withErrorsFrom(DataResult dataResult) { this.builder = this.builder.flatMap(object -> dataResult.map(object2 -> object)); return this; } @Override public ListBuilder mapError(UnaryOperator unaryOperator) { this.builder = this.builder.mapError(unaryOperator); return this; } @Override public DataResult build(T object) { DataResult dataResult = this.builder.flatMap(object2 -> this.build((B)object2, object)); this.builder = DataResult.success(this.initBuilder(), Lifecycle.stable()); return dataResult; } }