56 lines
1.9 KiB
Java
56 lines
1.9 KiB
Java
package net.minecraft.world.phys.shapes;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
import net.minecraft.world.entity.vehicle.AbstractMinecart;
|
|
import net.minecraft.world.item.Item;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraft.world.level.CollisionGetter;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraft.world.level.material.FluidState;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public interface CollisionContext {
|
|
static CollisionContext empty() {
|
|
return EntityCollisionContext.EMPTY;
|
|
}
|
|
|
|
static CollisionContext of(Entity entity) {
|
|
return (CollisionContext)(switch (entity) {
|
|
case AbstractMinecart abstractMinecart -> AbstractMinecart.useExperimentalMovement(abstractMinecart.level())
|
|
? new MinecartCollisionContext(abstractMinecart, false)
|
|
: new EntityCollisionContext(entity, false, false);
|
|
default -> new EntityCollisionContext(entity, false, false);
|
|
});
|
|
}
|
|
|
|
static CollisionContext of(Entity entity, boolean canStandOnFluid) {
|
|
return new EntityCollisionContext(entity, canStandOnFluid, false);
|
|
}
|
|
|
|
static CollisionContext placementContext(@Nullable Entity entity) {
|
|
return new EntityCollisionContext(
|
|
entity != null ? entity.isDescending() : false,
|
|
true,
|
|
entity != null ? entity.getY() : -Double.MAX_VALUE,
|
|
entity instanceof LivingEntity livingEntityx ? livingEntityx.getMainHandItem() : ItemStack.EMPTY,
|
|
entity instanceof LivingEntity livingEntity ? fluidState -> livingEntity.canStandOnFluid(fluidState) : fluidState -> false,
|
|
entity
|
|
);
|
|
}
|
|
|
|
boolean isDescending();
|
|
|
|
boolean isAbove(VoxelShape shape, BlockPos pos, boolean canAscend);
|
|
|
|
boolean isHoldingItem(Item item);
|
|
|
|
boolean canStandOnFluid(FluidState fluid1, FluidState fluid2);
|
|
|
|
VoxelShape getCollisionShape(BlockState state, CollisionGetter collisionGetter, BlockPos pos);
|
|
|
|
default boolean isPlacement() {
|
|
return false;
|
|
}
|
|
}
|