package net.minecraft.server.level; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; import org.jetbrains.annotations.Nullable; public interface ChunkResult { static ChunkResult of(T value) { return new ChunkResult.Success<>(value); } static ChunkResult error(String error) { return error((Supplier)(() -> error)); } static ChunkResult error(Supplier errorSupplier) { return new ChunkResult.Fail<>(errorSupplier); } boolean isSuccess(); @Nullable T orElse(@Nullable T value); @Nullable static R orElse(ChunkResult chunkResult, @Nullable R orElse) { R object = (R)chunkResult.orElse(null); return object != null ? object : orElse; } @Nullable String getError(); ChunkResult ifSuccess(Consumer action); ChunkResult map(Function mappingFunction); T orElseThrow(Supplier exceptionSupplier) throws E; public record Fail(Supplier error) implements ChunkResult { @Override public boolean isSuccess() { return false; } @Nullable @Override public T orElse(@Nullable T value) { return value; } @Override public String getError() { return (String)this.error.get(); } @Override public ChunkResult ifSuccess(Consumer action) { return this; } @Override public ChunkResult map(Function mappingFunction) { return new ChunkResult.Fail(this.error); } @Override public T orElseThrow(Supplier exceptionSupplier) throws E { throw (Throwable)exceptionSupplier.get(); } } public record Success(T value) implements ChunkResult { @Override public boolean isSuccess() { return true; } @Override public T orElse(@Nullable T value) { return this.value; } @Nullable @Override public String getError() { return null; } @Override public ChunkResult ifSuccess(Consumer action) { action.accept(this.value); return this; } @Override public ChunkResult map(Function mappingFunction) { return (ChunkResult)(new ChunkResult.Success<>(mappingFunction.apply(this.value))); } @Override public T orElseThrow(Supplier exceptionSupplier) throws E { return this.value; } } }