Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.







public static void tick(Level level, BlockPos pos, BlockState blockState, CollectorBlockEntity blockEntity) {
if (!blockState.getValue(CollectorBlock.TRIGGERED)) {
return;
}
Direction facing = blockState.getValue(CollectorBlock.FACING);
List<ItemEntity> entities = level.getEntitiesOfClass(ItemEntity.class, blockEntity.getDirection(facing));
for (ItemEntity itemEntity : entities) {
double centreX = pos.getX() + 0.5D;
double centreY = pos.getY() + 0.5D;
double centreZ = pos.getZ() + 0.5D;
double diffX = -itemEntity.getX() + centreX;
double diffY = -itemEntity.getY() + centreY;
double diffZ = -itemEntity.getZ() + centreZ;
double speedMultiper = 0.05D;
double horizDiffSq = Mth.sqrt((float) (diffX * diffX + diffZ * diffZ));
double angle = Math.asin(diffX / horizDiffSq);
double d15 = Math.abs(Mth.sin((float) angle) * speedMultiper);
double d16 = Math.abs(Mth.cos((float) angle) * speedMultiper);
d15 = diffX <= 0.0D ? -d15 : d15;
d16 = diffZ <= 0.0D ? -d16 : d16;
if (itemEntity.getDeltaMovement().dot(itemEntity.getDeltaMovement()) >= 0.2D) {
continue;
}
itemEntity.setDeltaMovement(d15, diffY >= 0.7 ? speedMultiper * 2 : itemEntity.getDeltaMovement().y(), d16);
}
}
@Nullable
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState blockState, BlockEntityType<T> blockEntityType) {
return createTickerHelper(blockEntityType, EJBlockEntityType.COLLECTOR.get(), CollectorBlockEntity::tick);
}
public static final double FORWARD_RANGE = 5; //растояние
public static final BooleanProperty TRIGGERED = BlockStateProperties.TRIGGERED;
public static final DirectionProperty FACING = DirectionalBlock.FACING;
public AABB getDirection(Direction facing) {
BlockPos endPos = this.worldPosition.relative(facing, Mth.floor(CollectorBlock.FORWARD_RANGE));
if (facing == Direction.WEST)
endPos = endPos.offset(0, 1, 1);
else if (facing == Direction.NORTH)
endPos = endPos.offset(1, 1, 0);
if (facing == Direction.EAST)
endPos = endPos.offset(1, 1, 1);
else if (facing == Direction.SOUTH)
endPos = endPos.offset(1, 1, 1);
if (facing == Direction.UP)
endPos = endPos.offset(1, 1, 1);
else if (facing == Direction.DOWN)
endPos = endPos.offset(1, 0, 1);
return new AABB(this.worldPosition, endPos);
}
c конца или с начала? Откуда счёт?с последнего блока

ItemEntity itemEntity = null;
//стартовый блок
BlockPos blockPos = null /* blah blah */;
//позиция в виде вектора
Vec3 start_pos = blockPos.getCenter();
//позиция предмета
Vec3 end_pos = itemEntity.position(); /* new Vec3(10, 0, 0) */
//конечная позиция которая тебе нужна
BlockPos endBlockPos = null /* blah blah */;
//если длинна больше чем
//разница векторов, то есть (end_pos - start_pos).length
if( end_pos.subtract(start_pos).length() > 4.5f )
{
//...
}
//ИЛИ
//если это нужный блок
if(endBlockPos.equals(itemEntity.getOnPos())) {
//...
}