package net.minecraft.world.inventory; import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.BiFunction; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; public interface ContainerLevelAccess { ContainerLevelAccess NULL = new ContainerLevelAccess() { @Override public Optional evaluate(BiFunction levelPosConsumer) { return Optional.empty(); } }; static ContainerLevelAccess create(Level level, BlockPos pos) { return new ContainerLevelAccess() { @Override public Optional evaluate(BiFunction levelPosConsumer) { return Optional.of(levelPosConsumer.apply(level, pos)); } }; } Optional evaluate(BiFunction levelPosConsumer); default T evaluate(BiFunction levelPosConsumer, T defaultValue) { return (T)this.evaluate(levelPosConsumer).orElse(defaultValue); } default void execute(BiConsumer levelPosConsumer) { this.evaluate((level, blockPos) -> { levelPosConsumer.accept(level, blockPos); return Optional.empty(); }); } }