38 lines
1.1 KiB
Java
38 lines
1.1 KiB
Java
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 <T> Optional<T> evaluate(BiFunction<Level, BlockPos, T> levelPosConsumer) {
|
|
return Optional.empty();
|
|
}
|
|
};
|
|
|
|
static ContainerLevelAccess create(Level level, BlockPos pos) {
|
|
return new ContainerLevelAccess() {
|
|
@Override
|
|
public <T> Optional<T> evaluate(BiFunction<Level, BlockPos, T> levelPosConsumer) {
|
|
return Optional.of(levelPosConsumer.apply(level, pos));
|
|
}
|
|
};
|
|
}
|
|
|
|
<T> Optional<T> evaluate(BiFunction<Level, BlockPos, T> levelPosConsumer);
|
|
|
|
default <T> T evaluate(BiFunction<Level, BlockPos, T> levelPosConsumer, T defaultValue) {
|
|
return (T)this.evaluate(levelPosConsumer).orElse(defaultValue);
|
|
}
|
|
|
|
default void execute(BiConsumer<Level, BlockPos> levelPosConsumer) {
|
|
this.evaluate((level, blockPos) -> {
|
|
levelPosConsumer.accept(level, blockPos);
|
|
return Optional.empty();
|
|
});
|
|
}
|
|
}
|