package net.minecraft.server.level; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; import javax.annotation.Nullable; public interface ChunkResult { static ChunkResult of(T p_333970_) { return new ChunkResult.Success<>(p_333970_); } static ChunkResult error(String p_331314_) { return error(() -> p_331314_); } static ChunkResult error(Supplier p_331628_) { return new ChunkResult.Fail<>(p_331628_); } boolean isSuccess(); @Nullable T orElse(@Nullable T p_329164_); @Nullable static R orElse(ChunkResult p_331028_, @Nullable R p_331551_) { R r = (R)p_331028_.orElse(null); return r != null ? r : p_331551_; } @Nullable String getError(); ChunkResult ifSuccess(Consumer p_334389_); ChunkResult map(Function p_334390_); T orElseThrow(Supplier p_330106_) throws E; public record Fail(Supplier error) implements ChunkResult { @Override public boolean isSuccess() { return false; } @Nullable @Override public T orElse(@Nullable T p_330895_) { return p_330895_; } @Override public String getError() { return this.error.get(); } @Override public ChunkResult ifSuccess(Consumer p_331855_) { return this; } @Override public ChunkResult map(Function p_333275_) { return new ChunkResult.Fail(this.error); } @Override public T orElseThrow(Supplier p_331734_) throws E { throw p_331734_.get(); } } public record Success(T value) implements ChunkResult { @Override public boolean isSuccess() { return true; } @Override public T orElse(@Nullable T p_332434_) { return this.value; } @Nullable @Override public String getError() { return null; } @Override public ChunkResult ifSuccess(Consumer p_328048_) { p_328048_.accept(this.value); return this; } @Override public ChunkResult map(Function p_331436_) { return new ChunkResult.Success<>(p_331436_.apply(this.value)); } @Override public T orElseThrow(Supplier p_335933_) throws E { return this.value; } } }