minecraft-src/net/minecraft/world/phys/shapes/CollisionContext.java
2025-07-04 03:45:38 +03:00

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;
}
}