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; public abstract class AbstractListBuilder implements ListBuilder { private final DynamicOps ops; protected DataResult builder = DataResult.success(this.initBuilder(), Lifecycle.stable()); protected AbstractListBuilder(final 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 prefix); @Override public ListBuilder add(final T value) { this.builder = this.builder.map(b -> this.append((B)b, value)); return this; } @Override public ListBuilder add(final DataResult value) { this.builder = this.builder.apply2stable(this::append, value); return this; } @Override public ListBuilder withErrorsFrom(final DataResult result) { this.builder = this.builder.flatMap(r -> result.map(v -> r)); return this; } @Override public ListBuilder mapError(final UnaryOperator onError) { this.builder = this.builder.mapError(onError); return this; } @Override public DataResult build(final T prefix) { DataResult result = this.builder.flatMap(b -> this.build((B)b, prefix)); this.builder = DataResult.success(this.initBuilder(), Lifecycle.stable()); return result; } }