Spaces:
Build error
Build error
File size: 3,348 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
package net.minecraft.world.level;
import java.util.function.Predicate;
import net.minecraft.core.BlockPos;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.FluidTags;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
public class ClipContext {
private final Vec3 from;
private final Vec3 to;
private final ClipContext.Block block;
private final ClipContext.Fluid fluid;
private final CollisionContext collisionContext;
public ClipContext(Vec3 p_45688_, Vec3 p_45689_, ClipContext.Block p_45690_, ClipContext.Fluid p_45691_, Entity p_45692_) {
this(p_45688_, p_45689_, p_45690_, p_45691_, CollisionContext.of(p_45692_));
}
public ClipContext(Vec3 p_312751_, Vec3 p_311517_, ClipContext.Block p_311464_, ClipContext.Fluid p_311910_, CollisionContext p_310522_) {
this.from = p_312751_;
this.to = p_311517_;
this.block = p_311464_;
this.fluid = p_311910_;
this.collisionContext = p_310522_;
}
public Vec3 getTo() {
return this.to;
}
public Vec3 getFrom() {
return this.from;
}
public VoxelShape getBlockShape(BlockState p_45695_, BlockGetter p_45696_, BlockPos p_45697_) {
return this.block.get(p_45695_, p_45696_, p_45697_, this.collisionContext);
}
public VoxelShape getFluidShape(FluidState p_45699_, BlockGetter p_45700_, BlockPos p_45701_) {
return this.fluid.canPick(p_45699_) ? p_45699_.getShape(p_45700_, p_45701_) : Shapes.empty();
}
public static enum Block implements ClipContext.ShapeGetter {
COLLIDER(BlockBehaviour.BlockStateBase::getCollisionShape),
OUTLINE(BlockBehaviour.BlockStateBase::getShape),
VISUAL(BlockBehaviour.BlockStateBase::getVisualShape),
FALLDAMAGE_RESETTING((p_201982_, p_201983_, p_201984_, p_201985_) -> p_201982_.is(BlockTags.FALL_DAMAGE_RESETTING) ? Shapes.block() : Shapes.empty());
private final ClipContext.ShapeGetter shapeGetter;
private Block(final ClipContext.ShapeGetter p_45712_) {
this.shapeGetter = p_45712_;
}
@Override
public VoxelShape get(BlockState p_45714_, BlockGetter p_45715_, BlockPos p_45716_, CollisionContext p_45717_) {
return this.shapeGetter.get(p_45714_, p_45715_, p_45716_, p_45717_);
}
}
public static enum Fluid {
NONE(p_45736_ -> false),
SOURCE_ONLY(FluidState::isSource),
ANY(p_45734_ -> !p_45734_.isEmpty()),
WATER(p_201988_ -> p_201988_.is(FluidTags.WATER));
private final Predicate<FluidState> canPick;
private Fluid(final Predicate<FluidState> p_45730_) {
this.canPick = p_45730_;
}
public boolean canPick(FluidState p_45732_) {
return this.canPick.test(p_45732_);
}
}
public interface ShapeGetter {
VoxelShape get(BlockState p_45740_, BlockGetter p_45741_, BlockPos p_45742_, CollisionContext p_45743_);
}
} |